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(K1)

个两两比较样本(实践中不一定用全量,会采样子集)。


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_wywyly_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(ywylx)=σ(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)} σ(rwrl)=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[log⁡exp⁡(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=0Tr(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 阶段的训练环路中,通常有四个模型(或四种角色):

  1. Actor(可训练):当前策略 πϕ\pi_\phiπϕ,负责生成 response
  2. Critic(可训练):价值函数 VψV_\psiVψ,用于估计期望回报、降低方差
  3. Reward Model(冻结)rθ(x,y)r_\theta(x,y)rθ(x,y),输出人类偏好对应的奖励
  4. 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 ExD Eyπϕ(yx)[rθ(x,y)βlogπref(yx)πϕ(yx)]

其中 β\betaβ 是 KL 系数(控制“对齐强度 vs 保真度”)。

注意:
log⁡πϕ(y∣x)πref(y∣x)\log\frac{\pi_\phi(y|x)}{\pi_{ref}(y|x)}logπref(yx)πϕ(yx) 的期望就是 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(atst)πϕ(atst)),rθ(x,y)β(logπref(atst)πϕ(atst)),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(atst)πϕ(atst)

优势函数为 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[(RtVψ(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(ExDEyπϕ(yx)[rθ(x,y)βlogπref(yx)πϕ(yx)]+γ ExDptx[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_3y1y2y3

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:看别人对局录像学习,如果录像水平和你差太多,学习效果会变差
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