RL Policy Gradient:如何处理严格为正的奖励?
假设我们在玩一个奖励总是正的游戏(例如,累积分数),并且永远不会有任何负奖励,梯度总是正的,因此 θ 将不断增加!那么我们如何处理永不改变符号的奖励呢?
这是真实的。然而,在许多策略函数和大多数情况下,梯度部分当您达到确定性策略时,将趋于零。这发生在基于“偏好”(每个状态的每个动作的 softmax 权重矩阵)的 softmax 动作选择或作为神经网络的输出层。它将抵消最后一层偏好(或神经网络最后一层的 logits)不受控制地增长的趋势。
您已经确定了 REINFORCE 的真正弱点。例如,以 softmax 动作选择为例,您的总是积极的回报:
当智能体选择非最大化动作时,这将导致正回报,智能体将增加其对该动作的偏好。
当智能体选择一个最大化动作时,这将导致更大的正回报,智能体将更多地增加其对该动作的偏好
REINFORCE 的工作原理是增加对更好行动的偏好比对更坏行动的偏好更快。
这导致了一个反馈过程,其中更频繁地选择更好的动作,更快地增加他们的偏好值。
最终,对最佳动作的偏好将远远高于 softmax 函数饱和的替代方案。梯度 因为所有动作都将接近于零。
这并不总是很快发生,并且由于您问题中的原因,基本的 REINFORCE 实现可能在数值上不稳定。为了提高稳定性(通常是学习速度),您可以将REINFORCE 与基线一起使用,它开始通过使用偏移值来解决您的问题(或类似的)。然后,您还可以进一步采用该想法并使用 Actor-Critic。
最近也遇到了这个问题,这就是我的结果:
我相信您可以将策略更新结果视为类似于一集的总损失。回想一下,在普通神经网络(例如感知器)中,损失也将是正数,优化器正在计算 theta 中的每个参数必须改变多少才能实现损失(通过梯度下降),然后将其反向传播或最后的更新。
这里的不同之处在于,在这种情况下,我们试图最大化奖励。那么为什么奖励不会在某个时候达到无穷大呢?因为每个模拟中的情节数量是有限的,并且每个动作最多可以给出 1,所以你的设置给出的总奖励有一个上限。
我在理论上不是很厉害,但是代码片段对我来说更有意义,所以看看它们是如何实现的会给一些直觉:
Pytorch 版本- 请参阅 finish_episode() 函数 - 这是相当清楚的。
Tensorflow 示例(抱歉,我不知道更好的示例) - 请参阅会话循环的底部。
这里模拟运行了几个情节,其中包括:
对于情节中的每一步,通过对策略动作分数进行抽样来选择一个动作,并将这些分数与游戏的奖励一起存储。
在剧集结束时,使用策略操作日志概率和实际奖励(在这种情况下对所有步骤进行平均)计算总策略损失。梯度是根据最终策略损失计算的,并反向传播。
作为参考,这里是关于 REINFORCE 的 [ http://www-anw.cs.umass.edu/~barto/courses/cs687/williams92simple.pdf ](原始论文),请参阅第 4-5 页,其中解释了更新向量不一定会增加,而是“位于 [the] 绩效衡量标准正在增加的方向上”。

