使用神经网络作为函数逼近的 Q 学习

机器算法验证 神经网络 强化学习
2022-03-26 23:35:20

我正在尝试使用神经网络来近似 Q-learning 中的 Q 值,如Questions about Q-Learning using Neural Networks正如第一个答案中所建议的,我对输出层使用线性激活函数,而我仍在隐藏层中使用 sigmoid 激活函数(2,尽管我可以稍后更改)。我还使用了一个 NN,它为每个动作返回一个输出Q(a)按照建议。

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

  • 计算Qt(st)对所有动作使用 NN 的前向传播。
  • 选择一个新动作,at, 登陆一个新的状态st.
  • 计算Qt(st+1)对所有动作使用 NN 的前向传播。
  • 将目标 Q 值设置为: Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)Qt(st,at)] 仅针对当前操作,at, 同时设置Qt+1(s,at)=Qt(s,at)为其他州。注意,我认为这是问题所在。
  • 将误差向量设置为e=QtargetQt=Qt+1Qt
  • 通过 NN 反向传播误差以更新权重矩阵。

谁能指出我哪里出错了?

此外,您认为我是否应该在输入层和第一个隐藏层(即用于 sigmoid 函数)中包含一个偏差项?它会有所作为吗?

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

1个回答

你的目标应该只是

rt+1+γmaxaQ(st+1,a).

请注意,您的错误术语(这是正确的)然后可以重写为 rt+1+γmaxaQ(st+1,a)Qt

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