【问题标题】:How to get Q Values in RL - DDQN如何在 RL 中获取 Q 值 - DDQN
【发布时间】:2020-04-14 07:26:53
【问题描述】:

我不确定如何获取 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://github.com/germain-hug/Deep-RL-Keras/blob/master/DDQN/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/


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

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

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

编辑:2020 年 3 月重新开放

对不起,我必须重新提出这个问题。也许我误解了什么,但以下来源表明我的第 2 版 (SARSA) 是双 Q 学习?

第 158 页:双 Q 学习 http://incompleteideas.net/book/RLbook2018.pdf

adventuresinML

adventuresinML source

【问题讨论】:

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


    【解决方案1】:

    感谢您的帮助和leosimmons这里的信息,我找到了困惑的根源:

    这里使用的贝尔曼方程Bellman equation - link 3 遵循以下方程:

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

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

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

    leosimmons

    不同之处在于,使用该领域的术语,第二个 方程使用目标网络来选择和评估 采取的行动,而第一个等式使用在线网络 选择要采取的行动和评估目标网络 行动。这里的选择意味着选择要采取的行动,并且 评估意味着获得该动作的预计 Q 值。这 贝尔曼方程的形式使该代理成为双 DQN 和 不仅仅是一个 DQN,并且在 3 中引入。

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

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

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

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

    【讨论】:

      【解决方案2】:

      这是 Q-learning(带有 max 运算符的版本)与 SARSA(没有 max 的版本)。

      简而言之,您使用 e-greedy 策略收集样本:这是您的行为(或探索)策略。您要学习的策略称为“目标”,可以不同。
      在 Q-learning 中,您使用最大运算符,因此您的目标是根据贪心(目标)策略选择的。这称为离策略学习,因为您使用不同策略(行为)收集的样本来学习策略(目标)。
      使用 SARSA,没有最大值,因此在实践中您只需使用样本中的操作,该操作由行为策略选择。这是合乎政策的,因为目标和行为是相同的。

      选择哪一个取决于你,但我认为 Q-learning 更常见(而 DQN 使用 Q-learning)。

      更多相关阅读

      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

      为 DDQN 编辑

      SARSA 和 Q-learning 是两个独立的算法。
      在 DDQN 中有两个目标 Q 和两个目标策略,所以算法仍然是离策略的(采样策略是 e-greedy,目标策略是贪婪的),而 SARSA 是 on-policy(目标策略 = 采样策略)。
      DDQN 中的技巧是您在 TD 目标中使用 Q2(第二个批评者)上的最大运算符来更新 Q1(第一个批评者),反之亦然。 但是仍然有最大值,所以它仍然不符合政策。相反,SARSA 符合政策。

      DDQN 有多个版本,例如,有些使用 Q1 和 Q2 上的最小值。这里有一些参考

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

      https://arxiv.org/pdf/1802.09477.pdf

      【讨论】:

      • 对不起,西蒙,我不得不编辑我的问题,我找到了 SARSA = DDQN 的其他来源?你能澄清一下吗?
      • @anna12345 我已经编辑了我的答案。我现在无法打开这本书(网速非常慢),但我知道 DDQN(它有多个版本),并且我引用了其中最突出的两个版本。
      猜你喜欢
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2012-01-22
      相关资源
      最近更新 更多