以神经网络为函数逼近的Q学习


11

我正在尝试使用神经网络来估计Q学习中的Q值,如有关使用神经网络进行Q学习的问题中所述。正如第一个答案中所建议的那样,我在输出层使用线性激活函数,而在隐藏层中仍使用S形激活函数(2,尽管稍后可以更改)。我还使用了单个NN,它根据建议为每个动作返回输出。Q(a)

但是,对于简单的车杆平衡问题,该算法仍存在分歧。所以,我担心我的Q更新是错误的。初始化之后,我在每个步骤中所做的工作如下:

  • 使用NN对所有动作的前向传播计算。Qt(st)
  • 选择一个新动作,处于新状态。小号ŧatst
  • 使用NN对所有动作的前向传播计算。Qt(st+1)
  • 将目标Q值设置为: 仅针对当前动作a_t,同时为其他状态设置Q_ {t + 1}(s,a_t)= Q_ {t}(s,a_t)。注意,我认为这是问题所在。Q + 1小号Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)Qt(st,at)]atQt+1(s,at)=Qt(s,at)
  • 将误差向量设置为Ë=Ť一种[RGËŤ-Ť=Ť+1个-Ť
  • 通过NN向后传播误差,以更新权重矩阵。

有人可以向我指出我哪里出问题了吗?

此外,您认为我应该在输入层和第一个隐藏层中也包含一个偏差项吗(例如,对于S型函数)?会有所作为吗?

预先非常感谢您的帮助。如果需要,我可以帮助您澄清问题或共享代码。

Answers:


9

您的目标应该是

[RŤ+1个+γ最大值一种sŤ+1个一种

请注意,您的错误项(正确)然后可以重写为 [RŤ+1个+γ最大值一种sŤ+1个一种-Ť

这是更新公式中括号内的术语。这将乘以您的NN学习率和学习过程中的其他反向传播项,然后添加到先前的权重中,就像更新公式一样。


谢谢你的小费!这样,我就可以避免目标值出现数值错误:正如您所说,先加上然后减去是没有意义的。Ť
Enrico Anderlini'3

但是,我的NN + Q学习仍然没有收敛。因此,如果方法正确,我想我将尝试尝试学习率以及隐藏层中神经元的数量
Enrico Anderlini

1
是的,您应该这样做(也尝试使用ReLU传递函数)。但是请注意,Q-Learning无法通过函数逼近来保证收敛。如果您的下一次尝试不起作用,则可能需要尝试“优势学习”。最后,问题可能是您的数据不是iid。因此,您需要实施“体验重播”。
rcpinto

我对这个问题有一个延伸。我理解问题中提到的算法,但对和术语感到困惑。如果仅在游戏结束时(获胜或失败的情况下)知道游戏的奖励,我们如何为中间步骤提供奖励?Ť+1个[RŤ+1个
Kanishka Ganguly

1
你不知道,它是零。但是,由于Q值是对累积未来奖励的估计,因此它会被Q值缓慢传播到以前的状态。
rcpinto
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.