⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

5.5 强化学习对齐:RLHF 与 DPO

核心问题: 预训练模型已经很强大,为什么还不能直接用?

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明


预训练模型的能力与局限

预训练学到了什么

5.1节讲过,预训练的目标只有一个:预测下一个词

输入:The quick brown fox
目标:jumps

这个目标驱动模型读了几乎整个互联网——新闻、书籍、代码、论坛、百科全书。结果是,模型学到了惊人的语言能力和世界知识。

但"预测下一个词"和"成为有用的助手"之间,有一道鸿沟。

三个核心问题

问题1:模型会续写,不会回答

预训练模型看到"如何制作炸弹?",它的本能是续写——就像互联网上那些真实存在的有害内容一样。它没有理由拒绝,因为拒绝从来不是训练目标。

问题2:模型不听指令

用户:用一句话总结这段文字。
模型:(继续生成更多文字,而不是总结)

预训练数据里充满了各种文体,模型学会了"续写",但没学会"服从指令"。

问题3:模型会说谎

预训练数据里有大量错误信息、过时信息、甚至虚构内容。模型学会了"听起来合理",而不是"说真话"。

类比:信号处理中的原始采集

这就像一个宽带接收机,它能接收所有频率的信号,但没有滤波器。原始信号里有你想要的,也有噪声、干扰、甚至恶意信号。对齐就是那个滤波器——让模型只输出"有用、无害、诚实"的内容。


SFT:监督微调

核心思想

SFT(Supervised Fine-Tuning,监督微调)的做法很直接:

  1. 雇佣人工标注员
  2. 让他们写出"好的对话"——用户问什么,助手应该怎么回答
  3. 用这些"指令-回答"对继续训练预训练模型
训练数据格式:

[指令] 用一句话解释什么是黑洞。
[回答] 黑洞是一种引力极强的天体,连光都无法逃脱,通常由大质量恒星坍缩形成。

[指令] 帮我写一封请假邮件,原因是发烧。
[回答] 尊敬的领导,您好。我因发烧身体不适,申请今日请假一天,望批准。谢谢!

SFT 教会了模型什么

  • 对话格式:知道自己是"助手",用户是"用户"
  • 听从指令:看到"总结"就总结,看到"翻译"就翻译
  • 拒绝有害请求:标注员写了大量"这个我无法帮助"的示例

SFT vs 第6章的微调

这里容易混淆,需要区分清楚:

SFT(本节):
  预训练模型 → 通用助手
  目标:让模型"变成助手"
  数据:通用指令-回答对,覆盖各种任务

第6章微调:
  通用助手 → 特定领域专家
  目标:让助手"适配特定任务"
  数据:特定任务的标注数据(如医疗问答、代码生成)

SFT 是"从野生动物到家养宠物",第6章微调是"从普通宠物到导盲犬"。两者都是微调,但目的和起点不同。

SFT 的局限

SFT 之后,模型已经好用很多了。但还有一个问题:如何定义"好的回答"?

标注员可以写出好的示例,但很难穷举所有情况。更重要的是,对于同一个问题,可能有多个"还不错"的回答,但哪个更好?这需要更细粒度的人类偏好信号。


奖励模型:把人类偏好量化

排序比打分更可靠

直接让标注员给回答打分(1-10分)很难——每个人的标准不一样,同一个人前后也不一致。

但让标注员比较两个回答哪个更好,就容易多了。这是人类判断的自然方式。

问题:如何减肥?

回答A:少吃多动,保持健康饮食和规律运动。

回答B:你可以尝试极端节食,每天只吃500卡路里。

标注员选择:A 更好(B 的建议有健康风险)

奖励模型的训练

收集大量这样的"(问题, 回答A, 回答B, 人类偏好)"数据后,训练一个奖励模型(Reward Model, RM)

输入:(问题, 回答)
输出:一个分数,表示这个回答有多好

奖励模型训练目标:
  对于人类偏好 A > B 的样本,
  确保 RM(问题, A) > RM(问题, B)

奖励模型本质上是一个分类器,但它的输出是连续分数,代表"人类会有多喜欢这个回答"。

奖励模型的意义

这一步是整个对齐流程的关键:把难以量化的"人类偏好"变成了一个可以自动计算的数值

有了奖励模型,就不需要人类实时参与每一次训练迭代了。奖励模型充当了"人类偏好的代理"。


RLHF:用强化学习优化语言模型

整体流程

RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)把前面的步骤串联起来:

第一步:预训练
  大规模文本 → 预训练模型(有能力,但不对齐)

第二步:SFT
  指令-回答对 → SFT模型(会听指令,但不够好)

第三步:训练奖励模型
  人类偏好排序数据 → 奖励模型(能评分)

第四步:RL优化
  用奖励模型的分数作为信号,用PPO算法优化SFT模型
  → 对齐后的模型(有用、无害、诚实)

强化学习的直觉

把语言模型想象成一个"演员":

  • 状态:当前的对话上下文
  • 动作:生成下一个词
  • 奖励:回答完成后,奖励模型给出的分数

演员的目标是最大化累积奖励——也就是生成奖励模型认为"好"的回答。

KL 散度约束:防止模型"钻空子"

这里有一个关键问题:如果只优化奖励分数,模型会学会欺骗奖励模型

想象一下:奖励模型是用有限数据训练的,它有盲点。语言模型可能发现某些奇怪的输出能骗过奖励模型得高分,但这些输出对人类来说毫无意义。这叫奖励黑客(Reward Hacking)

极端情况(没有约束):
  模型发现重复"非常好非常好非常好..."能得高分
  → 奖励分数很高,但回答完全没用

