【问题标题】:a3c continuous action probelma3c 连续动作问题
【发布时间】:2018-09-14 15:05:46
【问题描述】:

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

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

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

例如:如果动作是 240 + -240,那么鼠标 x pos 将为 0。问题是我的神经网络在开始后几秒内始终输出 240 到 -240 的极值。

【问题讨论】:

  • 你的学习率有多大?
  • 我的学习率是0.0001
  • 减少会不会好些?
  • 我尝试了前一个的 1/5,并调整了权重和偏差。现在极端情况不会发生,但我的演员喜欢积极,所以我的意思总是积极的。这可能是因为正面有更多的回报,但它应该尝试同时获得两者的回报,并且在必要时总是积极和消极。唯一一次变为负数是在开始时,然后永远不会回头。我不知道为什么。 – dark1sider 7 分钟前
  • edit标题中的错字,谢谢。

标签: tensorflow deep-learning reinforcement-learning


【解决方案1】:

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

Tanh 激活

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

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

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

例如,惩罚 = (state * 0.01) ^ 2,其中 state = [-240, 240]。

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

【讨论】:

  • 很抱歉没有尽快回复,我正在尝试不同的东西。我尝试了低权重并且它有效,但我不知道如何做惩罚损失的事情让我们说这个代码例如 github.com/stefanbo92/A3C-Continuous/blob/master/a3c.py self.a_loss = tf.reduce_mean (-self.exp_v)+(self.a_his * 0.01) ^ 2 对吗?还是我把惩罚放在剧集奖励上??
  • 你必须这样做:self.a_loss = tf.reduce_mean((-self.exp_v)+(self.a_his * 0.01) ^ 2)。确保整个损失都在 reduce mean 函数中。
  • 非常感谢,现在我的神经网络没有走极端。剩下的唯一问题是它开始从负数变为正数,但过了一段时间,它根本不会变成负数。正面和负面都有回报,但一般来说,正面的回报更多,这就是为什么它卡住并且永远不会变成负面的原因。我不知道如何解决这个问题。有什么技巧可以强迫它学会消极。
  • 如果最佳行动是积极的,你有理由让鼠标变消极吗?
  • 为了获得最大的奖励,鼠标需要转为负数,即使有更多的机会获得正数的奖励。我的输入是 83 x 83 灰度图像。我有 3 个卷积层和 1 个密集的 256 个单元。当帧发生变化时,平均值的变化非常小,例如下一帧它保持在 0.454 到 0.46 并且 std 变得如此之低。这种行为不会消极。我目前正在尝试 beta 分发。
猜你喜欢
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
相关资源
最近更新 更多