跳转至

第 14 章:偏好对齐:RLHF / DPO / RLAIF

1. 本章要解决的问题

第 12 章里,我们讲了 SFT:怎样把一个预训练底座塑造成“会按指令回答”的助手模型。
第 13 章里,我们又进一步讲了:当模型变大、预算有限时,怎样用 LoRA / QLoRA / PEFT 更省资源地完成这类微调。

但如果你真的把一个只做过 SFT 的模型拿来和人交互,很快还会遇到一个新的问题:

它虽然已经“会回答了”,但不一定“回答得让人满意”。

比如同样一个问题,模型可能会出现这些情况:

  • 两个答案都基本正确,但一个更啰嗦、一个更清楚
  • 都没有明显事实错误,但一个更有帮助,另一个像在敷衍
  • 都完成了任务,但一个更安全、边界感更强
  • 明明知道答案,却总喜欢过度自信地下结论
  • 面对模糊问题时,不会先澄清,而是直接编下去

这说明一件很关键的事:

SFT 教会模型“模仿示范答案”,但很多真实偏好并不容易被单条标准答案完整表达。

用户真正关心的,常常不是“这个回答是否唯一正确”,而是:

  • 哪个回答更有帮助
  • 哪个更自然
  • 哪个更符合人类预期
  • 哪个更值得被产品采纳

这就是偏好对齐要解决的问题。

从全书结构上看,这一章有三个作用:

  • 它承接第 12、13 章,把“监督微调”推进到“基于偏好的后训练”
  • 它解释为什么现代助手模型通常不止做 SFT,还会继续做 alignment
  • 它也为后面的应用工程打基础,因为 RAG、Agent、生产系统里很多体验差异,本质上都和模型有没有被良好对齐有关

如果第 12 章回答的是:

怎样让模型学会按示范回答。

那么这一章要回答的就是:

当“可回答”还不等于“更好回答”时,我们怎样把人类偏好进一步变成训练信号,让模型在多个可行答案之间更稳定地朝我们想要的方向靠拢。

2. 你学完后应该会什么

  • 能解释为什么做完 SFT 之后,很多模型还要继续做偏好对齐
  • 能理解 chosen / rejected 这类偏好数据到底在表达什么
  • 能说清 reward model 在 RLHF 流程里扮演什么角色
  • 能理解 PPO + KL penalty 的核心直觉,而不是只记名词
  • 能说清 DPO 为什么更简单,以及它和 RLHF 的关系
  • 能理解 RLAIF 为什么更便宜、更可扩展,同时也更容易引入新的偏差
  • 能知道什么时候该优先做 SFT,什么时候偏好对齐才真正值得投入

3. 为什么 SFT 之后还不够

先把这一章最重要的判断说清楚:

SFT 解决的是“会不会答”,偏好对齐解决的是“多个能答的答案里,哪种更好”。

3.1 单个标准答案往往不够表达真实偏好

在很多任务里,并不存在唯一标准回答。

例如用户问:

请解释为什么 Transformer 比 RNN 更容易并行化。

下面两个答案可能都对:

  • 答案 A:强调 self-attention 去掉了时间步递归依赖
  • 答案 B:同时解释了并行计算、mask 约束和训练效率提升

如果只是做 SFT,你通常只能给模型一个参考答案,让它去模仿。
但真实世界里,我们常常更想表达的是:

B 比 A 更好。

这个“更好”可能来自:

  • 更完整
  • 更简洁
  • 更礼貌
  • 更少幻觉
  • 更符合系统风格
  • 更安全

这类信息不是单条监督标签,而更像一种排序关系。

3.2 助手产品优化的很多目标,本质上是偏好优化

当模型进入产品环境后,你优化的通常不再只是“答对率”,还包括:

  • 有帮助但不过度啰嗦
  • 诚实,不知道时承认不知道
  • 尽量减少危险建议
  • 更稳定地遵守角色和风格约束
  • 面对含糊任务时先澄清而不是乱猜

