11.5 DPO与偏好对齐
SFT(监督微调,详见第11.6节)教会了模型”怎么回答”。但会回答,不等于回答得好。
想象你在教一个学徒做菜。SFT阶段,你给了他100本菜谱,他学会了每道菜的标准做法——油温多少、调料多少、翻炒几分钟。现在你让他做一盘鱼香肉丝,他做出来了,步骤完全正确。但你又让他做第二遍,说”这次少放点盐、多放点醋”。他懵了。他只知道”按菜谱做”,不知道什么叫”更好吃”。
这就是SFT之后的困境:模型会做,但不知道做得好不好。 偏好对齐(Preference Alignment)要解决的正是这个问题——教模型分辨”正确答案”和”更好的答案”之间的区别。不是所有正确答案都一样好。有些回答更礼貌、更简洁、更安全、更符合用户的隐藏期望。
一、概念:从”会做”到”做得好”
1.1 SFT的天花板
SFT的本质是模仿学习(Imitation Learning)——模型看大量的”问题-标准答案”对,学着照葫芦画瓢。这类似于学徒把菜谱背得滚瓜烂熟,但从来没有尝过自己做的菜。他不知道咸了还是淡了,因为他没有”好”的标准,只有”对”的标准。
SFT训练出来的模型存在三个典型问题:
第一,啰嗦。 模型倾向于生成很长的回答,因为它看到的训练样本大多是详细的长文本,它学会了”多写总比少写好”,但不知道何时该简洁。
第二,不敢说不知道。 SFT样本里几乎每个问题都有答案,模型学会了”每个问题都要给出一个答案”,而不是学会判断”这个问题我没有足够信息回答”。
第三,语气不对。 同一个问题,对小学生和对CEO的回答方式应该不同。SFT模型可能给出技术上正确的回答,但语气、详略、用词会”跑偏”。
这三个问题的共同根源是:SFT只教模型模仿格式,不教模型判断质量。
1.2 RLHF:最早的对齐方案
RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)是OpenAI在2022年用于训练InstructGPT和ChatGPT的方法 1。它的核心思路并不复杂:既然模型不知道什么是”好”,那就找人来打分。
RLHF分三步走:
第一步:SFT。 用高质量的人工标注数据(问题-标准答案对)对模型做监督微调,让模型先有一个基本的行为规范。这一步相当于给学徒看精选菜谱。
第二步:训练奖励模型(Reward Model)。 让人工标注员看同一个问题的多个回答,排出优劣顺序。用这些排序数据训练一个独立的”评分AI”——奖励模型。这个奖励模型的工作就是:给定一个问题和一个回答,输出一个分数,分数越高代表回答越好。这相当于雇佣一个专职品菜师,每道菜都让他打分。
第三步:PPO强化学习。 PPO(Proximal Policy Optimization,近端策略优化)是一种强化学习算法 2。在这一步,主模型不断生成回答,奖励模型给每个回答打分,PPO根据分数调整主模型的参数——朝着高分方向优化。相当于厨师不断做菜,品菜师不断打分,厨师根据分数调整做法。
RLHF有效,但极其”重”。它有三个核心问题:
| 问题 | 详述 |
|---|---|
| 需要4个模型同时在线 | 策略模型(正在训练的)、参考模型(冻结的SFT模型,用于约束不要跑太远)、奖励模型(负责打分)、价值模型(PPO需要的,用于估计未来收益)。四个模型的显存和计算量让普通人根本无法尝试。 |
| PPO训练极不稳定 | 同样的参数、同样的数据,跑两次可能得到完全不同的结果。学习率差0.0001,模型可能从”越来越好”变成”胡言乱语”。调参需要大量经验和算力。 |
| 奖励黑客(Reward Hacking) | 奖励模型本身也是AI,有缺陷。主模型会”学会”钻奖励模型的空子——生成一些奖励模型给高分但实际上无意义的回答。这就像一个学生摸透了老师的出题规律,考试能拿高分但不代表真学会了 ^[Casper et al., “Open Problems and Fundamental Limitations of RLHF”, 2023]。 |
打个比方:RLHF相当于请一个专职品菜师(奖励模型),每道菜都让他打分,厨师按分数调整。但你得先培训这个品菜师(第二步),而且品菜师可能偏爱某些口味(奖励模型的偏差),厨师就会投机取巧只做品菜师喜欢的菜(奖励黑客)。
1.3 DPO的核心洞察:干掉奖励模型
DPO(Direct Preference Optimization,直接偏好优化)由Stanford大学Rafailov等人于2023年提出 3。这篇论文的核心洞察可以用一句话概括:
语言模型本身就是”隐式的奖励模型”——它给某个回答的概率越高,说明它越认可这个回答。因此,不需要额外训练一个评分模型。
这个洞察来自一个优雅的数学重构。RLHF的优化目标可以写成一个带有KL散度约束(KL Divergence,一种衡量两个概率分布差异的数学工具,你可以理解为”模型不能偏离参考模型太远”的约束)的奖励最大化问题。Rafailov等人发现,这个优化问题的最优解有一个封闭形式(Closed Form,即可以用公式直接写出来的精确解,不需要迭代求解)。将这个封闭形式代入偏好概率模型(Bradley-Terry模型,一种用成对比较估计相对优劣的统计模型),奖励函数就被消去了——最终剩下的损失函数只依赖于策略模型和参考模型的输出概率,以及偏好对中的chosen和rejected回答。
换句话说,DPO把RLHF的三阶段流程压缩成了单阶段监督训练——不需要训练奖励模型,不需要PPO强化学习,直接用偏好对数据优化策略模型。
继续用做菜比喻来理解三种方法的区别:
- RLHF:请一个专职品菜师(奖励模型),每道菜让他打分,厨师按分数调整。
- DPO:直接告诉厨师”A做法比B做法好吃”,厨师自己对比两种做法的差异,调整自己的理解。
- SFT:只给厨师看标准菜谱,不告诉他哪种更好吃。
DPO自2024年起迅速成为偏好对齐的主流方法,原因很简单:比RLHF简单10倍,效果不差甚至更好。 多项研究表明,在AlpacaEval、MT-Bench等主流评测中,DPO训练的模型在同等条件下与RLHF训练的模型持平或略优,而训练成本仅为RLHF的30%到50% 4。
二、教学:DPO如何工作
2.1 偏好数据的格式
DPO的训练数据叫偏好对(Preference Pair)。每条数据包含三个部分:
{
"prompt": "帮我写一段产品介绍,面向年轻女性用户。",
"chosen": "这款精华液质地轻盈,一抹化水...(更符合目标受众的回答)",
"rejected": "该产品采用先进生物科技配方...(虽然正确但过于学术)"
}
- prompt:用户的问题或指令
- chosen:更好的回答(人类标注员选择的)
- rejected:较差的回答(人类标注员没选的)
一个完整的DPO数据集通常包含几千到几万条这样的偏好对。每条偏好对回答的核心问题都是:面对同一个prompt,人类觉得哪个回答更好?
2.2 损失函数的直觉
DPO的损失函数看起来吓人,但背后的逻辑非常简单。公式如下:
L_DPO = -E [ log(sigma( beta * log(p_chosen / p_ref_chosen)
- beta * log(p_rejected / p_ref_rejected) )) ]
不要求读者理解公式中的每个符号。我们只解释它在做什么:
直觉翻译:增大chosen的”相对概率”,减小rejected的”相对概率”。
拆解来看:
p_chosen是当前模型对chosen回答赋予的概率。我们希望这个概率变大。p_rejected是当前模型对rejected回答赋予的概率。我们希望这个概率变小。p_ref_chosen和p_ref_rejected是参考模型(冻结的SFT模型)赋予的概率。它们的作用是防止模型改变太多——如果参考模型本来就认为chosen比rejected好很多,那当前模型也不用太努力;如果参考模型认为两者差不多,当前模型才需要认真调整。sigma是sigmoid函数,把任意数值映射到0和1之间,让损失函数的行为像一个”是chosen更好吗?是/否”的二分类问题。beta是最重要的超参数,控制调整的幅度。
用做菜来理解:假设参考模型(SFT后的厨师)对两种做法A和B的评分差不多。你告诉厨师”A比B好”。DPO损失函数的效果就是——厨师调整自己的认知,让A的概率上升、B的概率下降。如果参考模型本来就觉得A好,那厨师调整的幅度就小;如果参考模型觉得B好(跟你的偏好相反),厨师就需要更大幅度地调整。
2.3 beta参数:控制变化的幅度
beta(写作希腊字母beta)是DPO训练中最重要的超参数。它的作用是控制训练后的模型不能偏离参考模型太远。你可以把它理解为一种”保守度”旋钮。
beta的值通常介于0.01到0.5之间。根据2024-2025年的实践经验 5:
| beta取值 | 效果 | 适用场景 |
|---|---|---|
| 0.01-0.05(较小) | 模型会积极地调整概率分布,让chosen明显高于rejected。收敛快,但风险高——可能过拟合,甚至产生likelihood displacement(概率反而从chosen上”逃逸”) | 偏好数据质量高、数量大时 |
| 0.1(中等,过去常用的默认值) | 温和调整。Zephyr等早期DPO模型使用的值。现在已经认为偏保守,不是默认最优。 | 数据量中等时 |
| 0.5及以上(较大) | 非常保守。模型几乎不改变SFT阶段的行为,对齐效果微弱。 | 数据质量不确定、希望最小化改变时 |
核心建议:不要盲目使用beta=0.1。 从0.01开始搜索,在0.005到0.1之间扫参(Sweep,即依次尝试不同值找到最优)是最佳实践。如果使用了比SFT模型更强的参考模型(如同家族的大模型),beta可能需要调整到1.0甚至更高。
一个理解beta的实用技巧:如果你发现训练后的模型开始胡言乱语或输出格式崩溃,说明beta太小了。如果你发现模型跟训练前几乎没变化,说明beta太大了。
2.4 DPO vs RLHF:全方位对比
| 维度 | DPO | RLHF(基于PPO) |
|---|---|---|
| 是否需要奖励模型 | 不需要。直接从偏好对中学习。 | 需要。须先训练一个独立RM。 |
| 训练流程 | 一步到位:偏好数据+参考模型,直接优化策略。 | 三步:SFT -> 训练RM -> PPO优化策略。 |
| 同时维护的模型数 | 2个(策略模型+冻结参考模型) | 4个(策略+参考+奖励+价值模型) |
| 训练稳定性 | 高。本质是分类损失(交叉熵的变体),不像强化学习那样容易发散。 | 低。PPO训练对超参数极度敏感,相同的参数和数据可能产生完全不同结果。 |
| 计算成本 | 低。一次前向传播+一次反向传播,和普通监督训练几乎一样。 | 高。需要多模型协同,PPO每次迭代需要大量采样和多次前向传播。 |
| 超参数数量 | 少。关键参数就是beta,外加常规的训练超参数(学习率、batch size)。 | 多。PPO clip范围、KL惩罚系数、GAE lambda、reward normalization、value loss系数等,调参空间巨大。 |
| 数据需求 | 依赖偏好对的质量和多样性。偏好对需覆盖足够多的场景,否则泛化差。 | 奖励模型可以泛化到训练时未见的prompt,数据利用效率在某些场景下更高。 |
| 抗噪能力 | 较弱。嘈杂的偏好对(标注员意见不一致、标注失误)会直接影响训练。 | 较强。奖励模型可以对数据进行平滑,有一定抗噪能力。 |
| 效果 | 在AlpacaEval 2、MT-Bench等主流评测中与RLHF持平或略优。 | 经典方法,经过了ChatGPT、Claude等顶级模型的充分验证。 |
| 2026年推荐 | 默认首选。简单、稳定、效果好。 | 当偏好数据稀缺但可以构建好的奖励模型时仍有价值;或者在需要在线交互(online RL)的场景下无法被DPO替代。 |
2.5 GRPO:分组比较的智慧
DPO有一个隐含的局限:每个问题只比较两个回答。 但现实中,“哪个更好”往往不是非黑即白的——A更好,但B也不差,C完全不对。两两比较丢失了这种细粒度的差别。
GRPO(Group Relative Policy Optimization,分组相对策略优化)由DeepSeek在2024年提出,用于训练DeepSeek-R1推理模型 6。GRPO的思路截然不同:
对同一个问题,用当前模型生成N个回答(通常N=8到16个),在组内比较它们的优劣,好的奖励,差的惩罚。
想象一个班级考试:
- RLHF是请一个外部考官(奖励模型)给每个学生的卷子打分。
- DPO是每次拿出两份卷子,让老师指出哪份更好,然后让学生从对比中学习。
- GRPO是让全班同学一起做同一道题,所有人的答案摆在一起,排在班级前几名的得到表扬,排在后几名的得到批评。
GRPO的具体流程:
步骤1:采样一个prompt(问题)
步骤2:用当前策略生成G个不同的回答(G通常为8-16)
步骤3:用规则或评分函数给每个回答打分
步骤4:组内归一化——计算组内均值和标准差,每个回答的"优势" = (自己的分数 - 组内平均) / 组内标准差
步骤5:用组内相对优势更新策略
步骤6:对下一个prompt重复
GRPO最大的优势在于:不需要人工标注。 对于数学题和编程题,答案的对错可以用规则自动判断——数学题的最终答案对不对?代码能不能运行?测试用例过没过?这些都不需要人工参与。因此GRPO在数学推理和代码生成领域表现出了远超DPO和RLHF的潜力。
GRPO的代价是计算量:每个问题要生成G个回答,计算量是DPO的G倍。但考虑到省去了人工标注的成本和奖励模型的训练成本,总体来看仍然划算——尤其是对于有明确自动评分标准的任务。
关于GRPO的详细原理、奖励设计和应用场景,请参见GRPO (Group Relative Policy Optimization)。
2.6 2026年:怎么选
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 通用对话、写作助手、客服 | DPO | 简单、稳定。偏好数据容易获取(人类标注员比较两个回答的优劣)。 |
| 数学推理、代码生成 | GRPO | 答案对错可自动验证,不需要人工标注偏好对。组内排名比两两比较更稳定。 |
| 安全性对齐(减少有害输出) | DPO + Constitutional AI思路 | 用安全规则自动生成偏好数据(见Constitutional AI(深挖)),再跑DPO。成本低、可解释。 |
| 偏好数据稀缺,但有合理答案打分机制 | GRPO | 不需要成对比较数据,有评分规则就够。 |
| 有大量高质量偏好数据 | DPO | 数据充足时DPO的效果最好,训练也最简单。 |
| 需要极致效果,有充足算力和工程团队 | RLHF(PPO) | 顶级闭源模型(GPT-4、Claude)仍在用RLHF,在线交互学习的能力DPO无法替代。 |
三、注意事项:DPO的局限与使用边界
3.1 偏好数据质量决定一切
DPO对偏好数据的质量极度敏感。如果标注员”瞎标”——把实际上更差的回答标注为chosen——模型会学到错误的偏好。更隐蔽的问题是标注偏差:如果所有标注员都是20多岁的大学生,他们标注的偏好可能无法代表老年人的偏好。如果所有标注员都来自同一个文化背景,偏好数据就会带上该文化的偏见 7。
实践建议:在开始DPO训练前,随机抽查至少100条偏好对,自己读一读chosen和rejected,确认”好”的标准跟你的目标一致。比你花三天调beta更有效。
3.2 Likelihood Displacement:概率不是只涨不跌
DPO的本意是增大chosen的概率、减小rejected的概率。但2025年的多项研究发现了一个反直觉的现象:训练过程中,chosen的概率不仅没有上升,反而也下降了。 这种现象被命名为Likelihood Displacement(概率位移) 8。
原因在于:DPO损失函数只要求chosen比rejected的”相对概率”更大。当beta太小时,模型可能通过同时降低两者的概率、但让chosen降得少一些来满足这个要求。更严重的是,概率质量可能”逃逸”到既不是chosen也不是rejected的区域——甚至是有害输出的方向。
实践建议:训练时监控chosen回答的对数概率(log probability)。如果发现它持续下降,调整beta(增大)或减少训练步数。2025年的研究建议使用alpha-DPO等变体,通过调整奖励函数形状来控制概率位移。
3.3 长度偏见:模型认为”长=好”
DPO训练有一个广为人知的问题:模型会倾向于偏好更长的回答。因为标注员在比较两个回答时,不自觉地认为”更详细的回答更好”,导致chosen回答的平均长度通常大于rejected回答。模型从数据中学到”写得长=好”,但这个关联在某些场景下是错的——有时简洁才是美德。
SamPO(Down-Sampled DPO)等方法通过从正负样本中等量采样token来缓解这个问题 9。在训练数据构建阶段,刻意让chosen和rejected的长度分布接近,也是有效的预防措施。
3.4 对齐税:变好了,但也变笨了
DPO训练后,模型的对话能力、安全性、指令遵循能力通常会提升。但多个研究观察到一种叫做对齐税(Alignment Tax)的现象:模型在某些基准测试(特别是选择题类benchmark和推理任务)上的表现反而下降 10。
原因可能是:DPO让模型变得更加”谨慎”——不确定的时候就选一个安全的、中性的回答,而不是进行深度推理。这在对话中是好事(不乱说),但在需要精确推理的任务中是坏事(不敢下结论)。
实践建议:DPO训练后,务必在目标任务上做评测,不要只看对话质量。如果在推理任务上下降明显,考虑:(1) 增大beta让模型更保守;(2) 在偏好数据中混入推理任务的偏好对;(3) DPO后补做少量SFT来恢复推理能力。
3.5 什么时候不适用DPO
以下场景,DPO可能不是最佳选择:
没有偏好数据。 DPO的前提是有chosen/rejected的成对比较数据。如果你只有”这个回答好不好”的二元标注(没有比较),DPO用不了。考虑KTO(Kahneman-Tversky Optimization),它只需要单点标注。
偏好标准不稳定。 如果你对”好”的定义经常变化(比如产品迭代初期),DPO每次都要重新收集偏好对,成本很高。Constitutional AI的思路(写明文规则)更适合频繁调整的场景,详见Constitutional AI(深挖)。
需要在线学习(Online Learning)。 DPO在静态数据集上训练,无法与环境交互——模型生成一个回答,不能立刻得到反馈。如果你的场景需要模型在交互中持续改进(比如强化学习驱动的对话系统),RLHF的在线PPO更合适。
算力极度受限。 虽然DPO比RLHF便宜很多,但它仍然需要同时加载策略模型和参考模型(两个完整的大模型)到显存中。如果显存连一个模型都勉强跑起来,DPO也跑不了。此时应先考虑QLoRA(见第11.4节)在SFT阶段减少显存占用,或者使用更轻量的对齐方法如ORPO(将SFT和偏好对齐合并到一个损失函数中,不需要参考模型)。
3.6 GRPO的局限
GRPO虽然强大,但并非万能:
- 主观任务困难。 创意写作、情感对话等没有明确评分标准。如果用LLM当”评委”来评分,又会引入LLM自身的偏见。
- 采样成本高。 每个prompt要生成G个回答(G通常为8-16),推理量是DPO的G倍。推理速度慢的场景不适用。
- 组内回答可能过于相似。 如果采样温度太低,G个回答几乎一样,组内排名失去意义。需要较高的采样温度来保证多样性。
四、关联:在vault中导航
本节聚焦DPO的工程实践和直觉理解。vault内以下文件提供了更深入的补充:
深入理解偏好对齐的原理与变体:
- 偏好对齐:DPO vs GRPO(深挖) — 偏好对齐的数学原理、DPO与GRPO的公式级别对比、多种变体(IPO/KTO/RSO等)的详细分析
- 对比-DPOvsRLHF — DPO与RLHF的数学直觉对比、8维度全方位对比表
相关方法与替代方案:
- GRPO (Group Relative Policy Optimization) — GRPO的完整算法流程、奖励设计、DeepSeek-R1中的应用、与PPO的对比
- Constitutional AI(深挖) — 如何用明文规则替代人工标注、AI自我批评与自我改进、与DPO结合降低成本
- 概念-RLHF — RLHF的完整流程、奖励模型训练、PPO调参细节
微调管线上下游:
- 11.3 QLoRA:单卡微调大模型 — 省显存的微调方法,DPO可以与QLoRA结合使用
- 11.4 SFT:让模型学会"回答"而不是"续写" — SFT是DPO的前提,DPO的参考模型通常就是SFT后的模型
- 11.7 灾难性遗忘详解 — DPO训练过程中也可能出现灾难性遗忘,需要了解应对策略
- 第11章 · 模型微调 — 回到章节索引
上一节:11.4 SFT:让模型学会"回答"而不是"续写" | 下一节:11.7 灾难性遗忘详解
注释
-
Ouyang et al., “Training language models to follow instructions with human feedback”, 2022, https://arxiv.org/abs/2203.02155 ↩
-
Schulman et al., “Proximal Policy Optimization Algorithms”, 2017, https://arxiv.org/abs/1707.06347 ↩
-
Rafailov et al., “Direct Preference Optimization: Your Language Model is Secretly a Reward Model”, NeurIPS 2023, https://arxiv.org/abs/2305.18290 ↩
-
Xu et al., “A Survey of Direct Preference Optimization”, 2025, https://arxiv.org/abs/2503.11701 ↩
-
Liu et al., “Understanding Reference Policies in Direct Preference Optimization”, NAACL 2025 ↩
-
Shao et al., “DeepSeekMath: Pushing the Limits of Mathematical Reasoning”, 2024, https://arxiv.org/abs/2402.03300 ↩
-
Casper et al., “Open Problems and Fundamental Limitations of RLHF”, 2023 ↩
-
Razin et al., “Unintentional Unalignment: Likelihood Displacement in Direct Preference Optimization”, ICLR 2025 ↩
-
Xu et al., “A Survey of Direct Preference Optimization”, 2025 ↩
-
Saeidi et al., “DPO’s Impact on Reasoning”, TMLR 2025 ↩