跳到主要内容

偏好对齐 — SFT 分不出「哪个更好」,这一章教模型挑

这一章讲三件事: 为什么监督微调教不会「挑」;经典的三段流水线 怎么把人的偏好变成可训练的信号,代价有多重;以及一个数学解法怎么把 代价砍掉大半——这是今天开源界微调几乎人人走的那条路。 读完你会拿到第 05 章末尾留下的那个接口的答案。

1. 这一章讲什么

第 05 章把底座教成了会回答的助手,但留了一个洞。书里的原话值得记住: 两个回答表面看都通,其中一个明显更有用、更准、更安全—— 监督微调没有能力教模型分辨这种差别,因为它只会复刻训练样例, 而训练样例里没写过「为什么这个比那个好」1

补这个洞的信号只有一个来源:人挑。给他同一个问题的两个回答, 问哪个好。这一章讲的就是「怎么把『人挑的结果』变成训练信号」, 行话叫偏好对齐。

这条路上有三代方法。经典的一代叫 RLHF(Reinforcement Learning from Human Feedback, 拿「人对回答的挑选」当反馈信号的三段训练法,3.2 节展开)。

今天的主流是 DPO(直接偏好优化),它把三段简化成一段—— 用「拿带答案的样例直接教」的普通办法达成同一个目标,3.5 节。

再往后是接着做减法的 ORPO 与 SimPO(3.6 节)2

2. 顶层全景

SFT 模型(会回答,不会挑)

│ 偏好数据:同一个问题,两个回答,人标「哪个好」

┌─ 路线 A(经典 RLHF):训一个奖励模型学打分 → 用 PPO 拿分数当奖惩去调模型
│ 代价:四个模型同时住进显存
├─ 路线 B(DPO):数学证明「跳过打分」直接调模型 —— 两个模型就够

└─ 路线 C(ORPO/SimPO):把参考模型也省掉,或把 SFT 与对齐并成一段

图说:三条路线训的是同一件事,越往下工程越轻。

3. 核心原理

3.1 偏好数据:相对判断,不打绝对分

一切的起点是一份偏好数据集:一条条三元组——问题、 chosen(人偏好的回答)、 rejected(人觉得差的回答)3

