我创建了一个具有 2 个输入节点、4 个隐藏节点和 3 个输出节点的神经网络。初始权重在-1到1之间随机。我使用反向传播方法来更新具有TD误差的网络。不过,表现并不好。
我想知道问题出在哪里?
1. 是否需要偏置节点?
2. 是否需要资格证明?
如果有人可以向我提供任何示例代码,我将非常感激。
最佳答案
是的,您应该包括偏差节点,是的,您应该使用资格跟踪。偏置节点仅提供一个额外的可调参数。将神经网络视为“函数逼近器”,如 Sutton 和 Barto 的书 ( free online ) 中所述。如果神经网络具有参数 theta(包含网络中所有权重的向量),则 Sarsa 更新就是(使用 LaTeX 表示法):
\delta_t = r_t +\gamma*Q(s_{t+1},a_{t+1},\theta_t) - Q(s_t,a_t,\theta_t)
\theta_{t+1} =\theta_t +\alpha*\delta_t*\frac{\partial Q(s,a,\theta)}{\partial\theta}
这适用于任何函数逼近器 Q(s,a,\theta),它通过调整其参数\theta 来估计 Q(s,a)。
但是,我必须问你为什么要这样做。如果您只是想让 Q 学习真正发挥作用,那么您应该使用傅里叶基础而不是神经网络:
http://all.cs.umass.edu/pubs/2011/konidaris_o_t_11.pdf
如果您确实想使用神经网络进行强化学习,那么您应该使用自然 Actor 批评家 (NAC)。 NAC 遵循所谓的“自然梯度”,它是由 Amari 专门开发的,旨在使用神经网络加速学习,并且它会产生巨大的差异。
关于neural-network - 如何用神经网络实现Q-learning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13928501/