解决方案是加入 KL 散度约束

优化目标 = 奖励分数 - β × KL(当前模型 || SFT模型)

KL散度衡量:当前模型的输出分布
           与SFT模型的输出分布有多不同

β 是权衡系数:
  β 大 → 模型不能偏离SFT太远(保守)
  β 小 → 模型可以大幅改变(激进)

类比信号处理:KL 约束就像一个正则化项,防止优化过程过拟合到奖励模型的噪声,保持模型的"基本面"不变。

PPO 算法

RLHF 通常用 PPO(Proximal Policy Optimization)算法来做 RL 优化。PPO 的数学细节放在扩展内容里,这里只需要知道:

  • PPO 是一种稳定的策略梯度算法
  • 它通过限制每次更新的幅度来保证训练稳定
  • 对语言模型来说,"策略"就是"给定上下文,生成下一个词的概率分布"

DPO:更简单的对齐方法

RLHF 的复杂性

RLHF 效果很好,但工程上很复杂:

RLHF 需要同时维护:
  1. SFT 模型(参考模型,用于 KL 约束)
  2. 奖励模型(独立训练)
  3. 当前策略模型(正在被优化的模型)
  4. 价值函数模型(PPO 需要)

四个模型同时在 GPU 上,内存压力巨大。

DPO 的思路

DPO(Direct Preference Optimization,直接偏好优化)的核心洞察是:

奖励模型和 RL 优化可以合并成一步。

数学上可以证明,RLHF 的最优解有一个闭合形式,可以直接用偏好数据来训练语言模型,不需要显式的奖励模型和 RL 循环。

RLHF 流程:
  偏好数据 → 训练奖励模型 → RL 优化语言模型

DPO 流程:
  偏好数据 → 直接优化语言模型

DPO 的训练目标

DPO 的损失函数直接作用在偏好对上:

对于每个偏好对 (问题, 好回答, 差回答):

  增大模型生成"好回答"的概率
  减小模型生成"差回答"的概率
  同时保持与参考模型(SFT模型)不要偏离太远

这个目标直觉上很清晰:直接告诉模型什么好、什么不好,让它往好的方向走

DPO vs RLHF

维度          RLHF              DPO
-----------   ---------------   ---------------
训练复杂度    高(4个模型)      低(2个模型)
内存需求      很高              较低
训练稳定性    需要仔细调参       相对稳定
效果          强(GPT-4等)      接近RLHF
工程难度      高                低

DPO 不是在所有情况下都优于 RLHF,但它大幅降低了对齐的工程门槛,让更多团队能够做对齐训练。

类比:两步法 vs 端到端

从信号处理的角度看:

  • RLHF 像两级滤波器——先设计一个"人类偏好检测器"(奖励模型),再用它来驱动另一个系统(语言模型)
  • DPO 像端到端优化——直接从输入(偏好数据)到输出(对齐模型),中间没有独立的中间模块

端到端方法通常更简单,但有时候两级方法的可解释性和可控性更好。


对齐的更大图景

Helpful、Harmless、Honest

对齐的目标通常概括为"3H":

Helpful(有用):能完成用户的合理请求
Harmless(无害):不生成有害内容,不帮助恶意行为
Honest(诚实):不编造信息,承认不确定性

这三个目标有时候会冲突。比如,一个"极度有用"的模型可能会帮助用户做有害的事情;一个"极度无害"的模型可能会拒绝太多合理请求。对齐研究的很大一部分工作是在这三者之间找到平衡。

对齐不是一劳永逸

对齐训练完成后,模型仍然可能被"越狱"(jailbreak)——通过精心设计的提示绕过安全限制。这是一个持续的攻防过程,也是 LLM 工程实践中安全设计要考虑的内容。

宪法AI(Constitutional AI)

Anthropic 提出的另一种对齐方法:不依赖人类标注员来判断好坏,而是给模型一套"宪法"(一组原则),让模型自己评判自己的输出,然后用这些自我评判来训练。这减少了对人工标注的依赖,但需要模型本身已经足够强大。


代码实验

RLHF Pipeline

图5.5a:RLHF 训练流程——SFT 预热、奖励模型训练、PPO 强化学习三阶段,以及 DPO 的简化对比。

代码文件: code/ch05_llm_basics/rlhf_pipeline.py
运行方式: python code/ch05_llm_basics/rlhf_pipeline.py


本节小结

对齐是"让预训练模型变成可用助手"的关键步骤:

预训练模型
  ↓ SFT(学会对话格式和听从指令)
SFT 模型
  ↓ 奖励模型训练(量化人类偏好)
  ↓ RLHF 或 DPO(用偏好信号优化模型)
对齐后的模型

核心思路:

  • 预训练给了能力:模型学会了语言和世界知识
  • 对齐给了方向:模型学会了"有用、无害、诚实"地使用这些能力
  • SFT 是基础,教会模型对话格式和基本指令遵循
  • 奖励模型 是桥梁,把人类偏好转化为可优化的信号
  • RLHF 是经典方法,效果强但工程复杂
  • DPO 是简化方法,把两步合成一步,降低工程门槛
  • KL 约束 是安全阀,防止模型为了高奖励而"钻空子"

对齐是一个活跃的研究领域,现有方法都不完美。但正是这些技术,让预训练模型从"能续写文本的系统"变成了"可以信赖的助手"。


下一节: 5.6 模型评估
扩展阅读: 对齐训练深度细节(PPO 流程、KL 散度数学、DPO 推导、GRPO/o1 推理强化学习)

本教程采用 CC BY-NC-SA 4.0 许可协议