我已按照
中所述实施了Q-Learninghttp://web.cs.swarthmore.edu/~meeden/cs81/s12/papers/MarkStevePaper.pdf
为了约Q(S,A)我使用如下的神经网络结构,
在每次学习迭代时使用以下公式
我计算Q-Target值然后使用
计算错误error = QTarget - LastQValueReturnedFromNN
然后通过神经网络传播错误。
Q1,我是否在正确的轨道上?我已经看到一些论文为每个动作实现了一个具有一个输出神经元的NN。
Q2,我的奖励函数返回介于-1和1之间的数字。当激活函数为sigmoid(0 1)时,可以返回介于-1和1之间的数字
问题3,根据我对这种方法的理解,如果有足够的培训实例,应该隔离它以找到最佳策略?当训练XOR时,有时它会在2k次迭代后学习它,有时即使在40k 50k迭代之后它也不会学习。
答案 0 :(得分:5)
Q1。如果将所有动作神经元放在输出中,效率会更高。单个前向传递将为您提供该状态的所有q值。此外,神经网络将能够以更好的方式进行推广。
Q2。 Sigmoid通常用于分类。虽然你可以在其他层使用sigmoid,但我不会在最后一层中使用它。
Q3。嗯..用神经网络进行Q学习并不总是趋于融合。看看DQN(deepmind)。他们所做的是解决两个重要问题。它们通过使用内存重放来对训练数据进行去相关。当按顺序给出训练数据时,随机梯度下降并不相似。其次,他们使用旧重量进行自举。这样他们减少了非静止。