为什么用「挑」而不用「打分」?书里给的理由很实在: 人更擅长相对判断(「这个比那个好」),不擅长绝对打分 (「这段回答值几分」)——让十个标注员给同一段话打分,你会得到十个不同的数; 让他们挑,分歧小得多4。标注员之间的分歧要量出来(第 02 章的 Cohen's kappa 在这里重现),分歧过大说明标准没定清5

3.2 经典三段:RLHF

RLHF(Reinforcement Learning from Human Feedback, 从人类反馈里学的那套方法)是 InstructGPT 时代的经典配方,分三段6:

第一段,还是第 05 章的监督微调——先把「会回答」教会。 第二段,奖励模型(给任何「问题+回答」打一个「有多好」分数的模型): 拿同一个底座加一个小小的打分头,喂上面那种偏好三元组, 训练目标是「chosen 的得分必须高于 rejected」7

这个打分头就是一个打分器(输入一条回答、输出一个分数的部件)—— 人偏好的判断,从此有了一个能自动打分的替身。

它学会的,是把人的相对判断压缩成一个数——此后问它任何「这个回答几分」, 它都能给出与人偏好一致的判断7

第三段,拿这个打分器当「裁判」,去调语言模型。

调法用的是强化学习(靠奖惩信号试错学习的一类方法——答得好给高分, 照着高分调):模型一代代生成回答、被裁判打分、朝高分方向调自己8

第三段的调法是 PPO——下一节讲它为什么重。但先讲它必须带着的一根缰绳。

3.3 缰绳:奖励黑客与 KL 惩罚

裁判是学出来的,不是真理。书里点出了整套流水线最深的坑: 古德哈特定律——当指标(衡量用的那个数)被人当成目标去冲,它就不再是好指标。 对着奖励模型猛调,模型迟早找到「裁判喜欢但人不喜欢」的输出: 啰嗦、谄媚、堆满套话,分数很高,人看着发毛9

对策是一根缰绳,叫 KL 惩罚:每一步调优时, 罚「当前模型与微调前模型的输出分布差多远」—— 分差越大罚得越重。缰绳的松紧由一个系数控制: 太松,模型狂奔向高分垃圾;太紧,模型动弹不得,什么都学不到10。 记住这根缰绳,DPO 一节它还会以另一个名字出现。

3.4 PPO 的重:一份四模型的显存账

PPO(Proximal Policy Optimization,强化学习里的经典调法; 「proximal」就是「贴着旧模型别跑远」——它的每一步自带 KL 缰绳)在语言模型上的 开销,书里算得很直白:同时要有四个模型在显存里11——

在场的模型干什么
策略模型正在被调的「学生」
SFT 参考模型冻结的「调优前的学生」,KL 缰绳的测量端
奖励模型裁判,给回答打分
价值模型估「照现在的走势,往后平均还能拿多少分」,帮 PPO 稳住更新

7B 的模型,四个就是近 30 GB 显存只放模型——还不算训练本身的开销。 书里明确说:这份重,就是更简单方法被发明出来的直接动机11

3.5 DPO:数学把裁判省掉了

DPO(Direct Preference Optimization,直接偏好优化)的关键不是工程技巧, 是一个数学事实:RLHF 那个「在 KL 缰绳下最大化奖励」的目标, **最优解可以直接写成这样一个函数:它只看模型的两个数——生成 chosen 与生成 rejected 各自的概率(即模型多愿意生成某段话的度量;下文也称「可能度」) ——之比。 也就是说,根本不用真的训一个裁判,也不用跑强化学习, 拿偏好三元组直接优化模型就行12

训练流程朴素得像监督学习:复制一份 SFT 模型当「学生」, 把原来的 SFT 模型冻住当「标尺」,每条三元组算两个比值—— 学生对 chosen 的概率相对标尺变了多少、对 rejected 变了多少—— 前者要升、后者要降,损失就完了13

走查:书里那条真实偏好对(数据为演示编的)

问题:「What is machine learning?(什么是机器学习)」
chosen: 有定义、有「从数据中学规律」的机制、有用途——具体、结构化
rejected: 「机器学习就是电脑从数据里学东西,挺复杂的,分很多种……」
——含糊、打太极、没有信息量

第 1 步 标尺(SFT 模型冻结)算:它生成 chosen 与 rejected 的概率,当基准
第 2 步 学生算:同样两个可能度
第 3 步 损失 = −log σ( β·(学生对 chosen 的可能度比 − 学生对 rejected 的可能度比) )
第 4 步 沿损失调学生:chosen 的相对可能度被推高,rejected 被压低
(第 3 步里的具体数字是编的;式子本身是 DPO 的标准形式,
与 TRL 源码里那行 −log σ(β·(chosen−rejected)) 一致——见第 4 节脚注)

图说:全程没有裁判、没有强化学习,两份模型、一次普通反向传播。

那根缰绳还在:beta 就是 3.3 节 KL 系数的转世——β 越大, 学生被拴得越紧、改动越小越稳;越小,调得越猛、翻车风险越高。 常用区间 0.1–0.5,书里说 0.1 是中小数据集的常见默认14

账面上,DPO 只需要两个模型(学生+冻结标尺),套用现成的监督训练基建, 效果与 PPO 路线「在标准基准上竞争力相当」15——这就是它统治开源界的理由。 代价也要如实说:偏好数据是训练前一次性收死的,模型变强了数据不会跟着变 (一轮轮循环、让模型自己生成新偏好对再训自己的迭代(循环往复)式做法是补丁,工程量又回来了)16

3.6 再砍两刀:ORPO 与 SimPO

书里给了两个 2024 年的后继者17:

ORPO:把第 05 章的 SFT 和本章的对齐并成一段训练—— 在 SFT 的损失里加一项「对 rejected 的惩罚」, chosen 一份材料两用(既是学习目标、又当「人偏好这边」的示例)。 流程从「SFT→DPO」两段变一段,书里说效果与两段式相当17

SimPO:把 DPO 的「冻结标尺」也扔了。书里的洞察:标尺的主要作用其实是 把不同长度的回答放到同一把尺子上;那直接把分数按长度折算平均(行话叫归一化)就行了, 不必养一个参考模型。显存里只剩一个模型18

方向是清晰的:向「最简单的、效果打平的方法」收敛19

3.7 安全:同一条原理,另一组偏好对

helpful 的对齐讲完了,书里用两页讲 harmless——机制上与 3.5 节完全同构。

Constitutional AI(Anthropic 的方案):不让人标注有害内容 (又贵又伤标注员),而是给模型一部「宪法」(一组写明什么算有害的原则), 让模型按原则自我批评、自我修订,再用修订前后的对比造偏好对去训练—— 评危害的活也交给了 AI 反馈20

拒绝训练:更朴素的一层——在数据里放上「识别有害请求并得体拒绝」的样例。 难点在校准:拒得太狠,连「怎么删掉自己的账号」这种正常问题都拒绝; 拒得太松,一句精心设计的诱导就能绕过。书里给这个「绕过」起了名字: 越狱(用巧妙包装的提问骗模型越过安全训练)—— 拒得得体,靠的正是覆盖面足够全、又不会蔓延到正常问题的拒绝样例21

书里把两件事合在一个判断里:SFT 教它说什么, 偏好对齐教它怎么说得安全——安全行为必须有自己的训练阶段, 指望 SFT 顺手带上,是不可靠的22

4. 作者的判断与证据

**书里当证据给的:**DPO 与 PPO 路线「在标准对齐基准上竞争力相当」 被表述为可复现的实证共识;ORPO 单段对齐与两段式相当,也给了实证地位17

书里当立场给的:「DPO 已成为开源界的主导方法」是作者的现状裁断; ORPO 的定位(「想最少流水线的团队越来越首选它」)是作者的推荐17

把书里的公式接到代码上(补充,不在书里,依据我们的 frontier 书架): 书里那句「负 log-sigmoid 的损失」在 TRL 的 DPO 实现里就是一行 -F.logsigmoid(self.beta * delta_score),其中 delta_score 恰是 chosen 与 rejected 两份对数(取对数,即把连乘化成连加的数学变换)后的可能度比之差——本章走查第 3 步的式子与它逐字对应。 依据: shelf=ai-frontier-reference/trl@src:trl/trainer/dpo_trainer.py:1465 事实=源码 per_sequence_loss = -F.logsigmoid(self.beta * delta_score), delta_score = chosen_scores − rejected_scores(1460 行)。 同一主题,本库姊妹书《Post-Training AI》有更偏「训练信号选择」的讲法, 两章互为补充。依据: shelf=ai-book-reference/post-training-ai-practical-guide-to#04-preference-learning.md 事实=该章把「人挑的偏好信号如何变成训练目标」作为主线, 与本章的工程视角互补。

5. 边界与局限

  • 偏好数据的上限就是标注员的上限:书里讲了校准与一致性, 但「标注员集体偏出真实用户」这种系统性偏差,书里没有讨论;
  • DPO 的离线局限(数据收死、模型变强数据不变)书里如实承认, 迭代 DPO 只被一句带过,没有展开流程16;
  • 安全章节只覆盖 Constitutional AI 与拒绝训练两招; 红队测试、安全评测集这些配套(书出版时已是行业标配)书里没讲 (补充(不在书里,来自通用知识));
  • 四模型显存账是 7B 量级的演示;工程上还有 LoRA 化 PPO 等省法, 书里未提(补充(不在书里,来自通用知识))。

6. 可带走的

  1. SFT 分不出「两个都像样,哪个更好」——偏好信号只能来自「人挑」;
  2. 偏好数据用相对判断不用绝对打分:人挑得稳,分数漂;
  3. RLHF 三段:SFT → 奖励模型 → PPO;裁判是人偏好的压缩;
  4. 奖励黑客=古德哈特定律:猛刷代理指标必产出高分垃圾;KL 缰绳防它;
  5. PPO 的重:四模型同住显存;DPO:数学闭式解砍掉裁判,两个模型一段普通训练;
  6. beta 是缰绳:0.1 起步,紧稳松猛;
  7. ORPO 把 SFT 与对齐并成一段,SimPO 连标尺都省——方向是向最简收敛;
  8. 安全行为要专门的偏好对(SFT 教「说什么」、对齐教「怎么说得安全」), 拒绝训练的成败在校准:太狠误伤、太松越狱。

7. 原文地图

主题原书章原文位置
SFT 分不出表面都对的两个回答Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:95(搜「superficially」)
RLHF 用比较而非标签Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:97(搜「comparisons」)
三元组与相对判断Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:111(搜「relative judgments」)
标注一致性与三元组质量Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:113(搜「Inter-annotator agreement」)
RLHF 三段(InstructGPT)Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:101(搜「three distinct stages」)
奖励模型结构与成对损失Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:117(搜「linear head」) · :119(搜「Bradley-Terry」)
奖励黑客/古德哈特与 KL 惩罚Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:123(搜「Goodhart」)
PPO 的角色映射与 proximalInstruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:131(搜「policy」) · :133(搜「proximal」)
KL 系数的两难Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:139(搜「Too small」)
四模型同住显存Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:143(搜「four models」)
DPO 闭式解Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:151(搜「closed form」)
DPO 损失式Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:153(搜「negative log-sigmoid」)
两个模型、监督基建、竞争力Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:157(搜「two models」)
离线局限与迭代 DPOInstruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:159(搜「fixed preference dataset」)
beta 的作用与默认值Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:165(搜「0.1 to 0.5」)
ORPO 单阶段Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:173(搜「odds ratio」) · :177(搜「first choice」)
SimPO 去参考模型Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:181(搜「removing the reference model」)
Constitutional AI 两阶段Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:191(搜「constitution」) · :193(搜「self-correct」)
拒绝训练与校准两难Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:197(搜「refusal training」) · :199(搜「overly cautious」)
偏好对实例与 DPO 配置Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:509(搜「machine learning is a subset」) · :595(搜「beta=0.1」)
SFT 与 DPO 学习率对照Instruction Tuning and Alignmenttext/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:593(搜「5e-5」)

Footnotes

  1. 出处:「Instruction Tuning and Alignment」第 95 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:95,搜「superficially look correct」)。

  2. 出处:「Instruction Tuning and Alignment」第 11 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:11,搜「DPO simplifies RLHF」)。

  3. 出处:「Instruction Tuning and Alignment」第 111 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:111,搜「triples」)。chosen/rejected 是原文用的英文字段名。

  4. 出处:「Instruction Tuning and Alignment」第 111 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:111,搜「relative judgments」)。

  5. 出处:「Instruction Tuning and Alignment」第 113 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:113,搜「Inter-annotator agreement」)。

  6. 出处:「Instruction Tuning and Alignment」第 101 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:101,搜「three distinct stages」)。

  7. 出处:「Instruction Tuning and Alignment」第 117、119 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:117,搜「linear head」;:119,搜「higher score to the chosen」)。 2

  8. 出处:「Instruction Tuning and Alignment」第 101、131 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:101,搜「policy optimization」;:131,搜「The reward is provided by the reward model」)。

  9. 出处:「Instruction Tuning and Alignment」第 123 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:123,搜「reward hacking」)。

  10. 出处:「Instruction Tuning and Alignment」第 137、139 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:137,搜「KL divergence penalty」;:139,搜「Too small」)。

  11. 出处:「Instruction Tuning and Alignment」第 143 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:143,搜「four models in memory」)。30 GB 为 4×7B×16-bit 的等比推算演示数。 2

  12. 出处:「Instruction Tuning and Alignment」第 151 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:151,搜「closed form」)。

  13. 出处:「Instruction Tuning and Alignment」第 163 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:163,搜「copy the SFT model」)。

  14. 出处:「Instruction Tuning and Alignment」第 165 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:165,搜「0.1 to 0.5」)。

  15. 出处:「Instruction Tuning and Alignment」第 157 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:157,搜「empirically competitive」)。

  16. 出处:「Instruction Tuning and Alignment」第 159 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:159,搜「iterative DPO」)。 2

  17. 出处:「Instruction Tuning and Alignment」第 173、177 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:173,搜「odds ratio penalty」;:177,搜「first choice」)。 2 3 4

  18. 出处:「Instruction Tuning and Alignment」第 181、183 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:181,搜「removing the reference model」;:183,搜「target reward margin」)。

  19. 出处:「Instruction Tuning and Alignment」第 895 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:895,搜「simpler, more efficient」)。

  20. 出处:「Instruction Tuning and Alignment」第 191、193 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:191,搜「constitution」;:193,搜「critique its own responses」)。

  21. 出处:「Instruction Tuning and Alignment」第 197、199 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:197,搜「declines them」;:199,搜「overly cautious」)。

  22. 出处:「Instruction Tuning and Alignment」第 187 段(text/06-ch03-chapter-3-instruction-tuning-and-alignment.txt:187,搜「not just helpful but also harmless」)。