OpenAI 大模型强化学习(RLHF)三段式建模流程
RLHF(Reinforcement Learning from Human Feedback)的核心思想:不直接让 LLM 在环境中探索,而是先让人类标偏好 → 训出奖励模型 RM → 用 RM 当环境奖励,PPO 微调 LLM。整体分三步串行执行。
总体数据流
Base LLM (预训练模型)SFTSFT Model训 RMReward Model (冻结)PPO最终对齐模型 先澄清一个建模直觉:为什么大模型 RL 天然是"联合概率 + 单条路径采样"
在经典强化学习里,我们会把 P(s′∣s,a)(环境转移)和 π(a∣s)(策略)分开写;但在基于 LLM 的文本生成 RLHF中,状态(前缀 st=x+y<t)和动作(下一个 token at=yt)都是离散且维度巨大的,整个"环境 + 策略"其实就是 LLM 自己按链规则分解出的回答 y 给定 prompt x 的联合概率:
πθ(y∣x)=t=1∏∣y∣πθ(yt∣x,y<t) 因此,一条完整的生成路径(轨迹)对应一个"样本回答 y"。由于词表极大(几万 token)、回答长度 ∣y∣ 也长,这个联合分布无法枚举(组合爆炸),我们在训练时也不可能把所有可能的 y 都求期望——只能从 πθ(⋅∣x) 中采样出若干条路径(即蒙特卡洛),再用这些路径的奖励/优势去加权更新 θ。这就是 REINFORCE / PPO 策略梯度里写的:
∇θJ(θ)=Eτ∼Pθ(τ)[∇θlogPθ(τ)⋅R(τ)] 式中 τ 就是"一次采样出的单条路径",上面的期望在工程上直接用 batch 内的多条轨迹做平均(不需要把分布枚举完)。
第 1 步:SFT(Supervised Fine-Tuning,监督微调)
目的:让基座 LLM 学会"按照指令(prompt)去回答"的基本格式,把下一 token 语言建模扭到"助手回答"的分布上。
| 项 | 说明 |
|---|
| 数据 | 人工撰写的高质量 (prompt, response) 对(几千到几万条即可) |
| 训练目标 | 标准 next-token 交叉熵(和预训练一致) |
SFT 损失:
LSFT(θ)=−E(x,y)∼DSFTt=1∑∣y∣logπθ(yt∣x,y<t) 为什么要有 SFT:直接拿预训练模型做 PPO 会崩——预训练模型"回答姿势都不对",RL 的信号太稀疏、奖励模型也难以泛化。
第 2 步:训练 RM(Reward Model,奖励模型)
目的:把"人类偏好回答更好 / 更差"这种无法直接微分的信号,转化成一个可对任意回答打分的标量函数 rϕ(x,y),供 PPO 当每步(或整体)奖励。
| 项 | 说明 |
|---|
| 数据 | 人工排序数据集:对同一条 prompt,给出 y+≻y−(y+ 比 y− 好) |
| 模型结构 | 把 SFT 模型复制一份,在末尾 token 的 hidden state 上接一个线性头,输出标量 r |
| 损失 | Bradley-Terry / 成对排序交叉熵 |
RM 损失(排序偏好):对 prompt x 的一对候选回答 (yw,yl),其中 yw 是赢家、yl 是输家:
LRM(ϕ)=−E(x,yw,yl)logσ(rϕ(x,yw)−rϕ(x,yl)) RM 训练完成后冻结参数,在 PPO 阶段固定作为奖励函数。
第 3 步:PPO 微调(把 SFT 模型往 RM 分数高的方向推)
目的:以 RM 打分作为总奖励,用 PPO(on-policy,clip 版)在策略空间中找一条"既高分又不过度偏离 SFT 分布"的路径。
3.1 奖励设计(每生成完一个完整 response 后给分;或每步 token 级别可差分)
对一次交互(prompt x,模型生成回答 y):
Rtotal(x,y)=RM 奖励(回答整体的人类偏好)rϕ(x,y)−KL 惩罚(防止 PPO 把语言模型改歪)β⋅(logπθ(y∣x)−logπSFT(y∣x)) - β 超参:平衡"讨好 RM"和"保留 LLM 原本语言能力"
- KL 项是 OpenAI 的关键稳定技巧:没有它,模型会学到"高 RM 分但人话不通"的对抗样本
3.2 PPO Clip 目标(同概述.md 3.6,仅状态 s = 前缀上下文,动作 at = 下一个 token)
每个 token 的 PPO 裁剪目标:
LPPO(θ)=Et[min(rt(θ)A^t, clip(rt(θ),1−ϵ,1+ϵ)A^t)] 其中概率比:
rt(θ)=πθold(at∣st)πθ(at∣st) 实际工业训练会把上面的 PPO 目标和 SFT 的一小部分 NLL 损失加权相加(PPO+SFT objective),防止遗忘语言建模:
Ltotal(θ)=−LPPO(θ)+λ⋅LSFT(θ)
总结:OpenAI 方法为什么是这三步?
| 阶段 | 解决的问题 |
|---|
| SFT | 预训练模型"会说英语"但"不会听指令回答" |
| RM | 人类偏好不可微、不能直接做 loss,转成一个打分函数 |
| PPO + KL 惩罚 | 在 RM 梯度方向上安全地微调 LLM,KL 惩罚阻止其偏离原分布过远 |