a3c连续动作题

a3c continuous action probelm

我想为一个使用鼠标移动的游戏实现强化学习。本游戏只关心鼠标的x轴。

我的第一个尝试是让它离散。游戏将有 3 个动作。两个动作用于将鼠标左右移动 30 像素,一个动作用于静止不动。它有效,但现在我想让它连续。

我所做的是使神经网络输出均值和标准差。就像这段代码https://github.com/stefanbo92/A3C-Continuous/blob/master/a3c.py。我什至第二次尝试使用此代码。游戏的宽度是 480,所以 A_BOUND 是 [-240,240]。为了使问题始终具有积极的行动,我将预测行动添加到 240,然后将鼠标位置设置为新的行动。

例如:如果动作是 240 + -240,那么鼠标 x 位置将是 0。问题是我的神经网络输出仅在开始后从 240 到 -240 的极值持续秒。

你的问题的原因是你的神经网络的输出被激活函数压缩了。这是一个问题,因为很少有值会导致输出不是最大值或最小值。

Tanh 激活

以上是双曲正切激活函数的形状。如您所见,如果输入值介于 -3 到 3 之间,则该值仅为非 max/min,超出该值的任何值都会导致最大值或最小值。

为了克服这个问题,您必须使用非常小的权重初始化您的神经网络。您可以使用介于 -0.003 到 0.003 之间的随机统一值来初始化权重。这些是我使用的值。这样一开始,你的神经网络会输出接近0的值,然后权重会更新,学习会更稳定。

要进一步更正此错误,您必须对执行大的状态更改进行小的惩罚。

例如,penalty = (state * 0.01) ^ 2,其中state = [-240, 240].

这样,您的神经网络将意识到与较大变化相关的损失较高,因此它会谨慎使用它,并且仅在必要时才使用它。