RL Policy Gradient:如何处理严格为正的奖励?

数据挖掘 强化学习
2021-10-03 18:42:25

简而言之:

在策略梯度方法中,如果奖励始终为正(从不为负),则策略梯度将始终为正,因此它将不断使我们的参数变大。这使得学习算法毫无意义。我们如何解决这个问题?


详细:

在“David Silver 的 RL 课程”第 7 讲(在 YouTube 上)中,他介绍了策略梯度的 REINFORCE 算法(这里只展示了 1 个步骤):

在此处输入图像描述

实际的政策更新是:

在此处输入图像描述

注意v这里代表我们得到的奖励。假设我们在玩一个奖励总是正数的游戏(例如累积分数),并且永远不会有任何负奖励,梯度总是正数,因此θ会不断增加!那么我们如何处理永不改变符号的奖励呢?

2个回答

假设我们在玩一个奖励总是正的游戏(例如,累积分数),并且永远不会有任何负奖励,梯度总是正的,因此 θ 将不断增加!那么我们如何处理永不改变符号的奖励呢?

这是真实的。然而,在许多策略函数和大多数情况下,梯度部分θlGπθ(s,一个)当您达到确定性策略时,将趋于零。这发生在基于“偏好”(每个状态的每个动作的 softmax 权重矩阵)的 softmax 动作选择或作为神经网络的输出层。它将抵消最后一层偏好(或神经网络最后一层的 logits)不受控制地增长的趋势。

您已经确定了 REINFORCE 的真正弱点。例如,以 softmax 动作选择为例,您的总是积极的回报:

  • 当智能体选择非最大化动作时,这将导致正回报,智能体将增加其对该动作的偏好。

  • 当智能体选择一个最大化动作时,这将导致更大的正回报,智能体将更多地增加其对该动作的偏好

  • REINFORCE 的工作原理是增加对更好行动的偏好比对更坏行动的偏好更快。

  • 这导致了一个反馈过程,其中更频繁地选择更好的动作,更快地增加他们的偏好值。

  • 最终,对最佳动作的偏好将远远高于 softmax 函数饱和的替代方案。梯度 θlGπθ(s,一个)因为所有动作都将接近于零。

这并不总是很快发生,并且由于您问题中的原因,基本的 REINFORCE 实现可能在数值上不稳定。为了提高稳定性(通常是学习速度),您可以将REINFORCE 与基线一起使用,它开始通过使用偏移值来解决您的问题(v-v¯或类似的)。然后,您还可以进一步采用该想法并使用 Actor-Critic。

最近也遇到了这个问题,这就是我的结果:

我相信您可以将策略更新结果视为类似于一集的总损失。回想一下,在普通神经网络(例如感知器)中,损失也将是正数,优化器正在计算 theta 中的每个参数必须改变多少才能实现损失(通过梯度下降),然后将其反向传播或最后的更新。

这里的不同之处在于,在这种情况下,我们试图最大化奖励。那么为什么奖励不会在某个时候达到无穷大呢?因为每个模拟中的情节数量是有限的,并且每个动作最多可以给出 1,所以你的设置给出的总奖励有一个上限。

我在理论上不是很厉害,但是代码片段对我来说更有意义,所以看看它们是如何实现的会给一些直觉:

Pytorch 版本- 请参阅 finish_episode() 函数 - 这是相当清楚的。

Tensorflow 示例(抱歉,我不知道更好的示例) - 请参阅会话循环的底部。

这里模拟运行了几个情节,其中包括:

对于情节中的每一步,通过对策略动作分数进行抽样来选择一个动作,并将这些分数与游戏的奖励一起存储。

在剧集结束时,使用策略操作日志概率和实际奖励(在这种情况下对所有步骤进行平均)计算总策略损失。梯度是根据最终策略损失计算的,并反向传播。

作为参考,这里是关于 REINFORCE 的 [ http://www-anw.cs.umass.edu/~barto/courses/cs687/williams92simple.pdf ](原始论文),请参阅第 4-5 页,其中解释了更新向量不一定会增加,而是“位于 [the] 绩效衡量标准正在增加的方向上”。