PPO算法
PPO(Proximal Policy Optimization,近端策略优化)是一种强化学习中的策略优化算法,由 OpenAI 在 2017 年提出。它被广泛用于训练智能体(比如游戏 AI、机器人控制,以及大语言模型的 RLHF 阶段),因为它简单、稳定、高效。
一、PPO 要解决什么问题?
在强化学习中,我们希望智能体(Agent)通过与环境互动,学到一个“策略”(Policy)——也就是在某个状态下该采取什么动作。
传统的策略梯度方法(如 REINFORCE)存在一个大问题:更新步长不好控制。
- 如果步子迈太大(更新太猛),策略可能会“训歪”,性能反而变差;
- 如果步子太小,训练又太慢。
PPO 的核心思想就是:在每次更新策略时,不要让它偏离当前策略太远,从而保证训练的稳定性。
二、PPO 是怎么做到“别走太远”的?
PPO 有两种主流实现方式,最常用的是 PPO-Clip(裁剪版本):
1. 重要性采样比率(Importance Sampling Ratio)
假设:
- 旧策略(更新前)是 π_old
- 新策略(正在训练的)是 π_θ
对于某个状态-动作对 (s, a),定义比率:
[
r_t(\theta) = \frac{\pi_\theta(a|s)}{\pi_{\text{old}}(a|s)}
]
这个比率衡量了新旧策略在选择动作 a 上的差异。
2. 裁剪(Clipping)机制
PPO 的巧妙之处在于,它裁剪了这个比率,限制在 [1−ε, 1+ε] 范围内(比如 ε=0.2)。
然后,它取“裁剪后的目标”和“原始目标”中的较小值作为最终优化目标(这叫 “保守更新”):
[
L^{CLIP}(\theta) = \mathbb{E}_t \left[ \min\left( r_t(\theta) \hat{A}_t,\ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t \right) \right]
]
其中 (\hat{A}_t) 是优势函数(表示这个动作比平均水平好多少)。
👉 这样做的效果是:
- 如果新策略比旧策略好太多(r_t 太大),就“砍掉”超出部分,防止更新过猛;
- 如果新策略变差了,也会被限制,避免崩溃。
这就像给策略更新加了一个“安全带”。
三、PPO 在 RLHF 中的作用
在大模型的 RLHF(基于人类反馈的强化学习)流程中:
- 先训练一个“奖励模型”(Reward Model)来预测人类偏好;
- 然后用 PPO 算法,以这个奖励模型的输出作为 reward,来微调语言模型;
- PPO 确保语言模型在变得“更符合人类喜好”的同时,不会偏离原始模型太远(避免胡说八道或丧失基本语言能力)。
四、PPO 的优点总结
- ✅ 训练稳定:不容易发散或崩溃;
- ✅ 实现简单:相比之前的 TRPO 算法,PPO 不需要复杂的二阶优化;
- ✅ 样本效率高:可以重复利用经验数据;
- ✅ 广泛应用:从机器人控制到 ChatGPT 的对齐训练都用它。
一句话总结:
PPO 是一种“稳中求进”的强化学习算法——它允许策略更新,但绝不允许“大跃进”,从而在效率和稳定性之间取得优秀平衡。