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

5.5 偏好对齐:SFT、RLHF 与 DPO ​

核心问题: 如何用示范与偏好数据调整模型行为?

在线 Notebook

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


预训练目标与应用目标不同 ​

预训练通常最小化下一个 token 的预测损失。这个目标不会直接规定回答格式、拒答边界或业务规则。要把基础模型用于对话,还需要示范数据、偏好数据和运行时约束。

这些方法主要调整模型的输出分布,不保证事实正确,也不能替代安全测试。


SFT:从示范中学习 ​

监督微调(Supervised Fine-Tuning,SFT)使用“指令—回答”样本继续训练模型:

text
[指令] 用一句话解释什么是黑洞。
[回答] 黑洞是引力强到连光也难以逃逸的天体区域。

SFT 可以训练对话格式、任务步骤、输出结构和部分拒答行为。它的边界由数据覆盖决定:示范不足、标签冲突或分布偏移都会影响结果。

本节与第 6 章的任务微调使用相同的监督学习机制,区别主要在数据和目标:通用 SFT 覆盖多类指令,任务微调聚焦特定输入、输出和评价标准。


奖励模型:拟合偏好比较 ​

偏好数据通常包含同一提示下的两个回答及其排序:

text
(prompt, chosen_response, rejected_response)

奖励模型为“提示—回答”输出标量分数,并训练为让偏好回答得分更高。常见成对损失可写为:

LRM=−log⁡σ(rϕ(x,yw)−rϕ(x,yl))

其中 yw 是被偏好的回答,yl 是未被偏好的回答。

这个分数是标注偏好的近似,不是“有用”或“安全”的客观测量。标注规范、标注者差异和奖励模型的泛化误差都会影响后续训练。


RLHF:用奖励更新策略 ​

基于人类反馈的强化学习(RLHF)通常包含:

text
预训练模型
  → SFT
  → 收集回答偏好并训练奖励模型
  → 用奖励模型更新语言模型策略

对一个提示生成回答后,奖励模型提供训练信号。策略优化常加入相对参考模型的 KL 惩罚:

J(θ)=E[rϕ(x,y)]−βDKL(πθ(⋅|x)∥πref(⋅|x))

KL 项限制策略偏离参考模型的幅度。它有助于控制更新,但不能阻止所有奖励投机或不安全输出。

PPO 是可用于策略更新的方法之一。实际训练还需要处理采样成本、奖励尺度、价值估计和训练稳定性,因此系统复杂度高于普通 SFT。


DPO:直接使用偏好对 ​

直接偏好优化(Direct Preference Optimization,DPO)在特定奖励建模假设下,把带 KL 正则的偏好优化改写为分类式目标。训练直接比较偏好回答与非偏好回答相对参考模型的对数概率,无需单独训练奖励模型和运行在线强化学习循环。

text
RLHF:偏好数据 → 奖励模型 → 策略优化
DPO: 偏好数据 + 参考模型 → 策略优化
方面基于奖励模型的 RLHFDPO
偏好信号先拟合奖励模型直接使用偏好对
训练流程包含生成采样和策略优化接近监督训练流程
可扩展性奖励模型可用于新回答打分依赖已有成对样本
主要风险奖励模型误差、奖励投机、训练不稳定偏好数据偏差、参考模型选择、分布外泛化

DPO 流程较短,但不意味着质量一定优于 RLHF。二者都需要独立评测,而不是只比较训练损失。


如何评估对齐训练 ​

至少分开检查以下指标:

  • 任务完成:格式正确率、指令约束满足率和任务指标。
  • 偏好一致性:盲评胜率及其置信区间。
  • 事实性:可验证问题上的引用、答案与不确定性表达。
  • 安全性:明确的风险分类、攻击集和误拒率。
  • 能力保持:对齐前后的通用与领域评测差异。

“有用、无害、诚实”可以作为目标分类,但必须转换成数据集、标注规则和指标,才能用于验收。


代码实验 ​

RLHF Pipeline

图5.5:SFT、奖励模型、策略优化与 DPO 的数据流。箭头表示训练依赖,不表示质量保证。

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


本节小结 ​

  • SFT 用示范数据训练输出行为。
  • 奖励模型拟合偏好排序,分数会继承数据和模型误差。
  • RLHF 用奖励更新策略,并常用 KL 项限制偏移。
  • DPO 直接使用偏好对,流程更短,但仍需评估数据偏差与能力退化。

下一节: 5.6 模型评估
扩展阅读: 对齐训练细节

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