这些目标里,有些可以通过写更多 SFT 数据解决,但很多时候更直接的表达方式是:

给模型看两个候选回答,告诉它哪个更值得偏好。

3.3 这也是“对齐”这个词的含义

所谓 alignment,本质上不是一个神秘术语,而是:

让模型的输出行为更贴近我们真正想要的目标。

这里的“我们”可能是:

  • 人类标注者的偏好
  • 产品设计者的体验目标
  • 安全规范
  • 企业内部使用约束

所以偏好对齐并不是在替代 SFT,而是在 SFT 之后继续做一层更细粒度的行为塑形。

4. 偏好数据长什么样

和 SFT 的 instruction-output 数据不同,偏好对齐最常见的数据不是“唯一答案”,而是“成对比较”。

4.1 最常见格式:prompt + chosen + rejected

一个最典型的样本可以写成:

{
  "prompt": "请解释什么是过拟合,并给出两个缓解方法。",
  "chosen": "过拟合指模型在训练集上表现很好,但在未见数据上泛化较差。常见缓解方法包括增加正则化,以及使用更多样的数据或数据增强。",
  "rejected": "过拟合就是模型效果不好。解决方法是多训练几轮,通常就可以了。"
}

这里最重要的不是 chosen 本身有多完美,而是:

在这个 prompt 下,chosenrejected 更符合偏好。

4.2 偏好信号本质上是相对的

这一点非常重要。

偏好数据通常表达的不是:

这个答案绝对值是 9 分。

而是:

在这两个候选里,这个更好。

所以偏好学习更接近排序,而不是传统回归。

4.3 偏好数据从哪里来

常见来源包括:

  • 人类标注者对多个候选回答做两两比较
  • 从旧模型采样多个答案,再让人选最好或排顺序
  • 基于规则或安全规范自动构造一部分偏好对
  • 用更强模型充当评审器,产生 AI feedback

这也对应了后面几条主线:

  • RLHF:Reinforcement Learning from Human Feedback
  • RLAIF:Reinforcement Learning from AI Feedback
  • DPO:直接在偏好对上优化,不显式跑 RL

5. RLHF:经典偏好对齐流程到底在做什么

RLHF 是偏好对齐里最经典、也最常被提到的一条路线。

但很多初学者一听 RLHF,就会误以为:

是不是突然从语言模型训练跳到了游戏强化学习?

其实不是。它的核心仍然是:
先把“人类更喜欢哪个回答”变成一个可优化信号,再让模型朝高偏好方向调整。

5.1 RLHF 的三步主线

一个经典 RLHF 流程通常可以概括成三步:

  1. 先做 SFT,得到一个基础助手模型
  2. 用偏好比较数据训练一个 reward model
  3. 用强化学习继续优化策略模型,让它产出更高 reward 的回答

这里第 1 步非常关键。

因为如果模型连基本指令跟随都没学会,后面的偏好优化会非常不稳定。
所以现实里通常不是“预训练后直接 RLHF”,而是:

Pretraining -> SFT -> Preference Alignment

5.2 reward model 在学什么

reward model 可以理解成一个“可微的偏好打分器”。

它的输入通常是:

  • prompt
  • 候选回答

输出是一个标量分数,表示这个回答有多符合偏好。

训练时,它看到的是类似:

同一个 prompt 下:
chosen 的分数应该高于 rejected

于是 reward model 学到的不是世界真理,而是:

什么样的回答更像是人类会偏好的回答。

5.3 为什么要先训练 reward model

因为人类偏好标注很贵,不可能在模型训练的每一步都实时请人打分。

所以 RLHF 的工程思路是:

先用一批人类比较数据训练一个近似评委,再让这个评委在大规模训练中持续给反馈。

这样你就把稀缺的人类偏好,变成了一个可以批量调用的学习信号。

6. PPO 和 KL penalty:RLHF 里的核心直觉

