如何在RL中获取Q值-DDQN

时间:2019-12-22 21:02:04

标签: python deep-learning neural-network reinforcement-learning

我不确定如何获取DDQN的Q值。

DQN是普通网络,TAR是目标网络。

    q_values = self.DQN.predict(c_states) # DQN batch predict Q on states
    dqn_next = self.DQN.predict(n_states) # DQN batch predict Q on next_states
    tar_next = self.TAR.predict(n_states) # TAR batch predict Q on next_states

我主要发现2个版本:

版本1:

q_values[i][actions[i]] = (rewards[i] + (GAMMA * np.amax(tar_next[i])))

版本2:

act = np.argmax(dqn_next[i])
q_values[i][actions[i]] = (rewards[i] + (GAMMA * tar_next[i][act]))

哪个是正确的?为什么呢?

版本1链接:

https://github.com/keon/deep-q-learning/blob/master/ddqn.py

https://pythonprogramming.net/training-deep-q-learning-dqn-reinforcement-learning-python-tutorial

第2版链接:

https://pylessons.com/CartPole-DDQN/

https://github.com/germain-hug/Deep-RL-Keras/blob/master/DDQN/ddqn.py

https://github.com/rlcode/reinforcement-learning/blob/master/3-atari/1-breakout/breakout_ddqn.py

https://github.com/rlcode/reinforcement-learning/blob/master/2-cartpole/2-double-dqn/cartpole_ddqn.py

https://jaromiru.com/2016/11/07/lets-make-a-dqn-double-learning-and-prioritized-experience-replay/


编辑: 非常感谢,以澄清这一点

SARSA: 
q_values[i][actions[i]] = (rewards[i] + (GAMMA * np.amax(tar_next[i])))

Q-learning: 
act = np.argmax(dqn_next[i])
q_values[i][actions[i]] = (rewards[i] + (GAMMA * tar_next[i][act]))

在我的名单上有非常有用的链接,以了解有关SARSA的信息,但后来;)...

2 个答案:

答案 0 :(得分:1)

这是Q学习(带有最大运算符的版本)与SARSA(没有最大值)的对比。

简而言之,您使用电子贪婪策略收集样本:这是您的行为(或探索)策略。您要学习的策略称为“目标”,可以不同。
通过Q学习,您将使用max运算符,因此将根据贪婪(目标)策略选择目标。这被称为非策略学习,因为您将通过其他策略(行为)收集的样本学习策略(目标)。
对于SARSA,没有最大值,因此在实践中,您仅使用行为策略选择的样本中的操作。这是策略上的,因为目标和行为是相同的。

哪个人更喜欢您,但我认为Q学习更为普遍(DQN使用Q学习)。

有关此内容的更多信息

What is the difference between Q-learning and SARSA?

Are Q-learning and SARSA with greedy selection equivalent?

https://stats.stackexchange.com/questions/184657/what-is-the-difference-between-off-policy-and-on-policy-learning

http://incompleteideas.net/book/RLbook2018.pdf

答案 1 :(得分:0)

感谢您的帮助和此处的信息leosimmons,我发现了造成困惑的原因:

Bellman equation - link 3中使用的Bellman方程遵循以下方程:

value = reward + discount_factor * target_network.predict(next_state)[argmax(online_network.predict(next_state))]

原始(原始)DQN Bellman equation - link 2中的Bellman方程为:

value = reward + discount_factor * max(target_network.predict(next_state))

leosimmons

区别在于,使用该领域的术语,第二个 等式将目标网络用于SELECT和EVALUATING 采取的行动,而第一个方程式将在线网络用于 选择要采取的行动以及评估网络的目标网络 行动。这里的选择意味着选择要采取的行动,并且 评估意味着获得该动作的预计Q值。这个 Bellman方程的形式使该代理成为Double DQN和 不仅是DQN,而且在3中引入。

1 https://medium.com/@leosimmons/double-dqn-implementation-to-solve-openai-gyms-cartpole-v-0-df554cd0614d

2 https://storage.googleapis.com/deepmind-media/dqn/DQNNaturePaper.pdf

3 https://arxiv.org/pdf/1509.06461.pdf

在这里很好地解释了: https://youtu.be/ILDLT97FsNM?t=331