02 PPO 算法数学推导
02 PPO 算法数学推导
PPO(Proximal Policy Optimization)是 RLHF 中最常用的强化学习算法。本文从 TRPO 讲起,逐步推导 PPO 的两种形式:PPO-Penalty 和 PPO-Clip。
1. 问题:Policy Gradient 的不稳定性
1.1 直接 Policy Gradient 的问题
基础的 Policy Gradient 更新:
问题:如果步长 太大,策略可能剧烈变化,导致:
- 性能骤降:新策略比旧策略差很多
- 难以恢复:一旦策略变差,可能进入"坏区域"就回不来了
- 训练不稳定:性能曲线剧烈震荡
1.2 直观理解
想象你在山上找最低点:
- 太小的步子:走得慢
- 太大的步子:可能直接跳到另一座山上
策略优化也一样,我们需要控制步长。
2. TRPO:Trust Region Policy Optimization
2.1 核心思想
TRPO 的核心思想:在信任域内更新策略
解释:
- 目标:最大化期望优势(用重要性采样)
- 约束:新策略不能离旧策略太远(KL 散度约束)
2.2 为什么用 KL 散度?
KL 散度约束等价于限制策略在"信任域"内:
这保证了:
- 重要性权重 接近 1
- 重要性采样的估计方差小
- 策略更新平滑
2.3 TRPO 的求解:拉格朗日乘子法
将约束优化转化为无约束优化:
其中 是拉格朗日乘子。
2.4 TRPO 的实际计算
使用共轭梯度法求解自然梯度方向:
- 计算策略梯度
- 用共轭梯度法估算 ( 是 KL 散度的 Hessian 矩阵)
- 求更新步长使得 KL 约束刚好满足
优点:理论保证单调不减
缺点:计算复杂,共轭梯度法耗时
3. PPO:简化 TRPO
3.1 PPO 的核心创新
PPO 的核心思想:用简单方法近似 TRPO 的约束效果
TRPO 的约束条件难以计算。PPO 提出两种简化方案:
- PPO-Penalty:把 KL 约束转化为惩罚项
- PPO-Clip:直接裁剪重要性权重
4. PPO-Penalty
4.1 目标函数
将 KL 散度约束转化为目标函数中的惩罚项:
其中 是惩罚系数。
4.2 自适应调整
PPO-Penalty 会自动调整 :
- 如果 KL 散度 > 目标值 :增大 (更严格惩罚)
- 如果 KL 散度 < 目标值 / 2:减小 (放松惩罚)
这保证 KL 散度始终在合理范围内。
4.3 问题
虽然比 TRPO 简单,但:
- 仍需计算 KL 散度
- 超参数 的调整增加了复杂性
5. PPO-Clip:最常用的形式
5.1 核心思想
直接裁剪重要性权重,防止它偏离 1 太远。
定义重要性权重:
5.2 PPO-Clip 目标函数
其中:
- :重要性权重
- :估计的优势函数
- :裁剪范围(通常 0.1 或 0.2)
- :把 限制在 范围内
5.3 逐步推导 PPO-Clip
Step 1:普通 Policy Gradient 目标
问题:如果 很大,更新可能太激进。
Step 2:为什么要裁剪?
考虑两种情况:
情况 A:(动作好于平均)
我们想增大 ,即增大 。
但如果不限制, 可能变得很大,导致策略剧烈变化。
情况 B:(动作差于平均)
我们想减小 ,即减小 。
同样, 可能变得很小,策略剧烈变化。
Step 3:Clip 的作用
对于 :
- 目标函数是 ,想增大
- 但 clip 后, 时,项变为 ,不再增大
- 这限制了策略更新的幅度
对于 :
- 目标函数是 ,想减小
- 但 clip 后, 时,项变为 ,不再减小
- 同样限制了策略更新的幅度
Step 4:为什么用 min?
取 min 保证:
- 保守估计:当更新过于激进时,目标函数不会"欺骗"优化器
- 稳定性:即使优化器想往极端方向走,目标函数也不给奖励
5.4 详细图解
情况 1:
L (目标函数)
│
│ /
│ /
│──────*────────── clip后变成常数 (不再上升)
│ /
│ /
│ /
└───────────────── r_t(θ)
1-ε 1 1+ε
- :目标 ,增大
- :目标 ,不再增大(被 clip 了)
情况 2:
L (目标函数)
│
│ /
│ /
│ /
│─*────────────── clip后变成常数 (不再下降)
│ │
│ \
│ \
└───────────────── r_t(θ)
1-ε 1 1+ε
- :目标 (负值),减小
- :目标 ,不再减小(被 clip 了)
5.5 PPO-Clip 的直觉
核心思想:信任域的软约束
- 控制"信任域"大小: 与 的差异限制在 倍
- 但不是硬约束,而是通过目标函数"软"实现
为什么叫"Proximal"?
"Proximal" 意为"近端的",强调新策略应靠近旧策略。
6. 完整 PPO 算法
6.1 算法伪代码
PPO-Clip 算法:
输入:初始策略参数 θ_0,价值函数参数 φ_0
超参数:裁剪参数 ε,学习率 α,GAE 参数 λ,折扣因子 γ
For iteration = 1, 2, ...:
1. 收集数据:
用当前策略 π_θ_actor 生成 N 条轨迹
2. 计算优势估计(GAE):
For each t:
δ_t = r_t + γ V_φ(s_{t+1}) - V_φ(s_t)
Â_t = Σ_{l=0}^{∞} (γλ)^l δ_{t+l}
3. 更新策略(多轮 epoch):
For epoch = 1, ..., K:
L^CLIP(θ) = 𝔼_t [min(r_t(θ)Â_t, clip(r_t(θ), 1-ε, 1+ε)Â_t)]
θ ← θ + α ∇_θ L^CLIP(θ)
4. 更新价值函数:
L^VF(φ) = 𝔼_t [(V_φ(s_t) - V_t^{target})²]
φ ← φ - α ∇_φ L^VF(φ)
6.2 目标函数完整形式
实践中,PPO 的目标函数通常包含三项:
其中:
- :PPO-Clip 目标(策略优化)
- :价值函数损失
- :熵奖励(鼓励探索)
- :系数
7. PPO vs TRPO 对比
| 特性 | TRPO | PPO-Clip | PPO-Penalty |
|---|---|---|---|
| KL 约束方式 | 硬约束 + 共轭梯度 | Clip 软约束 | 惩罚项 |
| 计算复杂度 | 高(共轭梯度) | 低 | 中 |
| 实现 | 复杂 | 简单 | 中等 |
| 理论保证 | 强(单调不减) | 弱 | 弱 |
| 工程实际 | 少用 | 最常用 | 较少 |
8. PPO 在 RLHF 中的应用预告
在 RLHF 中,PPO 需要特化处理:
- 奖励信号:不是环境奖励,而是 Reward Model 给出的奖励
- KL 惩罚:额外添加 KL 约束,防止模型偏离预训练分布
- 特殊目标函数:
其中 是参考模型(通常是 SFT 模型)。
这些细节将在 03_rlhf.md 中详细展开。
9. 总结
| 概念 | 公式 | 作用 |
|---|---|---|
| 重要性权重 | 重用旧样本 | |
| KL 约束 | 限制策略变化 | |
| TRPO 目标 | s.t. KL 约束 | 有理论保证 |
| PPO-Clip 目标 | 简化实现 | |
| 裁剪范围 | 控制更新步长 |
PPO 的核心贡献:用简单的 Clip 操作近似复杂的 KL 约束,实现高效稳定的策略优化。
10. 参考文献
- Schulman, J., et al. (2015). "Trust Region Policy Optimization." ICML.
- Schulman, J., et al. (2017). "Proximal Policy Optimization Algorithms." arXiv:1707.06347.
- Kakade, S., & Langford, J. (2002). "Approximately Optimal Approximate Reinforcement Learning." ICML.