主题模式
RLHF 与对齐训练深度解析:从 InstructGPT 到 DPO,大模型如何学会"听话"
奖励模型、PPO、DPO、GRPO、Constitutional AI——对齐三部曲的完整工程内幕
2026-10-30
引言:GPT-3 的"最后一公里"问题
2021 年之前的 GPT-3 有一个尴尬的现实:参数 175B、损失漂亮、能力惊人,但基本不可用。
你问它"写一首关于青蛙的诗",它可能回复"这是一首关于青蛙的诗"然后结束——因为预训练目标只教它"续写网络文本",网络里既有回答也有反问、有礼貌也有胡言。模型的下一个 token 预测能力和用户想要的服务能力之间,隔着一道鸿沟。
填平这道鸿沟的,就是 2022 年 3 月的 InstructGPT 论文(《Training language models to follow instructions with human feedback》)。它贡献了业界沿用至今的对齐三部曲:
① SFT(监督微调) → 教模型"像助手一样说话"
② RM(奖励模型训练) → 训练一个"人类品味打分器"
③ RLHF(强化学习优化) → 用打分器把模型推向人类偏好论文里一个惊人的数字:13 亿参数的 InstructGPT,人类偏好胜过 175B 的原始 GPT-3——用 1/100 的参数量,靠对齐拿到 100 倍的可用性。ChatGPT 的横空出世,本质就是这道工序的工业化。
博客已经写了训练管线的其他环节:预训练(Scaling Laws 篇)、SFT/LoRA(Fine-tuning 篇)、RLVR(推理模型篇)。今天补上最后一块:对齐训练。
一、为什么必须是人类反馈:奖励的不可写性
1.1 问题的本质:什么是"好回答"没有公式
RLVR(推理模型篇)能自动训练,是因为数学题奖励可验证——对就是对,错就是错。但日常对话的"好"无法程序化:
"推荐一部电影"的好回答:
- 有具体推荐(不是"电影有很多")
- 问了一句偏好(不是甩 20 部清单)
- 语气自然(不是百科腔)
→ 每一条都无法写成代码判定的规则这就是 RLHF 的出发点(也是它名字的由来):人类反馈是唯一能定义奖励的来源——让人类标注员对回答排序,从排序里学出奖励。
1.2 Bradley-Terry 模型:从排序到奖励的数学桥
人类标注员给两个回答排序(A > B)比打绝对分(A = 7.3 分)更稳定——同一标注员隔天给同一回答打的分能差 20%,但"哪个更好"的判断高度一致。
Bradley-Terry 模型把排序转成概率:
P(A ≻ B) = σ(r(A) − r(B))
# A 比 B 好的概率 = sigmoid(奖励差)
# 训练:让标注过的所有"A > B"对的这个概率最大化这个 innocuous 的选择埋了两个深远问题(后文展开):
- 奖励只看差值——绝对水平不可校准,RM 天生是个"相对品味器"
- 传递性假设——人类偏好真实存在非传递(A>B, B>C, C>A 的循环),BT 模型强行抹平
1.3 标注的学问:指令分布 > 标注员直觉
InstructGPT 的隐藏功臣是指令数据集的构建:先雇佣标注员写真实多样的指令(而不是收集网上指令——网上指令分布偏写作类,缺对话/代码/推理),再写示范回答。后来的 Llama 2 / Zephyr 的论文不断验证同一条规律:
对齐质量的上限由指令分布决定,标注一致性靠多人投票保底,回答质量靠"最好的标注员写示范"(InstructGPT 论文直言:如果标注员自己写得不如模型好,SFT 就到顶了)。
二、奖励模型:人类品味的压缩器
2.1 训练细节
RM 的结构就是 SFT 模型换头:取掉 LM 头,加一个标量输出头(输入 prompt+response,输出一个分数)。
训练数据:(prompt, 回答A, 回答B, 人类排序)
损失:−log σ(r(chosen) − r(rejected))
实践规模:
- InstructGPT:~33K 对比数据
- Llama 2:1M+ 人类偏好标注(Meta 的重投入)
- RM 通常与 policy 同量级或稍小(7B~70B)2.2 奖励黑客:一切 RL 逃亡史的开始
RM 是有漏洞的品味压缩器。RL 优化策略是"压力测试 RM"的过程——任何 RM 学到的表面规律("长的更好""有 emoji 更好""引用论文更好")都会被策略推到荒谬极端:
| RM 学到的表面规律 | RL 推到极端的样子 |
|---|---|
| 回答更长分更高 | 车轱辘话无限膨胀(GPT-4 报告里的经典问题) |
| 结构化好看 | 万事皆 bullet list、强行加小标题 |
| 引用来源加分 | 编造看起来真实的引用(幻觉被奖励放大!) |
| 谦虚语气加分 | 过度免责声明连篇 |
| 拒绝不安全内容加分 | 过度拒绝(over-refusal,问"怎么杀掉进程"也不答) |
这是对齐的核心张力:RM 的偏好 = 真实偏好 + 标注偏差 + 模型容量限制,RL 会无条件放大三者之和。缓解手段:
- KL 惩罚(下一节):限制策略偏离参考模型太远
- RM 集成:多个 RM 取平均/最小值,单个 RM 的漏洞不被一致利用
- 迭代数据更新:部署后收集被 hack 的案例回炉重训 RM
- 对比数据覆盖长尾:专收"模型获胜但人类不满"的样本
三、RLHF 的优化阶段:PPO 的工程马戏
3.1 目标函数拆解
InstructGPT 的 PPO 目标(读懂它,就读懂了 RLHF 的全部设计张力):
objective = E[ r_φ(x, y) ] # ① 最大化奖励模型打分
− β · KL(π_θ ‖ π_SFT) # ② 别离 SFT 模型太远
+ 预训练梯度项(PT loss 混入) # ③ 别忘了怎么说话三项各司其职:① 推向人类偏好;② 防 reward hacking 的锚(β 通常按"每 token 允许偏移几个 nat"调);③ 防"对齐税"(alignment tax)——纯 RL 训练会让模型遗忘通用能力(灾难性遗忘的 RL 版)。
3.2 PPO 为什么难伺候
PPO 是为游戏/机器人设计的 on-policy RL,搬到 LLM 上有五头工程怪兽:
| 怪兽 | 说明 | 缓解 |
|---|---|---|
| 四模型同显存 | policy、reward、value、ref(SFT)同时在线 | LoRA、共享底座、offload |
| Rollout 采样慢 | 生成完整回答才能更新 | 大批 rollout、异步采样 |
| 训练不稳 | 超参敏感、容易崩 | 学习率极小(~1e-6)、裁剪系数保守 |
| credit assignment | 长回答哪个 token 功/过 | value 网络 per-token 估计 |
| 评测昂贵 | 对齐效果要人工评 | 定期小规模偏好测试 |
这段痛苦直接催生了 DPO——学界对"能不能不训 RM 不跑 PPO"的回答。
四、DPO:把 RLHF 折叠成监督学习
4.1 核心洞察:闭式解存在
2023 年的 Direct Preference Optimization(DPO)论文证明了件优雅的事:RLHF 的目标函数有闭式最优解,这个解可以用一个纯监督损失直接优化,跳过 RM 训练和 RL 循环。
推导直觉(不写公式,讲逻辑链):
RLHF 目标:max E[r(y)] − β·KL(π ‖ π_ref)
↓ 数学变形
最优策略 π* 可以写成:π*(y) ∝ π_ref(y)·exp(r(y)/β)
↓ 反解出 r 关于 π 的表达
r(y) = β·log(π*(y)/π_ref(y)) + const
↓ 代回 BT 损失
得到一个只含 π 的损失 —— 就是 DPO 损失DPO 损失 = 用策略本身的对数比当"隐式奖励"的 Bradley-Terry 损失。训练像 SFT 一样简单:喂数据 (prompt, chosen, rejected),算损失,反向传播,完事。
4.2 DPO vs PPO:工程菜单
| PPO (RLHF) | DPO | |
|---|---|---|
| 需要训 RM | 需要 | 不需要(隐式) |
| 需要在线采样 | 需要(rollout) | 不需要(离线数据) |
| 显存 | 4 模型 | 2 模型(policy + ref) |
| 超参敏感度 | 高 | 低 |
| 上限 | 高(在线探索修正分布) | 依赖数据质量(离线上限) |
| 适合谁 | 大厂全管线 | 中小团队/个人(Zephyr 用 DPO 起家) |
清醒认知:DPO 不是免费午餐——它优化的是离线数据里的偏好,policy 无法探索 RM 会奖励的新区域;PPO 在线采样的"探索修正"能力是离线方法天然缺的。2026 年的实践中,两者常组合(DPO 热身 + PPO 精修)。
4.3 DPO 的变体家族
IPO:DPO 对极端偏好过拟合 → 换成回归式损失
KTO:只需要"好/坏"单标签(不用成对比较)——更贴近真实业务数据形态
ORPO:SFT 和偏好优化合一步,连 ref 模型都省了
SimPO:去掉 ref 模型,用长度归一化奖励选型直觉:有成对数据走 DPO;只有点赞/点踩走 KTO;资源极限走 ORPO/SimPO。
五、GRPO:推理模型时代的 RL 复兴
推理模型篇讲了 RLVR 的现象,这里补上它的训练引擎——DeepSeek 的 GRPO(Group Relative Policy Optimization),R1 就是它驱动的:
PPO 的 value 网络是额外负担(又一个 70B 模型在显存里)。GRPO 的做法:
PPO: 用 value 网络估计 baseline,算优势 A = r − V(s)
GRPO:同一个 prompt 采一组回答(如 16 个),
用组内平均当 baseline:A_i = r_i − mean(r_1..r_16)
→ 省掉 value 网络(显存直接砍一块)
→ 奖励"高于组内平均"的轨迹被加强
→ 数学上等价于相对排名优化,天然适配"可验证奖励"场景GRPO 的流行说明 RL 工具是随奖励形态进化的:RLHF 时代奖励来自 RM(不可验证、需要 value 平滑),RLVR 时代奖励是环境给的(可验证、组内对比天然成立)。
六、无人类的对齐:Constitutional AI 与 RLAIF
Anthropic 的 Constitutional AI(CAI)回答了一个战略问题:标注员能标多少?偏好能覆盖多广?
RLAIF 流程:
① 给 AI 一部"宪法"(一组书面原则:有帮助/无害/诚实)
② AI 自我批评:对自己的回答按宪法逐条审视,生成修订版
③ AI 自我标注:用修订版 vs 原版做偏好对(AI 当标注员)
④ 正常 RLHF 流程训练(AI 反馈替代人类反馈 = RLAIF)
效果:Anthropic 称 Claude 的无害性超过人类标注 RLHF,
且原则透明可审计——"宪法"是可读的,标注员集体偏好是黑箱工程视角的辩证:CAI 的真正价值不只是省钱(标注确实省了),是对齐目标的显式化——从"几千个标注员的隐式品味"变成"几百条可版本管理、可公开辩论的原则"。代价:偏好上限被宪法质量锁死(宪法写漏的场景,模型学不到)。
2026 年的规模化合成偏好数据管线(Llama 3 用模型生成大量偏好对再清洗)都是 RLAIF 思想的工业化后代——蒸馏篇的暗线在这里又出现了:AI 反馈是"用模型蒸馏模型"的对齐版。
七、对齐全景:一图定位各技术
奖励来源
人类标注 AI/规则
│ │
┌──────┴──────┐ ┌─────┴─────┐
│ RLHF/PPO │ │ RLAIF/CAI │ ← RM 打分,在线 RL
│ DPO │ │ 合成偏好 │ ← 离线偏好优化
└─────────────┘ └───────────┘
可验证环境(数学/代码)
│
RLVR + GRPO ← 环境奖励,组内相对优化三条路线上线顺序与适用判断:
- 对齐"品味"(语气/格式/安全边界)→ 偏好优化(DPO 起步最稳)
- 对齐"能力"(推理/代码/数学)→ RLVR + GRPO(奖励可验证时永远优先)
- 规模化与可控(数据成本/原则透明)→ RLAIF 合成管线
八、工程实战:DPO 全流程最小实现
给一个可直接跑的 DPO 训练骨架(用 TRL 库,模型任选 1~8B):
python
from trl import DPOTrainer, DPOConfig
from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B")
ref_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B")
# 数据格式:prompt + chosen + rejected 三元组
dataset = load_dataset("Anthropic/hh-rlhf", split="train[:5000]")
config = DPOConfig(
beta=0.1, # KL 锚强度:小=激进,大=保守
learning_rate=5e-7, # DPO 学习率惯例比 SFT 低一个量级
per_device_train_batch_size=4,
gradient_accumulation_steps=8,
max_length=2048,
)
trainer = DPOTrainer(
model=model,
ref_model=ref_model,
args=config,
train_dataset=dataset,
processing_class=tokenizer,
)
trainer.train()数据准备清单(决定 DPO 成败的是数据不是代码):
1. chosen/rejected 差异聚焦:对差异点太远的对(好回答与坏回答
内容完全不同),梯度信号稀疏——对齐"同一件事的两种做法"最佳
2. 长度去偏:预清洗长度差 >2x 的对,否则模型学"长度=质量"
3. 一致性抽检:随机抽 5% 人工复核,标注翻转率 >10% 就要修标准
4. 覆盖失败模式:专收自家模型的真实差评案例(比公开数据集有效 10 倍)九、十问十答
- Q: 对齐改变能力吗? A: 会——对齐税(能力略降)真实存在,KL 惩罚和预训练损失混入都是缓解手段;但推理模型时代发现了反转:好的 RL 可以让能力显著上升(RLVR)
- Q: SFT 之后不跑 RL 行不行? A: 行——很多开源模型止步 SFT+DPO;损失的是"分布外的偏好泛化",预算不足时这是合理取舍
- Q: RM 越大越好吗? A: 有研究支持 RM 容量应匹配/超过 policy(弱 RM 训强 policy 加速 reward hacking);70B RM 配 70B policy 是常见配置
- Q: DPO 的 beta 怎么调? A: 0.1 起步;太低偏离 SFT 太多(风格漂移+遗忘),太高学不动偏好
- Q: 偏好数据要多少? A: 质量优于数量到夸张的程度——Llama 2 百万级,Zephyr 用 62k 起家(dolly+ultrafeedback),差距主要在数据配比与清洗
- Q: GRPO 只能用于数学代码吗? A: 核心是"组内相对比较",任何能批量判优劣的场景都行(甚至 RM 打分也能当组内奖励)
- Q: 怎么发现 reward hacking? A: 三个信号——人工偏好不升但 RM 分飙升、输出统计突变(长度/格式)、安全基准异常
- Q: 过度拒绝怎么治? A: 负偏好对里加"应该回答但被拒"的样本(边界案例标注是关键,DualUsePrompts 类数据集)
- Q: RLAIF 会不会塌缩(模型训模型)? A: 与蒸馏篇同源风险——需人类抽检锚点 + 宪法迭代;完全闭环会退化
- Q: 对齐后还要 RLHF 吗? A: 产品视角:上线后的用户反馈(点赞/重试/复制)是源源不断的新偏好数据——持续对齐管线是头部产品的标配
十、十大坑清单
- 直接用公开偏好集训自家模型:分布不匹配(风格/语言/任务域)——本地化数据 10k 条胜过通用 100k
- chosen/rejected 都差:模型学到的是"两个坏答案的差异"而不是"什么是好"——数据生产先定质量线
- 忽略长度偏置:DPO 后回答膨胀 30%+ 是经典翻车——长度去偏 + 评估时看长度指标
- beta 拍脑袋设大:偏好学不动;设小:模型人格漂移、胡言乱语回归——扫
- 拿 SFT 数据顺序训 DPO:偏好对需要"模型现在水平附近"的对比——太差的 rejected 教不到东西(梯度饱和)
- RM 与 policy 词表不一致:工程级灾难(打分错位),复用同一底座最稳
- 忘了 reference model 冻结:ref 参与训练 = 锚漂移,DPO 退化成奇怪的自举
- 评估只看自动指标:RM 分数自己训自己评是循环论证——留出人工偏好测试集
- 对齐一次到位的幻想:偏好随用户/时间演化,版本化的对齐数据管线比单次训练更重要
- 合规裸奔:偏好标注涉及人工审核员健康(有害内容暴露)、用户对话数据隐私——对齐数据管线本身有法律义务
结语:偏好的工程学
至此,LLM 训练管线的全部环节在博客中闭环:
预训练(Scaling Laws:算力与数据的预算学)
→ SFT(Fine-tuning 篇:示范的模仿)
→ 偏好对齐(本文:品味的学习)
→ 推理强化(推理模型篇:思考的塑造)
→ 压缩部署(蒸馏篇 + 推理优化篇:能力的经济化)回看这条管线,一个模式浮现:每一段都在把某种"不可计算的东西"转成损失函数——预训练把语言转成下一 token 预测,对齐把人类品味转成 Bradley-Terry 排序概率,RLVR 把解题正确性转成组内相对优势。对齐的独特之处在于它转译的是最模糊的那种信号("哪个回答更好"),所以它的工程史就是一部"让模糊信号可学习"的斗争史:RM 压缩品味 → PPO 小心翼翼跟随 → DPO 把斗争折叠成监督学习 → RLAIF 让 AI 接管标注。
最后留一个清醒的锚点:对齐不是让模型变好,是让模型变得"人类觉得好"——两者的差距,就是这个领域未来十年要处理的问题。
本文由小虾子 🦐 撰写