LLM 后训练实践
第3课:偏好对齐DPO

3.1 对齐问题:为什么仅靠 SFT 不够

SFT 教会模型'说什么',但未教会它'如何选择'。人类偏好本质上是比较性的,偏好优化直接捕获这一信号。

从 SFT 到对齐:缺失的一环

在前两课中,我们通过监督微调(SFT)将 Qwen3-1.7B 基座模型转化为一个能够遵循指令、进行多轮对话的助手。SFT 的核心贡献是教会模型**"说什么"**——给定一个用户输入,模型学会了生成格式正确、内容相关的回复。

但仔细思考会发现,SFT 存在一个根本性的局限:它教会了模型模仿,但没有教会模型选择

SFT 的本质:最大似然模仿

SFT 的训练目标是最大化参考回复的对数似然:

LSFT=E(x,y)D[logπθ(yx)]\mathcal{L}_{\text{SFT}} = -\mathbb{E}_{(x,y) \sim \mathcal{D}} \left[ \log \pi_\theta(y | x) \right]

这意味着模型被训练去复制训练数据中的回复模式。如果训练数据中包含多种风格、多种质量水平的回复,模型会学习所有这些模式的混合分布,而不是学会辨别哪些回复更好。

"说什么" vs "如何选择"

考虑以下用户提示:

"请告诉我如何制作一个简单的网站。"

一个经过 SFT 的模型可能生成多个不同的回复:

制作一个简单网站的步骤:

1. 选择技术栈:对于初学者,推荐使用 HTML + CSS
2. 设置开发环境:安装 VS Code 编辑器
3. 创建 HTML 文件:编写基本的页面结构
4. 添加 CSS 样式:美化页面外观
5. 本地预览:在浏览器中打开 HTML 文件
6. 部署上线:使用 GitHub Pages 免费托管

需要我详细解释其中的某个步骤吗?

评价:结构清晰、实用、有适当的后续引导。这是一个好回复

用 HTML 和 CSS 就行了。

评价:虽然技术上不算错误,但过于简短,对用户没有实际帮助。这是一个差回复

制作网站是一个很好的学习目标!让我从互联网的历史开始讲起...
(接下来是3000字的计算机网络发展史)
...所以综上所述,你可以用 HTML 写一个网站。

评价:信息可能准确,但严重偏离用户需求,浪费用户时间。这是一个不好的回复

最简单的方法是下载这个免费软件:www.fake-website-builder.com,
一键就能生成网站,不需要学习任何代码。

评价:可能引导用户访问不安全的网站,存在安全风险。这是一个有害回复

SFT 模型在面对这些回复时缺乏一个关键能力——在回复 A、B、C、D 之间做出有意识的选择。如果训练数据中四种风格都存在,SFT 后的模型可能随机生成其中任何一种。

人类偏好的比较性本质

偏好是相对的,不是绝对的

人类在评判回复质量时,天然采用比较的方式思考:

  • "回复 A 比回复 B 更好" ✓
  • "回复 A 的绝对质量是 7.3 分" ✗(很难给出精确的绝对分数)

这种比较性偏好用数学语言描述就是:

ywylxy_w \succ y_l \mid x

表示在给定提示 xx 的条件下,人类偏好(preferred)回复 ywy_w(winner)胜过回复 yly_l(loser)。

Bradley-Terry 偏好模型

为了将这种比较性偏好形式化,我们采用经典的 Bradley-Terry 模型。假设存在一个潜在的奖励函数 r(x,y)r^*(x, y),那么人类偏好 ywy_w 胜过 yly_l 的概率为:

P(ywylx)=σ(r(x,yw)r(x,yl))P(y_w \succ y_l \mid x) = \sigma\left(r^*(x, y_w) - r^*(x, y_l)\right)

其中 σ\sigma 是 sigmoid 函数 σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

Bradley-Terry 模型的直觉:两个回复的奖励差距越大,偏好就越明确。当 r(x,yw)r(x,yl)+r^*(x, y_w) - r^*(x, y_l) \to +\infty 时,偏好概率趋近于 1;当差距为零时,偏好概率为 0.5(完全随机)。

这个模型最初来自心理学和体育竞赛排名领域(1952年),被 RLHF 领域借用来建模人类偏好判断。

SFT 的三个核心局限

局限一:无法处理偏好冲突

在真实应用中,模型经常需要在相互冲突的目标之间做出权衡:

冲突类型选项 A选项 B正确选择
有用性 vs 安全性详细回答"如何配制危险化学品"拒绝并解释原因选项 B
详细性 vs 简洁性5000字的详细教程300字的精要指南取决于上下文
准确性 vs 可理解性充满术语的专业回答通俗易懂但略有简化取决于用户
自信 vs 诚实"答案一定是 X""我不确定,但可能是 X,因为..."通常选项 B

