LLMPPO强化学习RLHF策略优化

PPO 算法:从 TRPO 到 PPO,为什么 PPO 成为主流

一、算法概览

PPO 是一类 on-policy 策略梯度算法,核心目标是让策略更新步伐可控——每次更新不偏离旧策略太多,避免性能崩溃。TRPO 用 KL 散度硬约束求解信赖域(需计算二阶导、共轭梯度),实现复杂。PPO 的洞察:用 clip 函数把目标函数截断,一阶优化即可达到"信赖域"的效果。核心公式是 Clipped Surrogate Objective,在 r_t(θ) = π_θ(a|s) / π_θ_old(a|s) 比率超出区间 [1-ε, 1+ε] 时停止奖励。配合 GAE(广义优势估计) 平衡偏差与方差,PPO 实现了"稳定、简单、有效"的三角,成为工业界首选。


二、历史背景与问题起源

2.1 策略梯度的"步长难题"

Vanilla 策略梯度(REINFORCE)的更新方向正确,但步长极难选:步长太小收敛慢,步长太大策略直接崩坏(一步走错,数据分布全变,后面采的样本全是垃圾)。这个问题在深度神经网络参数化策略时尤其严重——高维空间没有天然的"合理步长"。

2.2 TRPO 的理论优雅与工程痛苦

2015 年 Schulman 提出 TRPO(Trust Region Policy Optimization):用 KL 散度约束新旧策略距离,保证每次更新在"信赖域"内,理论上是单调改进的。但实现上要算 Fisher 信息矩阵、用共轭梯度法解线性方程、做线搜索——计算复杂、调试困难、对大批量敏感。研究者戏称:"TRPO 理论完美,代码难写。"

2.3 PPO 的诞生:以简单换实用

PPO 的哲学:与其精确求解约束,不如直接 clip 目标函数。用一阶 SGD(Adam)就能优化,代码量只有 TRPO 的 1/3,效果却几乎相当。这种"够用就好"的工程取向让 PPO 迅速占领工业界。RLHF 兴起后,PPO 因稳定可控、易于大规模分布式训练,成为对齐训练的默认选择。


三、核心原理深入

3.1 策略梯度回顾与比率 r_t(θ)

策略梯度的目标是最大化期望回报:

J(θ) = E_t[ ∇_θ log π_θ(a_t|s_t) · A_t ]

其中 A_t 是优势函数(advantage),衡量动作 a_t 比平均好多少。PPO 引入新旧策略的概率比率

r_t(θ) = π_θ(a_t|s_t) / π_θ_old(a_t|s_t)

当 θ = θ_old 时 r_t = 1;偏离越多 r_t 越偏离 1

r_t · A_t 替代 log π · A_t,得到替代目标(surrogate objective):L = E[r_t(θ) · A_t]。这在 θ 临近 θ_old 时是策略梯度的良好近似。

3.2 Clipped Surrogate Objective:PPO 的核心

直接最大化 E[r_t · A_t] 会让策略更新过大。PPO 的关键操作:把 r_t 截断在 [1-ε, 1+ε] 内

L^CLIP(θ) = E_t[ min( r_t(θ)·A_t , clip(r_t(θ), 1-ε, 1+ε)·A_t ) ]

ε 通常取 0.1 ~ 0.3(默认 0.2)

通俗类比:开车。r_t 是油门,A_t 是路况。如果路况好(A>0)你想加油,但油门踩过头(r_t > 1+ε)就危险,clip 把油门封顶;如果路况差(A<0)你想刹车,但刹车太猛(r_t < 1-ε)也会翻车,clip 同样限制。min 操作保证取"更保守"的那一侧——即使目标函数想激进更新,clip 会拉住它。

分情况讨论 clip 的行为

情况 1:A_t > 0(好动作)
  - r_t > 1+ε 时,clip 把 r_t 钉在 1+ε,不再奖励"更激进地增大概率"
  - 目标上限 = (1+ε)·A_t

情况 2:A_t < 0(坏动作)
  - r_t < 1-ε 时,clip 把 r_t 钉在 1-ε,不再奖励"更激进地减小概率"
  - 目标下限 = (1-ε)·A_t(负数,但被封底)

情况 3:r_t ∈ [1-ε, 1+ε]
  - clip 不生效,目标 = r_t·A_t,正常梯度更新

3.3 GAE:平衡偏差与方差的优势估计