当我们有了 reward model,下一步就是继续训练语言模型,让它生成更高 reward 的回答。
经典做法里常见的是 PPO 一类强化学习算法。

这里不追求完整强化学习推导,而先抓住最重要的直觉。

6.1 策略模型在优化什么

把当前语言模型看成一个策略 pi(y | x)

  • x 是 prompt
  • y 是生成的回答

我们希望它生成的回答既:

  • reward 更高
  • 又不要偏离原来的 SFT 模型太远

为什么不能只追求 reward 最大?

因为 reward model 本身只是一个近似器。
如果你放任模型疯狂钻 reward model 的空子,它可能学会:

  • 过度模板化
  • 迎合某些表面特征
  • 输出非常长但没信息量的内容
  • 出现 reward hacking

6.2 KL penalty 在防什么

这也是 RLHF 里经常会看到 KL 惩罚项的原因。

它的作用可以粗略理解为:

别为了追高 reward,一下子跑离原来的 SFT 分布太远。

所以 RLHF 优化的通常不是单纯 reward,而更像:

高 reward - 偏离参考模型的代价

这里的参考模型通常就是 SFT 模型或它的冻结副本。

6.3 PPO 为什么常见

PPO 流行的原因,不是因为它和文本天然绑定,而是因为它在策略优化里相对稳定、工程上较成熟。
在 RLHF 语境下,你可以把它理解成:

一种在“提高奖励”和“别一次更新太猛”之间做折中的优化方法。

对于面试或入门理解来说,先抓住下面这层已经很够用了:

  • reward model 提供偏好分数
  • PPO 负责更新生成策略
  • KL penalty 负责防止模型发散

7. RLHF 的价值与代价

RLHF 能让模型在很多体验维度上明显变好,但它并不是“白捡的提升”。

7.1 它的价值

RLHF 常见收益包括:

  • 回答更像一个可用助手
  • 更愿意遵守人类交互习惯
  • 更少明显冒犯或失控回答
  • 对“有帮助、诚实、无害”这类目标更敏感

很多现代聊天模型之所以“像助手”,很大一部分就来自这类后训练,而不只是预训练本身。

7.2 它的代价

但 RLHF 也有明显成本:

  • 需要高质量偏好数据
  • 人类标注昂贵
  • reward model 本身可能带偏差
  • RL 训练复杂,调参和稳定性要求更高
  • 一不小心就会出现 reward hacking 或能力退化

所以很多团队后来会问:

有没有更简单的方法,既利用偏好数据,又少掉复杂的 RL 过程?

这就引出了 DPO。

8. DPO:为什么它这两年这么流行

DPO 是 Direct Preference Optimization

它之所以流行,一个非常现实的原因是:

它把“偏好优化”这件事变得更像普通监督训练。

8.1 DPO 解决的核心痛点

传统 RLHF 需要:

  • 训练 reward model
  • 再跑强化学习
  • 再处理策略稳定性和 KL 约束

这条链路有效,但工程复杂度高。

DPO 的出发点是:

如果我们的目标本来就是让模型更偏好 chosen、压低 rejected,那能不能直接在偏好对上优化,而不显式训练 reward model、也不显式跑 PPO?

答案是可以。

8.2 DPO 的直觉是什么

DPO 的核心直觉非常朴素:

在同一个 prompt 下,模型应该给 chosen 更高概率,给 rejected 更低概率;
同时,这种偏好不是无限放大,而是相对于一个参考模型来定义。

于是它优化的本质可以理解成:

  • 提高模型对 chosen 的相对偏好
  • 降低模型对 rejected 的相对偏好
  • 不让模型脱离参考分布太远

如果你回忆第 12 章的 SFT,会发现这里依然没有离开语言模型的核心:

比较序列概率。

只是现在比较的不再是“标准答案 token loss 小不小”,而是:

chosen 相对 rejected 的对数概率差,够不够朝正确方向。

