3.2 LLM 对齐中的 RLHF + PPO(以 InstructGPT 为例)
大语言模型(LLM)的目标,是让模型输出更符合人类偏好与意图:更有用、更安全、更少胡编、语气更合适。InstructGPT(论文)是最早系统化把用到 LLM post-training 的工作之一,它把“人类偏好”变成一个可优化的学习信号,并用来做稳定的策略优化。,并解释 Actor/Critic/Reward/Reference 四模型在训练环路中的角色、关键公式、以及为什么这些设计能跑得稳。
3.2 LLM 对齐中的 RLHF + PPO(以 InstructGPT 为例)
大语言模型(LLM)的 对齐(Alignment) 目标,是让模型输出更符合人类偏好与意图:更有用、更安全、更少胡编、语气更合适。InstructGPT(论文 Training language models to follow instructions with human feedback)是最早系统化把 RLHF(Reinforcement Learning from Human Feedback) 用到 LLM post-training 的工作之一,它把“人类偏好”变成一个可优化的学习信号,并用 PPO 来做稳定的策略优化。
本文按 InstructGPT 的经典四阶段结构讲清楚:SFT → 偏好标注 → 训练 Reward Model → PPO 训练(带 KL 约束 + PPO-ptx),并解释 Actor/Critic/Reward/Reference 四模型在训练环路中的角色、关键公式、以及为什么这些设计能跑得稳。
1. InstructGPT 的 RLHF 全流程
1.1 Step 0:从 GPT-3 出发,先做 SFT(Supervised Fine-Tuning)
第一步不是直接上 RL,而是先用高质量指令数据做监督微调,得到一个 SFT policy(也常称为 reference policy / behavior policy 的起点)。
- 输入:prompt(指令/问题)
- 输出:人工写的高质量 response
- 目标:最大化监督似然(teacher forcing)
直观上:SFT 让模型“先学会基本的指令跟随能力”,否则直接 RL 会非常不稳定,且 reward 也难以学习。
1.2 Step 1:收集偏好数据(Preference Data)
对同一个 prompt xxx,采样/生成多个候选回答 y1,y2,…,yKy_1, y_2, \dots, y_Ky1,y2,…,yK,由人工对这些回答进行 排序 或至少给出“更好/更差”的选择。
InstructGPT 的一个关键点:
如果对一个 prompt 有 KKK 个候选回答并给出全序(rank),可以转换成成对偏好(pairwise preferences)用于 reward model 训练。理论上可构造
CK2=K(K−1)2 C_K^2 = \frac{K(K-1)}{2} CK2=2K(K−1)
个两两比较样本(实践中不一定用全量,会采样子集)。
1.3 Step 2:训练 Reward Model(RM)
Reward Model 的作用:学习一个函数 rθ(x,y)r_\theta(x, y)rθ(x,y),对 同一个 prompt 下的不同 response 给出一个标量分数,让“更符合人类偏好”的回答得分更高。
常见实现:在一个预训练/微调好的 Transformer backbone 上加一个 value head(线性层)输出标量:
- backbone 输出最后一层 hidden state
- 取某个聚合位置(InstructGPT 常取最后 token 位置,或 EOS 位置)
- 接线性层 [d,1][d, 1][d,1] 得到标量 reward
2. Reward Model 的偏好建模目标(核心公式)
2.1 成对偏好数据的形式
对每条偏好样本:
- prompt:xxx
- 更好的回答(chosen / winner):ywy_wyw
- 更差的回答(rejected / loser):yly_lyl
目标:让 rθ(x,yw)>rθ(x,yl)r_\theta(x, y_w) > r_\theta(x, y_l)rθ(x,yw)>rθ(x,yl)。
2.2 InstructGPT 的 RM loss(Bradley–Terry / Logistic)
使用 sigmoid 把分数差转成“更好概率”:
σ(z)=11+exp(−z) \sigma(z) = \frac{1}{1 + \exp(-z)} σ(z)=1+exp(−z)1
“ywy_wyw 比 yly_lyl 更好”的概率建模为:
P(yw≻yl∣x)=σ(rθ(x,yw)−rθ(x,yl)) P(y_w \succ y_l \mid x) = \sigma\left(r_\theta(x, y_w) - r_\theta(x, y_l)\right) P(yw≻yl∣x)=σ(rθ(x,yw)−rθ(x,yl))
最大化该概率等价于最小化负对数似然:
LRM=−E(x,yw,yl)∼D[logσ(rθ(x,yw)−rθ(x,yl))] \mathcal{L}_{RM} = - \mathbb{E}_{(x, y_w, y_l)\sim D} \left[\log \sigma\left(r_\theta(x, y_w)-r_\theta(x, y_l)\right)\right] LRM=−E(x,yw,yl)∼D[logσ(rθ(x,yw)−rθ(x,yl))]
把 sigmoid 展开,可以得到一个更直观的 softmax 形式(两项归一化):
σ(rw−rl)=exp(rw)exp(rw)+exp(rl) \sigma\left(r_w-r_l\right) = \frac{\exp(r_w)}{\exp(r_w)+\exp(r_l)} σ(rw−rl)=exp(rw)+exp(rl)exp(rw)
其中 rw=rθ(x,yw)r_w=r_\theta(x,y_w)rw=rθ(x,yw),rl=rθ(x,yl)r_l=r_\theta(x,y_l)rl=rθ(x,yl)。因此
LRM=−E[logexp(rθ(x,yw))exp(rθ(x,yw))+exp(rθ(x,yl))] \mathcal{L}_{RM} = - \mathbb{E}\left[\log \frac{\exp(r_\theta(x,y_w))}{\exp(r_\theta(x,y_w))+\exp(r_\theta(x,y_l))}\right] LRM=−E[logexp(rθ(x,yw))+exp(rθ(x,yl))exp(rθ(x,yw))]
直觉:这就是在同一个 prompt 约束下,让 winner 的 reward 在归一化概率里占更大权重。
3. “句子级奖励” vs “轨迹级奖励”:两种 RLHF 视角
在经典 RLHF(强化学习环境)里,偏好通常对应两段轨迹 τ+\tau^+τ+、τ−\tau^-τ−,reward 可能是逐步加和:
R(τ)=∑t=0Tr(st,at) R(\tau) = \sum_{t=0}^{T} r(s_t, a_t) R(τ)=t=0∑Tr(st,at)
而在 LLM 的 RM 训练中,偏好标签往往是 整段回答级别 的,因此模型把 reward 简化为一个标量 r(x,y)r(x, y)r(x,y),不显式监督中间每个 token 的 reward。
这可以用两种等价的 MDP 解释帮助理解:
3.1 视角 A:把生成看作“单步 MDP”
- 状态:s0=xs_0 = xs0=x(prompt)
- 动作:a0=ya_0 = ya0=y(整段 response,token 序列)
- 奖励:r(s0,a0)=r(x,y)r(s_0, a_0)=r(x,y)r(s0,a0)=r(x,y)
这时 reward 是“对整个动作序列的评分”,相当于把原本多步过程折叠成一步。
3.2 视角 B:把生成看作“多步 MDP”,但 reward 用 Transformer 聚合
- 状态:st=[x,y<t]s_t = [x, y_{<t}]st=[x,y<t]
- 动作:at=yta_t = y_tat=yt
- 终止:t=Tt=Tt=T 到 EOS
虽然过程是多步的,但 RM 输出的 r(x,y)r(x,y)r(x,y) 可以理解为某种聚合器对整段信息的函数:
r(x,y)=AGG({ht}t=0T) r(x,y) = \text{AGG}\left(\{h_t\}_{t=0}^{T}\right) r(x,y)=AGG({ht}t=0T)
其中 {ht}\{h_t\}{ht} 是 backbone 在各 token 的中间表征。InstructGPT 的实现通常等价于取最后位置的表征再过线性头,属于一种特定的 AGG。
4. Step 3:用 PPO 做对齐优化(Actor + Critic + Reward + Reference)
PPO 阶段的训练环路中,通常有四个模型(或四种角色):
- Actor(可训练):当前策略 πϕ\pi_\phiπϕ,负责生成 response
- Critic(可训练):价值函数 VψV_\psiVψ,用于估计期望回报、降低方差
- Reward Model(冻结):rθ(x,y)r_\theta(x,y)rθ(x,y),输出人类偏好对应的奖励
- Reference / SFT(冻结):πref\pi_{ref}πref,提供 KL 约束,防止训练跑偏
5. 为什么 PPO 目标要加 KL 约束(关键动机)
如果只最大化 RM:
maxϕ E(x,y)∼Dπϕ[rθ(x,y)] \max_\phi \ \mathbb{E}_{(x,y)\sim D_{\pi_\phi}} \left[r_\theta(x,y)\right] ϕmax E(x,y)∼Dπϕ[rθ(x,y)]
会出现典型问题:
策略可能学会“钻 RM 的空子”,产生 reward 高但人类不喜欢/不真实/胡编的回答,即 reward hacking;同时策略可能远离 SFT 分布,导致语言质量下降或行为异常。
因此 InstructGPT 把目标改为:最大化 reward,同时惩罚相对 reference 的 KL 偏移。常见写法是:
maxϕ Ex∼D Ey∼πϕ(y∣x)[rθ(x,y)−βlogπϕ(y∣x)πref(y∣x)] \max_\phi \ \mathbb{E}_{x\sim D} \ \mathbb{E}_{y\sim \pi_\phi(y|x)} \left[ r_\theta(x,y) - \beta \log\frac{\pi_\phi(y|x)}{\pi_{ref}(y|x)} \right] ϕmax Ex∼D Ey∼πϕ(y∣x)[rθ(x,y)−βlogπref(y∣x)πϕ(y∣x)]
其中 β\betaβ 是 KL 系数(控制“对齐强度 vs 保真度”)。
注意:
logπϕ(y∣x)πref(y∣x)\log\frac{\pi_\phi(y|x)}{\pi_{ref}(y|x)}logπref(y∣x)πϕ(y∣x) 的期望就是 KL 的一种形式(在采样分布下的估计),因此它本质上是 行为约束项,让 RL policy 不要偏离 SFT/reference 太远。
6. Token-level 奖励如何构造(把句子级 reward 分配到序列)
RM 输出的是句子级标量 rθ(x,y)r_\theta(x,y)rθ(x,y),但 PPO 的更新通常是 token-level 形式(每个 time step 都需要 advantage)。一个常见做法是:
- 对每个 token 给一个 KL 惩罚(逐 token)
- 在最后一个 token(EOS)处加上 句子级 reward
因此 token-level reward 可以写为:
rt={−β(logπϕ(at∣st)πref(at∣st)),t≠Trθ(x,y)−β(logπϕ(at∣st)πref(at∣st)),t=T r_t = \begin{cases} -\beta\left(\log\frac{\pi_\phi(a_t|s_t)}{\pi_{ref}(a_t|s_t)}\right), & t\neq T \\ r_\theta(x,y) - \beta\left(\log\frac{\pi_\phi(a_t|s_t)}{\pi_{ref}(a_t|s_t)}\right), & t=T \end{cases} rt=⎩ ⎨ ⎧−β(logπref(at∣st)πϕ(at∣st)),rθ(x,y)−β(logπref(at∣st)πϕ(at∣st)),t=Tt=T
其中:
- st=[x,y<t]s_t=[x,y_{<t}]st=[x,y<t]
- at=yta_t=y_tat=yt
- TTT 表示终止时刻(通常是 EOS 位置)
直观解释:
整段回答只在结束时拿到“终局评分”,但每一步都为偏离 reference 付出代价,从而抑制发散。
7. PPO 的 Actor 更新:Clipped Surrogate Objective
PPO 的核心思想是:限制每次更新的策略变化幅度,避免策略突然崩坏。对 token 级动作 ata_tat,定义重要性采样比率:
ρt(ϕ)=πϕ(at∣st)πϕold(at∣st) \rho_t(\phi)=\frac{\pi_\phi(a_t|s_t)}{\pi_{\phi_{old}}(a_t|s_t)} ρt(ϕ)=πϕold(at∣st)πϕ(at∣st)
优势函数为 AtA_tAt(后文解释怎么来)。PPO 的 clipped actor loss(写成要最小化的 loss 形式):
Lactor=−Et[min(ρt(ϕ)At,clip(ρt(ϕ),1−ϵ,1+ϵ) At)] \mathcal{L}_{actor} \mathrm{}= -\mathbb{E}_t \left[ \min\left( \rho_t(\phi)A_t, \text{clip}(\rho_t(\phi), 1-\epsilon, 1+\epsilon)\,A_t \right) \right] Lactor=−Et[min(ρt(ϕ)At,clip(ρt(ϕ),1−ϵ,1+ϵ)At)]
其中 ϵ∈(0,1)\epsilon \in (0,1)ϵ∈(0,1) 控制“信赖域”的大小。
直觉解释(非常重要):
- 如果 ρt\rho_tρt 变化不大(在 [1−ϵ,1+ϵ][1-\epsilon,1+\epsilon][1−ϵ,1+ϵ] 内),就按常规策略梯度推动概率上升/下降。
- 如果 ρt\rho_tρt 变化过大,clip 把它截断,避免一次更新把某些 token 概率推得过头。
8. Critic 的作用与训练目标(Value Fitting)
8.1 为什么需要 Critic
LLM 生成是高方差的序列决策过程。直接用 reward 做 REINFORCE 会非常不稳定。Critic 学习 Vψ(st)V_\psi(s_t)Vψ(st) 来估计“从当前状态出发的期望回报”,用于构造优势函数,显著降低方差。
8.2 Value loss
实践中先计算 returns(或 GAE 得到的回报目标)RtR_tRt,然后让 critic 拟合:
Lcritic=Et[(Rt−Vψ(st))2] \mathcal{L}_{critic} \mathrm{}= \mathbb{E}_t\left[(R_t - V_\psi(s_t))^2\right] Lcritic=Et[(Rt−Vψ(st))2]
如果用 TD 形式写,也常见:
δt=rt+γVψ(st+1)−Vψ(st) \delta_t = r_t + \gamma V_\psi(s_{t+1}) - V_\psi(s_t) δt=rt+γVψ(st+1)−Vψ(st)
再用 δt\delta_tδt 构造 GAE。对于语言模型,st+1s_{t+1}st+1 就是多了一个 token 的前缀状态。
9. GAE:如何从 token-level reward 得到 Advantage
优势函数最常用的构造是 Generalized Advantage Estimation (GAE)。先定义 TD residual:
δt=rt+γV(st+1)−V(st) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)−V(st)
GAE 定义为:
AtGAE(γ,λ)=∑l=0∞(γλ)lδt+l A_t^{GAE(\gamma,\lambda)}=\sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l} AtGAE(γ,λ)=l=0∑∞(γλ)lδt+l
其中:
- γ\gammaγ:折扣因子
- λ\lambdaλ:bias-variance trade-off(λ\lambdaλ 越大越接近 Monte Carlo,方差更大;越小越接近 TD,偏差更大)
然后 returns 可写为:
Rt=At+V(st) R_t = A_t + V(s_t) Rt=At+V(st)
这就是为什么实现里常见 “value = values,critic 去拟合 returns”。
10. PPO-ptx:为什么加预训练数据的辅助项
InstructGPT 观察到:只用 RLHF 目标优化会导致模型在一些公开 NLP 基准(或通用语言能力)上性能回退。为缓解这个问题,引入 PPO-pretraining-mix(PPO-ptx):
在 RL 更新的同时,混入一部分预训练分布的数据,加入一个最大似然项(或等价的语言建模项)。整体目标可写成:
maxϕ(Ex∼DEy∼πϕ(y∣x)[rθ(x,y)−βlogπϕ(y∣x)πref(y∣x)]+γ Ex∼Dptx[logπϕ(x)]) \max_\phi \left( \mathbb{E}_{x\sim D}\mathbb{E}_{y\sim \pi_\phi(y|x)} \left[ r_\theta(x,y) - \beta \log\frac{\pi_\phi(y|x)}{\pi_{ref}(y|x)} \right] + \gamma \ \mathbb{E}_{x\sim D_{ptx}}\left[\log \pi_\phi(x)\right] \right) ϕmax(Ex∼DEy∼πϕ(y∣x)[rθ(x,y)−βlogπref(y∣x)πϕ(y∣x)]+γ Ex∼Dptx[logπϕ(x)])
其中:
- DptxD_{ptx}Dptx 是预训练语料(或通用文本分布)
- γ\gammaγ 控制混入强度
直觉:
RLHF 强化“人更喜欢的输出形态”,ptx 让模型不要遗忘“广泛语言建模能力”。
11. 一个具体案例:同一 prompt 下 RM 学到什么、PPO 改变什么
假设 prompt 为:
- xxx:“解释一下为什么 PPO 需要 KL 约束,用通俗例子。”
Actor 生成三条候选:
- y1y_1y1:内容准确、结构清晰,但有点啰嗦
- y2y_2y2:很短、但解释不完整
- y3y_3y3:看似自信、但胡编了一个“KL 是因为信息论定理强制要求”的理由
人工偏好排序可能是:y1≻y2≻y3y_1 \succ y_2 \succ y_3y1≻y2≻y3。
11.1 RM 训练阶段发生什么
训练让:
r(x,y1)>r(x,y2)>r(x,y3) r(x,y_1) > r(x,y_2) > r(x,y_3) r(x,y1)>r(x,y2)>r(x,y3)
并通过成对损失不断扩大这些差距(在 logistic 概率意义下)。
11.2 PPO 阶段发生什么
PPO 采样新的回答 y∼πϕ(⋅∣x)y\sim \pi_\phi(\cdot|x)y∼πϕ(⋅∣x),用 RM 给分 r(x,y)r(x,y)r(x,y),并用 KL 惩罚限制偏离 reference。
- 如果策略开始学会“迎合 RM”的某些表面特征(例如固定套话),KL 项会抑制它过快偏离 SFT 的语言分布。
- 如果策略生成更符合偏好的解释(更清楚、更少胡编),RM 会给更高分,优势函数为正,PPO 会增加这些 token 的概率。
因此 PPO 的实际学习信号是“终局偏好 + 过程约束”共同塑形出来的。
12. Online vs Offline RLHF:在 LLM 对齐里分别意味着什么
12.1 Online(典型 PPO-RLHF)
- 当前 Actor 真实生成 response
- 用 RM 打分(并加 KL shaping)
- 用 PPO 更新 Actor
特点:数据分布随策略变化而变化,能持续自适应,但训练开销大(要 generate)。
12.2 Offline(偏好数据直接学,不生成)
离线做法通常不跑生成环,而是在固定数据集上直接学习一个目标(例如 DPO/IPO 或其他偏好对齐目标)。优点是训练快(基本只 forward),但非常依赖数据分布是否覆盖“当前模型可能生成的区域”。
一个直观类比:
- Online:自己不断实战、根据反馈纠错
- Offline:看别人对局录像学习,如果录像水平和你差太多,学习效果会变差
更多推荐


所有评论(0)