DPO 数学原理:从 RLHF 到直接偏好优化

05-对齐微调 进阶≈ 25 分钟 #DPO#RLHF#公式 reviewed
我的状态:

前置知识点

一句话定义

DPO(Direct Preference Optimization)用「同一提示下被偏好回答与被拒绝回答的似然比」直接构造损失函数,跳过了 RLHF 中训练奖励模型和强化学习两个重环节。

为什么重要

偏好对齐曾是大厂专属:RLHF 要训奖励模型、再跑不稳定的 PPO,工程复杂度比 SFT 高一个量级。DPO 把对齐变成了「又一轮监督训练」,配合 LoRA 在单卡上即可进行,是 2023 年后开源模型对齐的事实标准。理解它的公式,才能理解 β 为什么是灵魂超参、以及为什么 DPO 必须「先 SFT 再 DPO」。

前置知识

kp-021 的 SFT 基座概念;知道 RLHF 三段式:SFT → 奖励模型(RM)→ PPO 强化学习。

核心概念

  • 偏好对(pair):同一提示下的 (chosen 被偏好回答, rejected 被拒绝回答)。
  • 参考模型 π_ref:冻结的 SFT 模型,充当「不跑偏」的锚。
  • β(beta):温度系数,控制偏离参考模型的允许幅度,是 DPO 最重要的超参。
  • 隐式奖励:DPO 证明「语言模型对数似然比」等价于某个奖励函数——模型本身就是奖励模型。

原理与机制

RLHF 的目标是在最大化奖励的同时不偏离参考策略太远(KL 约束)。DPO 的关键推导:这个带 KL 约束的优化问题存在闭式解,最优策略满足

r(x,y) = β·log [πθ(y|x) / πref(y|x)] + 常数

把它代回 Bradley-Terry 偏好模型(P(chosen 优于 rejected) = σ(r_w − r_l)),得到 DPO 损失:

L_DPO = −E log σ( β·log[πθ(yw|x)/πref(yw|x)] − β·log[πθ(yl|x)/πref(yl|x)] )

直觉解读:对被偏好回答,希望 θ 相对 ref 的似然比升高;对被拒绝回答,希望它降低;两者之差过 σ 变成分类概率,用负对数似然推着差值变大。β 的作用:β 大 → 似然比的微小变化就能拉开差距 → 更新保守、贴紧参考模型;β 小 → 需要更大的似然比变化 → 更新激进、偏离更多但也更易崩。

工程副产品:训练时同时喂 θ 与 ref 两个模型的前向(ref 不算梯度),显存约为 SFT 的 1.5-2 倍,这是 DPO 比 SFT 贵的直接原因。

图示

RLHF:  SFT → 训练奖励模型RM → PPO在线强化 (三段, 不稳定)
DPO:   SFT → 冒号这一步全没了 → 直接在偏好对上优化似然比 (一段, 监督式)
       π_θ(训练) vs π_ref(冻结的SFT模型) = 隐式奖励

直观类比

RLHF 像先请一位评委(RM)给所有菜打分,再让厨师按分数盲改菜谱(PPO);DPO 像直接端上两道菜告诉厨师「左边好吃右边难吃」,厨师自己悟。省掉评委,代价是厨师只能从成对比较里学。

实例或案例

客服模型 SFT 后回答正确但常附带冗长免责声明。构造 3000 对偏好数据(chosen=简洁版,rejected=冗长版),DPO(β=0.1、lr 5e-7、1 epoch)后:简洁率从 40% 升到 87%,答案正确率评测几乎不变——这正是 DPO 的典型用法:在 SFT 能力之上调整「两种都对的回答之间偏哪种」,而不是教新知识。

操作步骤

  1. 确认 SFT 基座质量达标(DPO 放大的是基座已有行为)。
  2. 准备偏好对 jsonl:{prompt, chosen, rejected},确保 chosen/rejected 除目标维度外其他方面一致(控制变量)。
  3. 配置 DPOTrainer:β=0.1 起步、lr 5e-7~5e-6、1 epoch、B_eff 32。
  4. 监控 rewards/accuracies(偏好判别准确率)与 margins(见 kp-023)。
  5. 产出后跑与 SFT 相同的双评测,确认无退化再迭代。

排错清单

  • accuracies 长期 0.5:模型分辨不出偏好,查数据(chosen/rejected 差异是否清晰)与 lr。
  • chosen 似然塌缩(回答变差):β 过大或缺少 SFT 起点,回退配置。
  • 训练比预期贵一倍:ref 模型前向开销是正常的,但可用 LoRA 的 reference-free 技巧或共享基座省显存。

常见误区

  • DPO 可以替代 SFT:DPO 需要好的 SFT 基座,它调整偏好排序而不教能力。
  • β 越大越稳越好:β 过大模型几乎不更新,对齐效果趋近于零;0.05-0.3 是常用区间。
  • 偏好对里 chosen 与 rejected 差异多多益善:若两答案还差在事实正确性,DPO 会把「学知识」和「学偏好」混在一起,应保证单变量差异。

与其他知识点的关系

实操与调参细节见 kp-023;GRPO/ORPO/KTO 等后续演进见 kp-024;偏好数据怎么造见 kp-010 与 kp-023。

延伸阅读

Rafailov et al. 2023《Direct Preference Optimization: Your Language Model is Secretly a Reward Model》;Bradley & Terry 1952(偏好比较的概率模型源头)。

自测题

  1. DPO 中的参考模型 π_ref 是什么、起什么作用?

答:冻结的 SFT 模型,作为 KL 锚点限制 θ 偏离幅度,防止对齐过程毁掉已学能力。

  1. 写出 DPO 损失的核心结构。

答:−log σ( β·log[πθ(yw|x)/πref(yw|x)] − β·log[πθ(yl|x)/πref(yl|x)] )——win 与 lose 的对似然比之差过 sigmoid。

  1. β 调大会怎样?

答:对似然比变化更敏感、更新更保守,模型贴近参考模型;过大会几乎学不到偏好差异。

相关知识点

来源

  • Rafailov et al. 2023《Direct Preference Optimization: Your Language Model is Secretly a Reward Model》

基于模型知识整理,建议按需核对原文。