8.3 为什么很多团队更喜欢 DPO

因为它通常有这些优势:

  • 流程更短
  • 不需要单独训练 reward model
  • 不需要完整 RL 管线
  • 更容易复用现有 SFT 训练框架
  • 在中小团队里更容易落地

所以这几年很多开源对齐实践,都会优先从 DPO 开始,而不是上来就完整 RLHF。

9. DPO 和 RLHF 的关系,不是“谁彻底淘汰谁”

这里很容易出现一个误解:

既然 DPO 更简单,是不是 RLHF 就过时了?

不能这么理解。

更准确地说:

  • RLHF 是更经典、更完整的一类偏好优化框架
  • DPO 是在很多场景下更简洁、更工程友好的替代路线

什么时候 DPO 特别合适?

  • 你已经有较干净的偏好对数据
  • 你想快速验证 alignment 效果
  • 你团队不想维护复杂的 RL 训练链路
  • 你更偏向研究或中等规模工程实验

什么时候 RLHF 仍然有价值?

  • 你已经有成熟 reward modeling 基础设施
  • 你需要更细的在线优化能力
  • 你希望对奖励设计、探索策略有更强控制

所以在实践里,二者更像是不同成本结构下的工具选择,而不是简单替代关系。

10. RLAIF:把“人类反馈”换成“AI 反馈”

如果说 RLHF 的瓶颈之一是人类标注贵,那么一个自然想法就是:

能不能让一个更强的模型先帮我们做一部分偏好判断?

这就是 RLAIF,Reinforcement Learning from AI Feedback

10.1 它在做什么

RLAIF 并不是说完全不需要人类,而是:

用 AI 评审器替代一部分人工偏好标注或人工奖励信号。

例如你可以:

  • 让一个更强模型比较两个候选答案谁更有帮助
  • 让它依据安全规则判断哪个回答风险更高
  • 让它根据 rubric 给回答排序或打分

然后再把这些 AI 反馈用于 reward modeling、DPO 或其他偏好优化流程。

10.2 为什么它有吸引力

因为它通常更:

  • 便宜
  • 可扩展
  • 容易覆盖长尾任务

很多团队之所以越来越依赖 AI feedback,不是因为它一定更准确,而是因为:

人类反馈太稀缺,而模型迭代速度太快。

10.3 它的风险在哪里

RLAIF 的核心风险是“把评委的偏差一起规模化复制”。

常见问题包括:

  • 更强模型本身也会有偏见
  • 它可能偏好某种固定话风,而不是真正高质量内容
  • 如果 rubric 设计不好,AI 评审容易奖励表面形式
  • 模型评模型,可能出现同类错误的自我强化

所以一个比较稳妥的现实原则是:

AI feedback 很适合放大数据规模,但最好仍然用一部分高质量人工评估做校准。

11. 三条路线怎么放在一起理解

学到这里,可以把 RLHF、DPO、RLAIF 放进同一个框架里看。

11.1 它们都在做同一件大事

共同目标都是:

利用偏好信号,让模型在多个可行回答中更稳定地选择更符合目标的那个。

11.2 它们的主要区别

RLHF 更像:

  • 先学一个 reward model
  • 再用 RL 优化策略
  • 表达能力强,但训练链路更长

DPO 更像:

  • 直接在偏好对上优化序列概率
  • 省掉显式 reward model 和 RL
  • 流程更简洁,工程门槛更低

RLAIF 更像:

  • 不是一种单独损失函数
  • 而是“反馈来自 AI 而不是主要来自人类”的数据来源策略

所以你完全可以看到这样的组合:

  • 人类偏好数据做 DPO
  • AI 偏好数据做 DPO
  • AI 打分训练 reward model,再做 RLHF

它们并不是互斥关系。

12. 偏好对齐常见会把模型“调坏”吗

会,而且这恰恰是对齐工作最值得警惕的地方之一。

12.1 过度对齐可能压掉原始能力

