Deep learning 深度Q学习是如何工作的

Deep learning 深度Q学习是如何工作的,deep-learning,reinforcement-learning,openai-gym,q-learning,Deep Learning,Reinforcement Learning,Openai Gym,Q Learning,当我培训我的模特时,我有以下部分: s_t_batch, a_batch, y_batch = train_data(minibatch, model2) # perform gradient step loss.append(model.train_on_batch([s_t_batch, a_batch], y_batch)) 其中,s\t,a分别对应于当前状态和在这些状态下采取的操作model2与model相同,不同之处在于model2具有num_actions的输出,并且model仅输

当我培训我的模特时,我有以下部分:

s_t_batch, a_batch, y_batch = train_data(minibatch, model2)
# perform gradient step
loss.append(model.train_on_batch([s_t_batch, a_batch], y_batch))
其中,
s\t,a
分别对应于当前状态和在这些状态下采取的操作
model2
model
相同,不同之处在于
model2
具有
num_actions
的输出,并且
model
仅输出在该状态下执行的操作的值

我觉得奇怪的是(实际上是这个问题的焦点)函数
train\u data
我有一行:

y_batch = r_batch + GAMMA * np.max(model.predict(s_t_batch), axis=1)
奇怪的是,我正在使用该模型生成我的
y_批处理
,并对它们进行培训。这难道不是某种自我实现的预言吗?如果我理解正确,该模型试图预测预期的最大回报。使用相同的模型尝试并生成
y\u批
意味着它是真实的模型,不是吗

问题是,1。使用同一个模型生成y_批次和训练他们背后的直觉是什么。2.(可选)损失价值是否有任何意义。当我绘制它时,它似乎没有收敛,但是奖励的总和似乎在增加(见下面链接中的图)

可以找到完整的代码,这是CartPole-v0问题上深度Q学习的实现:

其他论坛的评论:
  • y=r+gamma*np.max(model.predict(s_t_batch),axis=1)是完全自然的,y将收敛到真实状态动作值。如果你不用体验重播(或者更优先的体验重播)之类的东西来分解连续更新之间的相关性,你的模型就会出现分歧。还有更好的变体,比如DDQN,一种性能更好的决斗网络
  • y_批次包括奖励。目标网络和在线网络都是估计值。这确实是一个自我实现的预言,因为DQN的价值函数过于乐观。这就是为什么几个月后增加了双DQN
  • y将收敛,但不一定是真正的(我假设你是指最佳)状态动作值。没有人证明收敛值是最优值,但它是我们得到的最佳近似值。但是,对于足够简单的问题(例如网格世界),将收敛到真实值

  • 模型根据自己的预测进行训练的事实是Q-learning的全部要点:这是一个称为自举的概念,意味着重用您的经验。这背后的见解是:

    • 代理使用一些权重进行初始化
    • 这些权重表示代理试图近似的Q值函数的当前表示形式
    • 然后它作用于环境,执行它认为具有最高Q值的动作(具有一定的探索随机性)
    • 然后它会收到来自环境的一些反馈:奖励和它所处的新状态
    • 通过比较代理对状态
      t
      (=
      [s\t\u batch,a\u batch]
      )的Q值近似值与对状态
      t+1
      的(贴现)近似值加上奖励(
      y\u batch
      )之间的差异,它能够衡量其对
      Qt
      的预测有多错误
    • 根据此错误度量(称为TD错误),权重在MSE较低的方向上更新,与任何其他基于梯度的优化一样
    • (人们可以等待不止一个步骤,从环境中获得更多信息,以更好的方向更新权重。实际上,人们可以等待整个事件结束,然后进行训练。这种从立即训练到等待结束的连续过程称为TD(λ),你应该研究它)
    你的损失恰恰意味着:对于一批,它是模型从其唯一的Q值近似值预测时间
    t
    与从其下一个
    状态的Q值近似值预测时间
    t
    之间的均方误差,并考虑到环境的一些“基本事实”,这就是这个时间步的奖励

    在我看来,你的损失确实下降了,但它非常不稳定,这是香草Q-Learning的一个已知问题,尤其是香草深度Q-Learning。查看下面的概述文件,了解更复杂的算法是如何工作的

    我建议你调查一下。 好的资源也很重要

    • RL圣经:萨顿和巴托,强化学习:导论(2015版)
    • 本文总结了最近算法的见解和实现
    • 我写了一篇关于RL的文章,你可以查阅第2部分:背景理论以获得更详细的见解

    模型根据自己的预测进行训练这一事实是Q-learning的全部要点:这是一个称为自举的概念,意味着重用您的经验。这背后的见解是:

    • 代理使用一些权重进行初始化
    • 这些权重表示代理试图近似的Q值函数的当前表示形式
    • 然后它作用于环境,执行它认为具有最高Q值的动作(具有一定的探索随机性)
    • 然后它会收到来自环境的一些反馈:奖励和它所处的新状态
    • 通过比较代理对状态
      t
      (=
      [s\t\u batch,a\u batch]
      )的Q值近似值与对状态
      t+1
      的(贴现)近似值加上奖励(
      y\u batch
      )之间的差异,它能够衡量其对
      Qt
      的预测有多错误
    • 根据此错误度量(称为TD错误),权重在MSE较低的方向上更新,与任何其他基于梯度的优化一样
    • (人们可以等待不止一个步骤,从环境中获得更多信息,以更好的方式更新权重