PPO(Proximal Policy Optimization)是当前大模型对齐训练中最核心的强化学习算法之一。OpenAI 在 ChatGPT/InstructGPT 中用它做 RLHF 的策略优化,DeepMind 的 Gopher、Anthropic 的 Claude 也都采用了类似思路。
本文从策略梯度出发,逐步推导 PPO 的设计动机与数学形式,最后介绍它在 LLM 对齐训练中的具体应用。
一、前导知识:策略梯度 (Policy Gradient)#
1.1 强化学习的基本设定#
强化学习中,智能体(Agent)与环境交互:
- 在状态 st 下,根据策略 πθ(at∣st) 选择动作 at
- 环境返回奖励 rt 和下一状态 st+1
- 一条轨迹 τ=(s0,a0,r1,s1,a1,r2,…)
目标是最大化期望累积回报:
J(θ)=Eτ∼πθ[t=0∑Tγtrt]其中 γ∈[0,1] 是折扣因子,表示未来奖励的重要性随时间衰减。
TIPJ(θ) 就是按这个策略玩,平均能拿多少分。我们的目的就是调参数 θ 让这个分数尽可能高。
1.2 策略梯度定理#
对 J(θ) 求梯度:
∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅Gt]其中 Gt=∑k=0T−tγkrt+k 是从时刻 t 开始的折扣回报。
NOTE∇θlogπθ(at∣st) 告诉「如何调整参数让 at 的概率变大」,而 Gt 告诉我们「这个动作到底好不好」。两者相乘,好的动作概率增大,差的动作概率减小。
1.3 引入 Baseline:优势函数#
直接用 Gt 有高方差问题。我们引入一个 baseline b(st),用优势函数替代:
A^t=Q(st,at)−V(st)
- V(st)=E[Gt∣st]:在状态 st 下,按策略走的平均回报 ——「这个局面的平均水平」
- Q(st,at)=E[Gt∣st,at]:在状态 st 做动作 at 后的期望回报 ——「做了这个动作后的水平」
- A^t:比平均水平好多少
TIPV(st) 就像「平均分」,Q(st,at) 是「某个学生的分数」,A^t 就是「这个学生比平均分高多少」。我们用 A^t 代替 Gt,相当于只看「相对表现」而不是「绝对分数」,方差更小,训练更稳定。
策略梯度变为:
∇θJ(θ)=E[∇θlogπθ(at∣st)⋅A^t]
二、PPO:Proximal Policy Optimization#
2.1 问题:策略梯度为什么不稳定?#
策略梯度是一个 on-policy 算法:每次更新参数后,之前采样的数据就不再来自当前策略了。如果一步更新太大,新策略和老策略差异巨大,那么:
- 老数据完全不能用了(重要性采样失效)
- 策略可能直接崩掉,再也恢复不过来
2.2 重要性采样与替代目标#
为了解决数据复用问题,我们用重要性采样(Importance Sampling):
Ex∼p[f(x)]=Ex∼q[q(x)p(x)f(x)]定义概率比:
rt(θ)=πθold(at∣st)πθ(at∣st)
- θold:采样时用的「老策略」参数
- θ:正在优化的「新策略」参数
- 当 θ=θold 时,rt=1
TIPrt(θ)>1 说明新策略比老策略更喜欢这个动作,rt(θ)<1 说明新策略在「压制」这个动作。初始时 rt=1,表示一视同仁。
替代目标函数为:
LCPI(θ)=Et[rt(θ)⋅A^t]NOTECPI = Conservative Policy Iteration。这个目标让我们可以用老数据优化新策略。但问题是:rt(θ) 可以变得非常大或非常小,如果 A^t 也很大,策略更新会失控。
2.3 PPO-Clip:核心思想#
PPO 的思路简单粗暴:别让 rt(θ) 偏离 1 太远。用 clip 操作把 rt 限制在 [1−ϵ,1+ϵ] 范围内(通常 ϵ=0.1 或 0.2):
LCLIP(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]这个公式需要分两种情况理解:
情况一:A^t>0(这个动作比平均好)#
我们想增大 πθ(at∣st),即让 rt 变大。但 clip 限制 rt≤1+ϵ:
min(rtA^t,(1+ϵ)A^t)
- 如果 rt<1+ϵ:取 rtA^t,正常增大
- 如果 rt≥1+ϵ:取 (1+ϵ)A^t,不再继续增大
TIP直觉:这个动作确实不错,但别上头。即使它再好,概率也别涨太多,防止过拟合到这个动作上,失去探索能力。
情况二:A^t<0(这个动作比平均差)#
我们想减小 πθ(at∣st),即让 rt 变小。但 clip 限制 rt≥1−ϵ:
min(rtA^t,(1−ϵ)A^t)由于 A^t<0,(1−ϵ)A^t 是更负的值(更小),所以 min 取 (1−ϵ)A^t:
- 如果 rt>1−ϵ:取 (1−ϵ)A^t,限制惩罚力度
- 如果 rt≤1−ϵ:取 rtA^t,但 gradient 为 0(rt 已被 clip),不再继续惩罚
TIP直觉:这个动作确实不好,但别把它一巴掌拍死。即使它差,也别把概率压得太低——万一下次环境变了,这个动作可能又有用呢?
2.4 完整损失函数#
PPO 的完整目标包含三项:
Ltotal(θ)=LCLIP(θ)−c1⋅LVF(θ)+c2⋅S[πθ]
- LCLIP:策略损失(clipped surrogate objective)
- LVF=Et[(Vθ(st)−Vttarget)2]:Value 损失,训练 critic
- S[πθ]=−∑aπθ(a∣s)logπθ(a∣s):熵正则项,鼓励探索
TIPCritic 告诉你「这个局面值多少分」,Actor 用 Critic 的信息计算优势然后更新策略。熵正则项防止策略过于确定(比如某个动作概率 99%),保留随机性。
2.5 训练流程#
1. 用当前策略 π_θ 采样一批轨迹 {s_t, a_t, r_t, ...}
2. 用 GAE(Generalized Advantage Estimation)计算每个时间步的优势 Â_t
3. 在这批数据上做 K 个 epoch 的 SGD(通常 K=4~10)
NOTEGAE 简介:A^tGAE(λ)=∑l=0∞(γλ)lδt+l,其中 δt=rt+γV(st+1)−V(st) 是 TD 误差。λ 控制 bias-variance 权衡:λ=0 是 1-step TD(低方差有偏),λ=1 是 Monte Carlo(高方差无偏)。
三、PPO 在 RLHF 中的应用#
3.1 RLHF 三阶段#
在 ChatGPT / InstructGPT 中,PPO 用在第三阶段:
- SFT(Supervised Fine-Tuning):用高质量对话数据微调基座模型
- Reward Model:训练一个奖励模型 rϕ(x,y),给模型输出打分
- PPO 训练:用 reward model 作为奖励信号,优化 LLM 策略
3.2 LLM 中的 PPO 设定#
在 LLM 场景下,强化学习的要素映射为:
- 状态 st:输入的 prompt + 已生成的前 t−1 个 token
- 动作 at:生成第 t 个 token(从词表中选择)
- 策略 πθ:LLM 本身,输出下一个 token 的概率分布
- 奖励 rt:只在序列结束时给出(reward model 打分),中间步 rt=0
3.3 KL 惩罚项#
为了防止模型在 PPO 训练中「作弊」(比如生成乱码骗 reward model),PPO 的奖励中额外加入一个 KL 惩罚,约束模型不要偏离 SFT 模型太远:
R(x,y)=rϕ(x,y)−β⋅KL(πθ(y∣x)∥πSFT(y∣x))其中 β 是 KL 惩罚系数,控制偏离程度。
TIP直觉:reward model 是人训练的,可能有漏洞。模型可能学会说一些「reward model 喜欢但人类读不懂」的话。KL 惩罚相当于说:「你可以优化,但别跑太远,保持在 SFT 模型的附近」。这就像给模型画了一个安全区。
四、总结#
- Clip 操作限制策略更新幅度,简单有效
- 需要 Critic 网络,显存开销大(约 2× Actor)
- 用 GAE 计算优势,bias-variance 可通过 λ 调节
- 在 RLHF 中加 KL 惩罚防止偏离 SFT 模型
关于策略梯度定理的推导#
把期望写成积分
J(θ)=Eτ∼πθ[R(τ)]=∫pθ(τ)R(τ)dτ其中 R(τ)=∑t=0Tγtrt,pθ(τ) 是策略 πθ 下轨迹 τ 的概率。
梯度「穿过」积分,用 log-derivative trick
∇θJ(θ)=∫∇θpθ(τ)R(τ)dτ关键一步——log-derivative trick:
∇θlogpθ(τ)=pθ(τ)∇θpθ(τ)⇒∇θpθ(τ)=pθ(τ)⋅∇θlogpθ(τ)代入:
∇θJ(θ)=∫pθ(τ)∇θlogpθ(τ)R(τ)dτ=Eτ∼πθ[∇θlogpθ(τ)⋅R(τ)]TIP这个 trick 把「对概率密度求梯度」变成了「对 log 概率求梯度再乘概率」。好处是 ∇θlogpθ(τ) 可以拆开,而 ∇θpθ(τ) 不能。
第三步:拆开 logpθ(τ)
一条轨迹 τ=(s0,a0,r1,s1,a1,…) 的概率是:
pθ(τ)=初始状态p(s0)⋅t=0∏T策略(取决于θ)πθ(at∣st)⋅环境转移(不取决于θ)p(st+1∣st,at)取 log:
logpθ(τ)=logp(s0)+t=0∑T[logπθ(at∣st)+logp(st+1∣st,at)]对 θ 求梯度,环境相关的项 logp(s0) 和 logp(st+1∣st,at) 全部消失
∇θlogpθ(τ)=t=0∑T∇θlogπθ(at∣st)NOTE环境怎么转移不受 θ 控制,所以梯度只来自策略本身。这就像你只能改变自己的选择(πθ),不能改变天气(环境转移概率)。
代回,得到策略梯度定理
∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅R(τ)]最后一步优化:把 R(τ) 换成 Gt(从 t 时刻开始的折扣回报),因为 t 时刻的动作只影响 t 之后的奖励,之前的奖励与它无关(causality):
∇θJ(θ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)⋅Gt]