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学习的实现:
其他论坛的评论:
模型根据自己的预测进行训练的事实是Q-learning的全部要点:这是一个称为自举的概念,意味着重用您的经验。这背后的见解是:
- 代理使用一些权重进行初始化
- 这些权重表示代理试图近似的Q值函数的当前表示形式
- 然后它作用于环境,执行它认为具有最高Q值的动作(具有一定的探索随机性)
- 然后它会收到来自环境的一些反馈:奖励和它所处的新状态
- 通过比较代理对状态
(=t
)的Q值近似值与对状态[s\t\u batch,a\u batch]
的(贴现)近似值加上奖励(t+1
)之间的差异,它能够衡量其对y\u batch
的预测有多错误Qt
- 根据此错误度量(称为TD错误),权重在MSE较低的方向上更新,与任何其他基于梯度的优化一样李>
- (人们可以等待不止一个步骤,从环境中获得更多信息,以更好的方向更新权重。实际上,人们可以等待整个事件结束,然后进行训练。这种从立即训练到等待结束的连续过程称为TD(λ),你应该研究它)
t
与从其下一个状态的Q值近似值预测时间t
之间的均方误差,并考虑到环境的一些“基本事实”,这就是这个时间步的奖励
在我看来,你的损失确实下降了,但它非常不稳定,这是香草Q-Learning的一个已知问题,尤其是香草深度Q-Learning。查看下面的概述文件,了解更复杂的算法是如何工作的
我建议你调查一下。
好的资源也很重要
- RL圣经:萨顿和巴托,强化学习:导论(2015版)
- 本文总结了最近算法的见解和实现
- 我写了一篇关于RL的文章,你可以查阅第2部分:背景理论以获得更详细的见解
- 代理使用一些权重进行初始化
- 这些权重表示代理试图近似的Q值函数的当前表示形式
- 然后它作用于环境,执行它认为具有最高Q值的动作(具有一定的探索随机性)
- 然后它会收到来自环境的一些反馈:奖励和它所处的新状态
- 通过比较代理对状态
(=t
)的Q值近似值与对状态[s\t\u batch,a\u batch]
的(贴现)近似值加上奖励(t+1
)之间的差异,它能够衡量其对y\u batch
的预测有多错误Qt
- 根据此错误度量(称为TD错误),权重在MSE较低的方向上更新,与任何其他基于梯度的优化一样李>
- (人们可以等待不止一个步骤,从环境中获得更多信息,以更好的方式更新权重