优势函数 A_t 的估计决定 PPO 效果。GAE(Generalized Advantage Estimation) 用参数 λ 在 bias 和 variance 间权衡:

δ_t = r_t + γ·V(s_{t+1}) - V(s_t)    # TD 误差

A_t^GAE(λ) = Σ_{l=0}^∞ (γ·λ)^l · δ_{t+l}

λ = 0:A_t = δ_t     (高偏差、低方差,等同 TD)
λ = 1:A_t = Σ γ^l · r_{t+l}  (无偏、高方差,等同蒙特卡洛)

实践中 λ ≈ 0.95 是黄金值,兼顾两者。

3.4 完整 PPO 损失

PPO 同时优化策略、价值函数和熵:

L_total = -L^CLIP + c1·L^VF + c2·S[π_θ]

L^VF = (V_θ(s_t) - G_t)²   # 价值函数 MSE
S = 熵奖励                  # 鼓励探索,防止过早收敛
c1 ≈ 0.5, c2 ≈ 0.01

负号是因为优化器做最小化。这三项分别负责"提升好动作"、"校准价值估计"、"保持探索"。

3.5 多 epoch 复用数据

on-policy 算法通常每个 batch 只用一次。PPO 的工程创新:同一批数据训练多个 epoch(典型 4-10),靠 clip 防止策略漂移。这是 PPO 比 vanilla policy gradient sample-efficient 的关键——数据复用率提升数倍而不崩溃。


四、训练/推理流程

PPO 训练流程

1. 初始化策略网络 π_θ 与价值网络 V_φ(共享或分离)
2. 用当前 π_θ_old 采集一批轨迹 {(s_t, a_t, r_t)}
3. 计算优势 A_t^GAE 与回报 G_t
4. 对 K 个 epoch:
   a. 计算 r_t(θ) = π_θ(a_t|s_t) / π_θ_old(a_t|s_t)
   b. 计算 L^CLIP(clip 后的替代目标)
   c. 计算 L^VF(价值函数 MSE)与熵奖励
   d. 梯度下降更新 θ、φ
5. θ_old ← θ,回到第 2 步

推理流程:训练完成后直接用 π_θ 采样动作。在 LLM 场景即模型生成文本,PPO 训练后的模型已内化奖励信号,推理时无需 RM。


五、与其他算法的关系

算法关系
TRPOPPO 的"前辈",用 KL 硬约束+二阶优化;PPO 用 clip 达到类似效果但更简单
REINFORCE最原始策略梯度,无 clip、无价值函数;PPO 是其"加强稳定版"
A2C/A3CActor-Critic 框架,PPO 在其上加 clip 与多 epoch 复用
DPO直接用偏好数据训练,跳过 RM 与 PPO;更简单但牺牲在线探索能力
GRPODeepSeek 的变体,用 group baseline 替代价值网络,省 critic 显存
SAC/TD3off-policy 连续控制 SOTA,PPO 是 on-policy 对应;RLHF 中 PPO 占优因易并行

六、关键论文

#论文贡献
1"Proximal Policy Optimization Algorithms" — Schulman et al., 2017 (arXiv:1707.06347)提出 PPO,clipped surrogate objective
2"Trust Region Policy Optimization" — Schulman et al., 2015 (arXiv:1502.05477)TRPO,PPO 的理论前身
3"High-Dimensional Continuous Control Using Generalized Advantage Estimation" — Schulman et al., 2016 (arXiv:1506.02438)GAE,PPO 的优势估计基础
4"Fine-Tuning Language Models from Human Preferences" — Ziegler et al., 2019 (arXiv:1909.08593)早期 PPO 用于 LM 对齐
5"Training Language Models to Follow Instructions with Human Feedback (InstructGPT)" — Ouyang et al., 2022 (arXiv:2203.02155)PPO 在 RLHF 中的标杆应用

七、实践思考

三个常见理解误区:

误区正解
❌ "PPO 是 off-policy,能复用旧数据"✅ PPO 是 on-policy,多 epoch 复用靠 clip 临时维持,本质仍需新策略采的样本
❌ "ε 越小越稳定,所以越小越好"✅ ε 太小学不动,太大易崩;0.1-0.3 是经验区间,过小会让有效梯度消失
❌ "PPO 训练慢是因为算法差"✅ 慢主要来自"采样-更新"串行与 critic 网络开销;GRPO 去掉 critic 就是为此优化