在上一篇文章中我们详细讲解了 RLHF。RLHF 的核心思想是先收集人类偏好数据 再训练奖励模型 最后用 PPO 等强化学习方法优化语言模型这个流程在 InstructGPT、ChatGPT 等模型的发展中非常重要。它让大语言模型从“会续写文本”进一步变成“更会遵循用户指令、更符合人类偏好”的助手模型。但是RLHF 也有一个明显问题训练流程比较复杂。它通常需要监督微调 SFT 训练奖励模型 Reward Model 使用 PPO 做强化学习优化 控制 KL 惩罚 处理训练不稳定 避免 reward hacking这套流程虽然有效但工程成本高、调参复杂而且强化学习训练本身也不够稳定。于是一个自然的问题出现了能不能不用显式训练奖励模型也不用 PPO直接用偏好数据优化语言模型这就是 DPO 要解决的问题。DPO 对应的论文是Direct Preference Optimization: Your Language Model is Secretly a Reward ModelDPO 的全称是Direct Preference Optimization也就是直接偏好优化它的核心思想可以概括为一句话不显式训练奖励模型也不使用强化学习而是直接用 chosen / rejected 偏好样本优化语言模型。也就是说DPO 把 RLHF 中复杂的奖励模型 PPO简化成了一个类似分类损失的训练目标。这一章我们就来详细精读 DPO重点讲清楚1. DPO 为什么出现 2. DPO 和 RLHF 有什么关系 3. DPO 的核心公式是怎么来的 4. DPO 如何用 chosen / rejected 数据训练模型 5. DPO 为什么可以不用显式奖励模型 6. DPO 有哪些优势和局限一、DPO 想解决什么问题DPO 要解决的是 RLHF 流程复杂的问题。我们先回顾一下传统 RLHF。在 InstructGPT 中典型流程是预训练语言模型 ↓ SFT 监督微调 ↓ 模型生成多个回答 ↓ 人工对回答进行偏好排序 ↓ 训练奖励模型 ↓ 使用 PPO 优化语言模型这个流程中最复杂的是后两步训练奖励模型 使用 PPO 优化策略模型为什么复杂因为奖励模型只是人类偏好的近似。如果奖励模型有偏差后续 PPO 可能会放大这种偏差。同时PPO 是强化学习算法需要采样、计算奖励、控制 KL 惩罚、调节超参数。训练过程比普通监督学习复杂很多。所以 RLHF 的实际训练中会遇到很多问题奖励模型训练成本高 PPO 训练不稳定 超参数敏感 容易 reward hacking 训练流程长 工程实现复杂DPO 的目标就是简化这个流程。它希望把偏好对齐变成一个更简单的问题给定一个 prompt、一个人类更喜欢的回答 chosen、一个人类不喜欢的回答 rejected直接训练模型提高 chosen 的相对概率降低 rejected 的相对概率。也就是说DPO 直接使用偏好数据其中x 是用户 prompt是 winner也就是 preferred / chosen 回答是 loser也就是 rejected 回答。DPO 不再单独训练奖励模型而是直接让语言模型学会在同一个 prompt 下更偏好 chosen而不是 rejected。二、RLHF 的优化目标回顾要理解 DPO必须先理解 RLHF 的数学目标。RLHF 通常可以写成一个带 KL 约束的奖励最大化问题这个目标的直观含义是模型应该生成奖励更高的回答 但不能偏离原来的 SFT 模型太远。为什么需要 KL 惩罚因为如果只最大化奖励模型分数模型可能会钻奖励模型漏洞生成高奖励但低质量的回答。例如回答越来越长 语气越来越自信 内容越来越模板化 甚至出现 reward hacking所以 RLHF 不是单纯优化奖励而是奖励最大化 KL 约束DPO 的关键就在于它从这个 RLHF 目标出发推导出了一个不需要显式奖励模型和 PPO 的直接优化形式。三、DPO 的关键观察语言模型本身隐含奖励函数DPO 论文标题中有一句非常有意思的话Your Language Model is Secretly a Reward Model直译就是你的语言模型其实暗中就是一个奖励模型。这句话是什么意思在带 KL 约束的 RLHF 目标中如果已知一个最优策略 (\pi^*)那么它和奖励函数之间存在一种对应关系。DPO 使用了这样一个关键关系这个公式的意思是最优策略相对于参考策略的概率提升和奖励函数有关。如果某个回答 (y) 的奖励很高那么最优策略 (\pi^*) 会比参考模型 (\pi_{ref}) 更倾向于生成它。反过来我们也可以从这个公式推出奖励函数这里最关键的是奖励可以用当前策略和参考策略的 log probability ratio 表示。也就是说如果一个回答在当前模型中比在参考模型中概率更高那么它可以被看作获得了更高的隐式奖励。这就是 DPO 的核心洞察不需要显式训练一个奖励模型语言模型相对于参考模型的概率变化本身就可以表示一种隐式奖励。四、偏好建模chosen 应该比 rejected 分数更高在 RLHF 中奖励模型通常使用偏好比较训练。如果人类认为比更好那么奖励模型应该满足传统奖励模型会使用 Bradley-Terry 偏好模型如果 chosen 的奖励比分 rejected 高很多那么就接近 1。如果 chosen 的奖励没有比 rejected 高甚至更低那么这个概率就会变小。传统 RLHF 会显式训练一个奖励模型 (r_\phi(x,y)) 来拟合这个偏好概率。DPO 的做法是用语言模型概率比值来替代奖励函数。五、DPO 损失函数是怎么来的根据前面的关系奖励可以写成对于同一个 prompt (x)chosen 和 rejected 的奖励差为代入上面的表达式注意这里的会抵消掉因为 chosen 和 rejected 对应的是同一个 prompt (x)。所以偏好概率可以写成6、DPO 的训练流程DPO 的训练流程比 RLHF 简单很多。通常可以概括为准备一个 SFT 模型 ↓ 复制一份作为 reference model并冻结参数 ↓ 准备偏好数据 (prompt, chosen, rejected) ↓ 计算 chosen 和 rejected 在当前模型下的 log probability ↓ 计算 chosen 和 rejected 在 reference model 下的 log probability ↓ 代入 DPO loss ↓ 更新当前模型参数其中reference model 通常就是 SFT 模型。它不参与训练只用于提供参考概率。当前模型 (\pi_\theta) 从 SFT 模型初始化然后通过 DPO 训练逐渐改变。对于每条偏好样本prompt: 请解释什么是 Transformer。 chosen: Transformer 是一种基于注意力机制的神经网络结构核心是 Self-Attention可以并行建模序列中的 token 关系。 rejected: Transformer 是一种数据库工具用于存储结构化数据。DPO 会计算当前模型对 chosen 的 log probability 当前模型对 rejected 的 log probability 参考模型对 chosen 的 log probability 参考模型对 rejected 的 log probability然后优化目标是让当前模型相对于参考模型更偏向 chosen而不是 rejected。这就是 DPO 的训练过程。7、DPO 和 RLHF 的区别现在我们可以系统比较 DPO 和 RLHF。对比维度RLHF / PPODPO是否训练奖励模型需要不需要显式奖励模型是否使用强化学习使用 PPO不使用 PPO训练复杂度较高较低数据形式偏好排序数据chosen / rejected 偏好对是否需要采样训练通常需要不需要在线采样优化方式奖励最大化 KL 约束监督式偏好分类损失稳定性依赖 PPO 和奖励模型通常更稳定工程实现复杂相对简单可以用一句话概括RLHF 是先学一个奖励模型再用强化学习优化语言模型DPO 是直接用偏好对训练语言模型让它更偏向 chosen 而不是 rejected。DPO 的优势是流程简单。它不需要训练单独的奖励模型也不需要 PPO 采样和复杂强化学习过程。但 DPO 并不是“不要人类偏好”。它仍然需要偏好数据。区别在于RLHF用偏好数据训练奖励模型再优化策略 DPO直接用偏好数据优化策略模型8、DPO 的优势DPO 的优势非常明显。1. 训练流程简单DPO 不需要显式训练奖励模型也不需要 PPO。它的训练过程更接近普通监督学习。这大大降低了工程复杂度。2. 稳定性更好PPO 训练容易受奖励尺度、KL 系数、采样策略、优势估计等因素影响。DPO 则直接在静态偏好数据上优化分类式目标通常更稳定。3. 计算成本更低DPO 不需要在训练过程中反复采样模型回答也不需要单独维护奖励模型。因此训练成本通常更低。4. 更容易复现和使用对于开源社区来说DPO 非常友好。只要有偏好数据集例如prompt chosen response rejected response就可以训练。这也是为什么 DPO 很快成为开源大模型对齐训练中的常用方法。9、DPO 的局限性DPO 虽然简单有效但也有局限。1. 仍然依赖偏好数据质量DPO 不需要奖励模型但需要 chosen / rejected 数据。如果偏好数据质量差DPO 也会学偏。例如chosen 实际并不好 rejected 实际只是风格不同 标注者偏好不一致 数据中存在大量噪声这些都会影响训练效果。2. 对 reference model 依赖较强DPO 中 reference model 很重要。它决定了当前模型优化时的参照基准。如果 reference model 本身很差DPO 的效果也可能受限。通常 DPO 从 SFT 模型出发并使用同一个 SFT 模型作为 reference。3. β 超参数仍然需要调节DPO 比 PPO 简单但不是完全没有超参数。(\beta) 会影响优化强度。如果设置不合适模型可能优化不足或过度偏离。4. 不适合所有偏好结构DPO 主要处理 pairwise preference也就是 chosen / rejected 成对比较。但现实中有些数据是多回答排序、连续评分、复杂多维偏好。如果直接拆成 pairwise 数据可能丢失一部分排序结构信息。5. 可能导致过度优化偏好数据如果偏好数据规模较小或分布单一DPO 可能让模型过度适应这些偏好导致泛化能力下降。例如模型可能变得过于模板化 过于保守 过度迎合某类标注偏好 对未覆盖任务表现变差所以 DPO 简化了 RLHF但没有消除偏好对齐中的所有问题。10、DPO 在大语言模型发展中的意义DPO 的意义不只是提出一个新损失函数。它对大语言模型对齐训练有几个重要影响。1. 它降低了偏好对齐门槛在 DPO 之前完整 RLHF 训练对很多团队来说门槛很高。需要奖励模型、PPO、采样系统和复杂调参。DPO 把这个流程简化成了直接训练语言模型使偏好对齐更容易被开源社区复现。2. 它推动了 preference tuning 普及DPO 之后很多开源模型都会在 SFT 后继续做偏好优化。这让模型不仅会回答还更符合人类偏好。例如回答更简洁 格式更稳定 更少胡编 更符合指令 更偏向 chosen 风格3. 它促进了后续偏好优化方法发展DPO 之后又出现了很多相关方法例如IPO KTO ORPO SimPO RRHF CPO这些方法都在尝试进一步改进 DPO 的不足。例如有的方法不需要 rejected 数据有的方法不用 reference model有的方法把 SFT 和偏好优化合并有的方法改进 loss 形式。可以说DPO 是 RLHF 之后偏好优化路线的重要转折点。