当我训练我的模型时,我有以下部分:
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
除此之外
模型2
输出为
num_actions
和
模型
仅输出在该状态下执行的操作的值。
我觉得奇怪的是(实际上是这个问题的焦点)函数
train_data
y_batch = r_batch + GAMMA * np.max(model.predict(s_t_batch), axis=1)
奇怪的是,我正在使用该模型生成
y_batch
以及对他们的培训。这难道不是某种自我实现的预言吗?如果我理解正确,该模型试图预测预期的最大回报。使用
相同的
尝试生成的模型
y_批次
问题是
1.使用相同的模型生成y_批和训练它们背后的直觉是什么。2.(可选)损失价值是否有任何意义。当我绘制它时,它似乎没有收敛,但是奖励的总和似乎在增加(见下面链接中的图)。
here
,这是CartPole-v0问题上深度Q学习的实现:
其他论坛的评论:
-
y=r+γ*np。max(model.predict(s\u t\u batch),axis=1)是完全自然的,y将收敛到真实状态动作值。如果你不用体验重播(或者更优先的体验重播)之类的东西来分解连续更新之间的相关性,你的模型就会出现分歧。还有更好的变体,如DDQN,性能更好的决斗网络。
-
y_批次包括奖励。目标网络和在线网络都是估计值。由于DQN的价值函数过于乐观,这确实是一个有点自我实现的预言。这就是为什么几个月后增加了双DQN。
-
y将收敛,但不一定收敛到真实(我假设你是指最优)状态动作值。没有人证明收敛值是最优值,但它是我们拥有的最佳近似值。然而,对于足够简单的问题(例如网格世界),将收敛到真实值