关于使用神经网络的 Q-Learning 的问题

机器算法验证 机器学习 神经网络 强化学习
2022-03-21 21:35:53

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

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

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

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

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

在此处输入图像描述

我计算一个 Q-Target 值,然后使用计算错误,

error = QTarget - LastQValueReturnedFromNN

并通过神经网络反向传播误差。

Q1,我在正确的轨道上吗?我看过一些论文,它们实现了一个神经网络,每个动作都有一个输出神经元。

Q2,我的reward function返回一个-1到1之间的数字,激活函数是sigmoid(0 1)的时候返回一个-1到1之间的数字可以吗

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

2个回答

Q1。你肯定走在正确的轨道上,但一些改变可能会有很大帮助。有些人每个动作使用一个输出单元,因此他们只需运行一次网络即可进行动作选择(您必须为每个可能的动作运行一次网络)。但这不应该对学习产生影响,并且只有在您计划显着扩大模型时才值得实施。

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

Q3。不幸的是,将神经网络(以及一般的非线性函数逼近)与强化学习相结合的理论保证几乎不存在。有一些更高级的强化学习版本(主要来自 Sutton 实验室)可以提出你提到的那种收敛性声明,但我从未真正看到这些算法“在野外”应用。这样做的原因是,虽然不能保证出色的性能,但通常在实践中获得,并适当注意超参数和初始条件。

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

有关使用强化学习训练的神经网络的出色实现,请参阅本文:

Mnih、Volodymyr 等人。“用深度强化学习玩 Atari。” arXiv 预印本 arXiv:1312.5602 (2013)。

对于激活函数,maxout 也很有效。使用合适的训练器对于深度网络至关重要,我尝试了各种训练器,但决定坚持使用 RMSprop,它看起来很棒!