Proximal Policy Optimization
近端策略优化(Proximal Policy Optimization, PPO) 是当前最主流的在线 策略梯度(Policy Gradient) 算法。它用一阶优化近似 TRPO(Trust Region Policy Optimization) 的 KL 约束更新:通过裁剪(clip)概率比,把单步策略更新限制在当前策略的邻域内,从而在”样本高效复用”和”训练稳定性”之间取得良好平衡。PPO 也是 InstructGPT、Llama 2、Claude 等 RLHF 对齐训练的事实标准算法。
核心思想
朴素 REINFORCE 每次 rollout 只用一次,样本效率低。直接复用旧轨迹去更新新策略又会引入 同策略偏差(on-policy bias),见 on-policy-vs-off-policy-rl。TRPO 用一个严格的 KL 约束 限制每步策略更新幅度,保证单调改进,但求解二阶优化代价很高。
PPO 把这个约束做了两个工程化简:
- PPO-Clip:不写 KL 约束,而是直接裁剪 概率比(probability ratio) ,用一阶梯度就能优化。
- PPO-Penalty:把 KL 写成自适应系数的惩罚项加进 loss,系数按实际 KL 偏离量动态调整。
实践中 PPO-Clip 更常用,本页默认讨论 PPO-Clip。完整的推导链条(从 policy gradient 到 PPO)见 策略梯度到 PPO 的推导。
PPO-Clip 目标函数
给定优势 (见 value-model 与 GAE 部分),PPO-Clip 最大化:
其中 是新旧策略在动作 上的概率比, 是裁剪范围(典型值 0.2)。
Clip 的悲观下界直觉
把目标函数压平成一个分段线性的”天花板-地板”结构:
- 当 (动作比平均好),希望提高 。一旦 ,clip 让该项不再贡献梯度——防止模型在好动作上一次性过度放大。
- 当 (动作比平均差),希望降低 。一旦 ,clip 同样截断。
最关键的是外层的 :它让 loss 始终取 “unclipped” 与 “clipped” 两者中更保守的那个,形成一个悲观下界。这意味着:
- 策略朝坏方向(远离 但让 advantage 变差)走时,loss 不会假装一切都好——完整的 penalty 会被保留;
- 策略朝好方向(远离 且让 advantage 更好)走时,超出 clip 范围后没有额外奖励,从而抑制过冲。
详细的分段讨论与推导见 policy-gradient-to-ppo-derivation。
Actor-Critic 完整损失
PPO 通常以 actor-critic 形式训练,与策略头共享网络主干:
- :上面的 clipped 策略损失。
- :价值头的平方损失,使 逼近回报目标 。详见 value-model。
- :策略熵 ,作为 熵奖励(entropy bonus) 鼓励探索。
论文典型取值 ,。
Advantage 与 GAE
PPO 几乎总是搭配 GAE(Generalized Advantage Estimation) 计算 :
参数 权衡 bias 和 variance: 是一步 TD(低方差高 bias), 是 Monte Carlo residual(无 bias 高方差)。典型 。GAE 的递推 允许在反向扫描时 计算整条轨迹。完整推导见 policy-gradient-to-ppo-derivation。
RLHF 场景下的 PPO
把 PPO 用到语言模型对齐时,要做几个典型适配:
- :优化目标是整条 response 的质量,不对中间 token 做时间折扣。
- 稀疏 reward:只在序列末尾由 奖励模型(Reward Model)(见 reward-model) 给一个标量 reward;中间 token 的 reward 全为 0。
- KL shaping:与原始 SFT 模型的 KL 距离通常减在 reward 里而不是加在 loss 里(即 ),这样 advantage 计算不变,便于复用标准 PPO 代码。见 kl-divergence。
- 每 token 一个 action:状态 是 prompt + 已生成的前缀,动作 是下一个 token。价值函数学习”给定到目前为止生成的前缀,最终 reward 的期望”——但这是一个极难的估计问题,因为大多数前缀还没有 reward 信号。这正是后来 GRPO 扔掉 critic 的动机之一。
完整的训练循环——包括 4 个模型的角色、shaped reward 的混合结构、一次 rollout + update 的端到端流程、GAE 信号沿序列指数衰减的数值感受——见 PPO+RLHF 训练循环 walkthrough。
与其它方法的关系
| 方法 | 特点 | 与 PPO 的关系 |
|---|---|---|
| REINFORCE | 朴素 policy gradient | PPO 的原始形式,无 clip 无 baseline |
| A2C / A3C | advantage actor-critic | PPO 的前辈,无 clip,同批数据只更新一次 |
| TRPO | 二阶 KL 约束 | PPO 的理论来源,PPO 用 clip 做一阶近似 |
| GRPO | 去掉 critic,组内标准化 baseline | 见 grpo,在 LLM 场景下简化 PPO |
| DPO | 直接偏好优化 | 跳过 RL 过程的 offline 方法 |
实践超参数
| 超参数 | 典型值 | 说明 |
|---|---|---|
| 0.1 – 0.3 | clip 范围;RLHF 场景常取 0.2 | |
| 0.99(控制)/ 1.0(RLHF) | reward 折扣 | |
| (GAE) | 0.95 – 0.97 | advantage 平滑 |
| KL 系数 | 0.01 – 0.1(自适应) | reward shaping 强度 |
| Rollout 长度 | 数百至数千 token | 越长越稳定但越贵 |
| Epochs per rollout | 2 – 10 | 同一批数据重复更新次数;过多会 off-policy |
| Minibatch size | 32 – 256 | 梯度更新 batch |
常见实现细节
- Value function clipping:对 value 也做一次 clip,。
- Advantage normalization:在 minibatch 级别对 做均值 0、方差 1 的标准化,显著降低梯度方差。
- 全局梯度裁剪: 防止单步梯度爆炸。
- Adam 调小:取 而不是默认的 ,对复现性影响明显。
- Orthogonal initialization:policy 输出层 scale 0.01,value 输出层 scale 1.0。
参考资料
- Proximal Policy Optimization Algorithms (Schulman et al., 2017)
- High-Dimensional Continuous Control Using Generalized Advantage Estimation (Schulman et al., 2015)
- OpenAI Spinning Up: PPO
- A Vision Researcher’s Guide to Some RL Stuff: PPO & GRPO - Yuge Shi
- RLHF Book Ch.6: Policy Gradients - Nathan Lambert
- The 37 Implementation Details of PPO
Comments