SFT 无法显式地教模型如何在这些冲突中做出正确的权衡——它只能从训练数据中隐式地学习,但不同标注者可能做出不同选择,导致模型行为不一致。

局限二:安全对齐的困境

安全对齐是一个特别棘手的问题:

SFT 安全困境:如果训练数据中包含大量拒绝回复("对不起,我不能回答这个问题"),模型可能变得过度拒绝(over-refusal),对无害的请求也拒绝回答。如果拒绝回复太少,模型又可能在有害请求上生成不安全的内容。SFT 很难找到精确的平衡点。

通过偏好优化,我们可以直接告诉模型:"对于有害请求,拒绝回复比详细回答更好;对于正常请求,有帮助的回复比拒绝更好。" 这种成对比较信号比单纯的模仿信号更精确。

局限三:回复多样性的不可控

SFT 训练后的模型可能产生高度多样的回复(因为训练数据中的回复风格多样),也可能产生极度同质的回复(因为过拟合到训练数据的某种模式)。我们缺乏一个机制来控制模型在多样性和一致性之间的平衡。

偏好优化通过 KL 散度约束(后续将详细介绍)提供了这一控制手段。

经典演示:同一提示下的 SFT 多样性问题

让我们用一个具体例子来直观感受 SFT 模型的局限。对同一个提示进行多次采样:

提示:"量子计算机和传统计算机有什么区别?"

# 多次采样同一个 SFT 模型
prompt = "量子计算机和传统计算机有什么区别?"
for i in range(5):
    response = sft_model.generate(
        prompt,
        temperature=0.7,
        do_sample=True
    )
    print(f"回复 {i+1}: {response}")

典型结果可能是:

  • 回复 1:准确、结构化的解释(质量:高)
  • 回复 2:过于学术化、充满未解释的术语(质量:中)
  • 回复 3:包含事实错误——"量子计算机已经比传统计算机快1000倍"(质量:低)
  • 回复 4:优质回答但过于冗长(质量:中上)
  • 回复 5:简短准确的概述(质量:高)

关键问题在于:SFT 模型对这5个回复的质量差异没有意识。它以类似的概率生成高质量和低质量的回复,因为 SFT 的训练目标只是模仿训练分布,而非最大化回复质量。

从"模仿"到"偏好":解决方案概览

为了解决 SFT 的上述局限,研究者提出了基于人类偏好的对齐方法。核心思路是:

收集偏好数据

对同一个提示,让模型(或人类)生成两个回复 ywy_wyly_l,由人类标注者判断哪个更好。得到三元组数据集 D={(x(i),yw(i),yl(i))}\mathcal{D} = \{(x^{(i)}, y_w^{(i)}, y_l^{(i)})\}

训练偏好信号

利用偏好数据训练模型区分好回复和差回复。有两条技术路线:

  • RLHF 路线:先训练奖励模型(Reward Model),再用强化学习(PPO)优化策略
  • DPO 路线:直接在偏好对上优化策略,跳过奖励模型和 RL 循环

对齐后的模型

经过偏好优化后,模型学会了在生成回复时自动"选择"更好的方向——更有帮助、更安全、更诚实。

偏好数据:对齐的基础设施

偏好数据集的结构

一条偏好数据包含三个部分:

{
  "prompt": "请解释什么是机器学习",
  "chosen": "机器学习是人工智能的一个分支...[高质量、结构化的回答]",
  "rejected": "机器学习就是让机器学习...[低质量、含糊的回答]"
}

主要偏好数据集

数据集规模标注方式特点
Anthropic HH-RLHF170K人类标注早期代表性数据集
UltraFeedback64KGPT-4 标注多维度评分,本课实验使用
Nectar183KGPT-4 排名来自多个模型的回复
Chatbot Arena持续增长用户实时投票最真实的人类偏好

本课实验数据:我们将使用 HuggingFaceH4/ultrafeedback_binarized 数据集,它包含 64K 条提示,每条提示都有 GPT-4 评分的 chosen 和 rejected 回复对。虽然使用 AI 标注而非人类标注存在一定偏差,但它是目前最广泛使用的开源偏好数据集之一。

本节小结

概念SFT偏好优化
教模型什么说什么(模仿)如何选择(判断)
训练信号单个参考回复成对比较(A > B)
损失函数交叉熵(最大似然)偏好对上的排名损失
处理冲突隐式(依赖数据分布)显式(偏好信号)
安全对齐难以精确控制可以直接建模偏好

在下一节中,我们将从数学上推导 DPO(Direct Preference Optimization)算法——它提供了一种优雅的方式,将偏好学习转化为一个简单的监督学习问题,完全消除了训练奖励模型和运行 RL 循环的需要。