关于使用神经网络进行Q学习的问题

时间:2014-12-07 08:27:27

标签: machine-learning artificial-intelligence neural-network reinforcement-learning q-learning

我已按照

中所述实施了Q-Learning

http://web.cs.swarthmore.edu/~meeden/cs81/s12/papers/MarkStevePaper.pdf

为了约Q(S,A)我使用如下的神经网络结构,

  • 激活sigmoid
  • 输入,输入数量+ 1个动作神经元(所有输入缩放0-1)
  • 输出,单输出。 Q值
  • N个M隐藏层。
  • 随机探测方法0< rand()< propExplore

在每次学习迭代时使用以下公式

enter image description here

我计算Q-Target值然后使用

计算错误
error = QTarget - LastQValueReturnedFromNN

然后通过神经网络传播错误。

Q1,我是否在正确的轨道上?我已经看到一些论文为每个动作实现了一个具有一个输出神经元的NN。

Q2,我的奖励函数返回介于-1和1之间的数字。当激活函数为sigmoid(0 1)时,可以返回介于-1和1之间的数字

问题3,根据我对这种方法的理解,如果有足够的培训实例,应该隔离它以找到最佳策略?当训练XOR时,有时它会在2k次迭代后学习它,有时即使在40k 50k迭代之后它也不会学习。

1 个答案:

答案 0 :(得分:5)

Q1。如果将所有动作神经元放在输出中,效率会更高。单个前向传递将为您提供该状态的所有q值。此外,神经网络将能够以更好的方式进行推广。

Q2。 Sigmoid通常用于分类。虽然你可以在其他层使用sigmoid,但我不会在最后一层中使用它。

Q3。嗯..用神经网络进行Q学习并不总是趋于融合。看看DQN(deepmind)。他们所做的是解决两个重要问题。它们通过使用内存重放来对训练数据进行去相关。当按顺序给出训练数据时,随机梯度下降并不相似。其次,他们使用旧重量进行自举。这样他们减少了非静止。