如果偏好数据太单一,模型可能会学成:

  • 什么都特别礼貌,但信息密度下降
  • 什么都先说免责声明,回答效率很差
  • 面对复杂问题过度保守
  • 把“安全”误学成“少说、拒说、套话”

这类现象在社区里常被概括为“模型变钝了”。

12.2 训练信号会塑造风格,不只是塑造正确性

这也是为什么做 alignment 时,不能只问“安全没安全”,还要问:

  • 是否仍然有帮助
  • 是否仍然清晰
  • 是否仍然保留推理与任务完成能力

换句话说,偏好对齐优化的不是单一维度,而是一个多目标平衡。

12.3 所以评估必须跟上

第 11 章讲过,评估不是最后补的成绩单。
到了 alignment 阶段,这句话更加成立。

你至少要同时关注:

  • 偏好目标有没有提升
  • 通用任务能力有没有掉
  • 安全性是否真的提高
  • 风格是否变得过度模板化

如果只盯某一类偏好分数,很容易把模型往错误方向推。

13. 一个最小可用的实践视角

如果你是初学者,或者你所在团队资源有限,一个比较现实的认知顺序通常是:

13.1 先别跳过 SFT

绝大多数情况下,SFT 仍然是第一步。
因为偏好对齐不是拿来补基础能力缺口的,而是拿来在已有助手行为上做进一步塑形。

13.2 有偏好数据时,优先理解 chosen / rejected

不管你最后跑 DPO 还是更复杂流程,先把数据想清楚:

  • prompt 是什么
  • 为什么 chosen 更好
  • rejected 差在哪里
  • 偏好标准是否一致

很多 alignment 失败,本质上不是算法不够先进,而是偏好数据本身不稳定。

13.3 中小规模实验通常可以先从 DPO 入手

因为它更容易接在已有的 SFT / LoRA 管线上。
特别是在开源模型实验、课程项目、求职作品里,DPO 往往比“完整 PPO-RLHF 系统”更现实。

13.4 别把“更对齐”误解成“万能更强”

alignment 会改善交互体验,但不自动等于:

  • 知识更多
  • 检索更准
  • 工具调用更稳
  • 事实性永远更好

很多能力问题仍然要靠:

  • 更好的底座
  • 更好的数据
  • 更强的检索
  • 更合理的系统设计

这也是为什么书的后半部分会继续进入 embedding、RAG、Agent 和部署。

14. 本章小结

这一章我们真正想建立的,不是几个缩写的死记硬背,而是一条清晰主线:

  • SFT 让模型学会按示范回答
  • 偏好对齐让模型在多个可回答的选项里,更稳定地朝“更好回答”靠近
  • RLHF 的思路是:人类偏好 -> reward model -> RL 优化
  • DPO 的思路是:直接在 chosen / rejected 偏好对上做相对优化
  • RLAIF 的思路是:让 AI 帮我们规模化产生反馈,但要警惕把偏差一起放大

所以如果有人问:

为什么现代聊天模型通常不止做 SFT?

一个比较完整的回答应该是:

因为“会答”不等于“答得更符合人类偏好”。SFT 更多是在学任务示范,而 alignment 则是在继续优化帮助性、稳定性、安全性和交互体验。

15. 下一章:为什么对齐还不能解决“知识不在上下文里”这个问题

讲完偏好对齐之后,很容易产生另一个误解:

既然我们已经能把模型调得更像助手了,是不是很多应用问题就都解决了?

还没有。

因为模型即使:

  • 更礼貌
  • 更听话
  • 更符合偏好

也仍然可能不知道你公司私有文档里的内容,也不一定记得最新知识,更无法天然访问外部数据库。

这就引出了应用工程里另一条非常关键的路线:

不是只改模型参数,而是把外部知识通过向量表示和检索机制接进来。

所以下一章,我们会先补上这条链路的基础:

什么是 embedding,为什么语义检索需要向量表示,向量数据库到底在保存什么。