【问题标题】:How to solve the zero probability problem in the policy gradient?如何解决策略梯度中的零概率问题?
【发布时间】:2020-11-02 17:00:22
【问题描述】:

最近,我尝试将朴素的策略梯度方法应用于我的问题。但是,我发现最后一层神经网络的不同输出之间的差异是巨大的,这意味着在应用了softmax层之后,只有一个动作会被标记为1,其他动作会被标记为0。例如,最后一层的输出如下图:

[ 242.9629, -115.6593,   63.3984,  226.1815,  131.5903, -316.6087,
 -205.9341,   98.7216,  136.7644,  266.8708,   19.2289,   47.7531]

应用softmax函数后,很明显只会选择一个动作。

[4.1395e-11, 0.0000e+00, 0.0000e+00, 2.1323e-18, 0.0000e+00, 0.0000e+00,
 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00, 0.0000e+00, 0.0000e+00]

这个问题严重影响了最终的性能,因为神经网络只会在几步之后尝试不断的动作。那么,有没有办法解决这个问题呢?

(顺便说一句,即使我试图给神经网络一些负奖励,它选择的动作仍然没有改变。)

我的训练曲线如下图:

【问题讨论】:

    标签: reinforcement-learning policy-gradient-descent


    【解决方案1】:

    事实上,没有确定性的方法来解决这个问题,因为这是优化领域中一个古老的问题,称为“探索-利用困境”。具体来说,在强化学习中,有两种简单的方法可以解决这个问题:

    1. 首先,降低学习率是解决这个问题的最简单方法。通过较低的学习率,策略网络可以探索更多不同的动作,从而避免陷入局部最优。
    2. 其次,将策略熵项添加到损失函数中是解决此问题的另一种方法。这种想法的一个很好的例子是软演员评论 (SAC) 算法。

    这两种方法都在我的任务中得到了验证,它们都有效地缓解了早熟问题。但是,它们都有一个参数需要手动调整,这增加了我的算法的复杂度。

    顺便说一句,类似于 Q-Learning,我们也可以使用 epsilon-greedy 机制来鼓励智能体探索更多的动作。但是,这不是解决这个问题的优雅方法,因为很难确定 epsilon 值。

    【讨论】:

      【解决方案2】:
      1. 据我所知,通常采用PG来处理连续动作。您可能需要尝试基于值的算法。
      2. softmax 的实现是否正确?在此处粘贴您的代码,或者一些学习过程的指标可能会有所帮助

      【讨论】:

      • 1.在离散的动作空间中使用 PG 是很常见的。 2.我几乎可以肯定我的实现是正确的,我只是在最后一个线性层的输出上应用了“torch.softmax”。
      • 我不确定你的问题是什么。使用 softmax,很可能会选择更大的 logits。有一些选项可以替换 softmax 来解决这个问题。但我忘记了是哪篇论文提到的。
      • 描述只是声称你的 PG 不起作用,但我不知道是什么让它不起作用。缺乏探索?稀疏奖励?学习过程出错了?你至少可以提供你的曲线
      • 我在问题描述中补充了训练曲线。首先,很容易看出上述问题会导致探索不足。但是,我不知道如何解决这个问题。
      • PG是一种on-plicy方法,它只能使用当前策略的数据。对于连续动作,从高斯采样,添加 OU 噪声是引入噪声的方法。如果您需要更多随机策略,添加像 SAC 这样的熵项可能会有所帮助。或者,也许天真的 pg 还不足以解决问题(稀疏奖励?long horizeon..)
      猜你喜欢
      • 2022-07-20
      • 2020-02-23
      • 2021-09-01
      • 2017-03-19
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      • 2020-09-12
      相关资源
      最近更新 更多