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


14

我已经按照中所述实施了Q-Learning,

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

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

  • 激活乙状结肠
  • 输入,输入数量+动作神经元的1(所有输入按0-1比例缩放)
  • 输出,单路输出。Q值
  • N个M隐藏层。
  • 探索方法随机0 <rand()<propExplore

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

在此处输入图片说明

我计算一个Q目标值,然后使用计算一个误差,

error = QTarget - LastQValueReturnedFromNN

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

Q1,我走对了吗?我已经看到了一些论文,这些论文的每个动作都实现了一个带有一个输出神经元的NN。

Q2,我的奖励函数返回-1和1之间的数字。当激活函数为S形(0 1)时,可以返回-1和1之间的数字吗?

问题3,根据我对这种方法的理解,给定足够的培训实例,应该对其进行隔离以找到最佳的政策依据?训练XOR有时会在2k次迭代后学习,有时甚至在40k 50k迭代后也不会学习。


出于好奇,您如何将状态输入与动作输入结合在一起,以便同时将两者输入网络?您是否可以公开获得这段代码?谢谢!
Pedro Lopes

Answers:


9

Q1。您肯定走在正确的道路上,但是一些更改可能会极大地帮助您。有些人每个动作使用一个输出单元,因此他们只需为选择动作而运行一次网络(对于每个可能的动作,您必须运行一次网络)。但这在学习方面不应该有所作为,仅在您计划大幅扩展模型时才值得实现。

Q2。通常,人们将线性激活函数用于其神经网络的最后一层,尤其是用于强化学习。造成这种情况的原因多种多样,但最相关的是,线性激活函数允许您将整个实数范围表示为输出。因此,即使您不知道任务奖励的范围,也仍然可以保证代表该范围。

Q3。不幸的是,将神经网络(通常是非线性函数逼近)与强化学习相结合的理论保证几乎不存在。有一些更高级的强化学习版本(主要是萨顿实验室提供的)可以做出您提到的融合主张,但我从未真正看到过这些算法在“野外”应用。原因是无法保证出色的性能,但通常是在实践中获得的,要特别注意超参数和初始条件。

最后一点要提到的是神经网络:不要将Sigmoid激活函数用于具有很多隐藏层的网络!他们对“消失的梯度”问题感到困扰;错误信号几乎不会到达较早的层(查看函数的导数应该清楚为什么会这样)。相反,请尝试使用整流线性单位(RELU)或“软加”单位,因为它们通常在深度网络中表现出更好的性能。

有关增强学习训练的神经网络的出色实现,请参见本文:

Mnih,Volodymyr等人。“在Atari进行深度强化学习。” arXiv预印本arXiv:1312.5602(2013)。


0

对于激活功能,maxout也可以正常工作。使用适当的培训师对于深层网络至关重要,我曾尝试过各种培训师,但决定坚持使用RMSprop,它看起来很棒!


1
欢迎使用该站点@ user3355911。这可能太稀疏,无法在此处给出答案。你能扩大它并充实它吗?
gung-恢复莫妮卡
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.