Skip to content

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 的选择埋了两个深远问题(后文展开):

  1. 奖励只看差值——绝对水平不可校准,RM 天生是个"相对品味器"
  2. 传递性假设——人类偏好真实存在非传递(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 会无条件放大三者之和。缓解手段:

  1. KL 惩罚(下一节):限制策略偏离参考模型太远
  2. RM 集成:多个 RM 取平均/最小值,单个 RM 的漏洞不被一致利用
  3. 迭代数据更新:部署后收集被 hack 的案例回炉重训 RM
  4. 对比数据覆盖长尾:专收"模型获胜但人类不满"的样本

三、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  ← 环境奖励,组内相对优化

三条路线上线顺序与适用判断:

  1. 对齐"品味"(语气/格式/安全边界)→ 偏好优化(DPO 起步最稳)
  2. 对齐"能力"(推理/代码/数学)→ RLVR + GRPO(奖励可验证时永远优先)
  3. 规模化与可控(数据成本/原则透明)→ 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 倍)

九、十问十答 ​

  1. Q: 对齐改变能力吗? A: 会——对齐税(能力略降)真实存在,KL 惩罚和预训练损失混入都是缓解手段;但推理模型时代发现了反转:好的 RL 可以让能力显著上升(RLVR)
  2. Q: SFT 之后不跑 RL 行不行? A: 行——很多开源模型止步 SFT+DPO;损失的是"分布外的偏好泛化",预算不足时这是合理取舍
  3. Q: RM 越大越好吗? A: 有研究支持 RM 容量应匹配/超过 policy(弱 RM 训强 policy 加速 reward hacking);70B RM 配 70B policy 是常见配置
  4. Q: DPO 的 beta 怎么调? A: 0.1 起步;太低偏离 SFT 太多(风格漂移+遗忘),太高学不动偏好
  5. Q: 偏好数据要多少? A: 质量优于数量到夸张的程度——Llama 2 百万级,Zephyr 用 62k 起家(dolly+ultrafeedback),差距主要在数据配比与清洗
  6. Q: GRPO 只能用于数学代码吗? A: 核心是"组内相对比较",任何能批量判优劣的场景都行(甚至 RM 打分也能当组内奖励)
  7. Q: 怎么发现 reward hacking? A: 三个信号——人工偏好不升但 RM 分飙升、输出统计突变(长度/格式)、安全基准异常
  8. Q: 过度拒绝怎么治? A: 负偏好对里加"应该回答但被拒"的样本(边界案例标注是关键,DualUsePrompts 类数据集)
  9. Q: RLAIF 会不会塌缩(模型训模型)? A: 与蒸馏篇同源风险——需人类抽检锚点 + 宪法迭代;完全闭环会退化
  10. Q: 对齐后还要 RLHF 吗? A: 产品视角:上线后的用户反馈(点赞/重试/复制)是源源不断的新偏好数据——持续对齐管线是头部产品的标配

十、十大坑清单 ​

  1. 直接用公开偏好集训自家模型:分布不匹配(风格/语言/任务域)——本地化数据 10k 条胜过通用 100k
  2. chosen/rejected 都差:模型学到的是"两个坏答案的差异"而不是"什么是好"——数据生产先定质量线
  3. 忽略长度偏置:DPO 后回答膨胀 30%+ 是经典翻车——长度去偏 + 评估时看长度指标
  4. beta 拍脑袋设大:偏好学不动;设小:模型人格漂移、胡言乱语回归——扫
  5. 拿 SFT 数据顺序训 DPO:偏好对需要"模型现在水平附近"的对比——太差的 rejected 教不到东西(梯度饱和)
  6. RM 与 policy 词表不一致:工程级灾难(打分错位),复用同一底座最稳
  7. 忘了 reference model 冻结:ref 参与训练 = 锚漂移,DPO 退化成奇怪的自举
  8. 评估只看自动指标:RM 分数自己训自己评是循环论证——留出人工偏好测试集
  9. 对齐一次到位的幻想:偏好随用户/时间演化,版本化的对齐数据管线比单次训练更重要
  10. 合规裸奔:偏好标注涉及人工审核员健康(有害内容暴露)、用户对话数据隐私——对齐数据管线本身有法律义务

结语:偏好的工程学 ​

至此,LLM 训练管线的全部环节在博客中闭环:

预训练(Scaling Laws:算力与数据的预算学)
  → SFT(Fine-tuning 篇:示范的模仿)
  → 偏好对齐(本文:品味的学习)
  → 推理强化(推理模型篇:思考的塑造)
  → 压缩部署(蒸馏篇 + 推理优化篇:能力的经济化)

回看这条管线,一个模式浮现:每一段都在把某种"不可计算的东西"转成损失函数——预训练把语言转成下一 token 预测,对齐把人类品味转成 Bradley-Terry 排序概率,RLVR 把解题正确性转成组内相对优势。对齐的独特之处在于它转译的是最模糊的那种信号("哪个回答更好"),所以它的工程史就是一部"让模糊信号可学习"的斗争史:RM 压缩品味 → PPO 小心翼翼跟随 → DPO 把斗争折叠成监督学习 → RLAIF 让 AI 接管标注。

最后留一个清醒的锚点:对齐不是让模型变好,是让模型变得"人类觉得好"——两者的差距,就是这个领域未来十年要处理的问题。

本文由小虾子 🦐 撰写

Last updated: