在讲解 PPO(Proximal Policy Optimization) 算法的优化目标之前,我们先用一个贴近生活的例子来类比它的核心思想,看看为什么要这样设计,以及它解决了什么问题。
1. 用生活经验类比PPO的核心思想
场景:练习投篮
假设你正在练习投篮——每次投篮(动作)后,你都会根据投篮的结果(奖励)来判断“姿势”是否需要调整。
- 老政策(Old Policy):你之前一直使用的投篮姿势。
- 新政策(New Policy):你打算做一些微调后的投篮姿势,想看看能不能提高命中率。
如果你每次练习都大幅度改变投篮姿势,比如一下子从标准姿势改成单手“乱抛”的动作,那么很可能导致投篮命中率大幅波动,甚至退步。这种情况下,你不能确切知道是姿势调整出了问题,还是单纯运气不好。这就像在强化学习里,如果新策略和旧策略的差异过大,可能会产生极端不稳定的训练结果,甚至导致之前学到的好东西都“推翻重来”。
PPO 的做法就像在每次练投篮时,对新姿势有一个“限制”,确保你不要一下子改动太大,从而在慢慢微调的过程中持续稳定地提高准确率。
2. PPO 的优化目标:为什么要这样设计?
PPO 的核心是在策略更新时,对新旧策略的差异做了“约束”。它通过一个“裁剪(clipping)”操作,来限制策略更新的幅度,避免新旧策略之间出现过大的偏移。
在数值上,PPO 的优化目标可以简化为下面这种“带有裁剪”的形式(省略了一些不必要的细节):
换回投篮的例子:
这样设计的好处
- 避免一步改动过大:就像上面的投篮例子,这种“剪裁”策略会迫使我们每次只做小幅度更新,降低了训练不稳定或者“学崩”的风险。
- 确保稳定收敛:在政策梯度方法中,如果新旧策略差别过大,可能导致梯度爆炸或崩溃。PPO 通过裁剪来保证更新更平稳,从而提升在大规模问题上的稳定性和效率。
- 保留改进方向:PPO 的目标函数使用了min(⋅,⋅) 的形式,保证只要新策略确实对收益有提升,就会沿着正确方向更新;若更新幅度过大反而让收益变差,则会进行限制。
3. 这样设计解决了什么问题?
在更“学术”的层面,这样的设计主要解决了以下问题:
- 策略更新不稳定
在早期的策略梯度方法(如 REINFORCE、Vanilla Policy Gradient)或者 Trust Region Policy Optimization (TRPO) 中,如果更新过大,很容易出现性能骤降。
PPO 相比 TRPO,实现了类似的“限制策略更新幅度”的想法,但公式和计算更简单,也更易实现。
- 计算代价过高
TRPO 需要解决一个复杂的二阶近似优化问题,计算和实现都相对麻烦。
PPO 则通过简单的裁剪操作和一阶梯度优化来实现相似的效果,减轻了计算负担。
- 提高训练效率
- 通过限制策略更新幅度,PPO 往往可以更稳定、更快速地收敛。
- 在实际应用中,比起频繁地因过大更新导致的“退步”或“不收敛”,稳定的小步更新往往更能省时省力。