直接偏好优化(DPO)
直接偏好优化(DPO)¶
1. DPO 的核心思想是什么?它如何 “绕过” 显式奖励模型?¶
DPO 的核心洞见是:最优奖励函数与最优策略之间存在解析的映射关系。传统 RLHF 分两步:首先在偏好数据上训练一个奖励模型(RM),然后用 PPO 优化一个策略以最大化该 RM 的奖励。DPO 发现,我们可以将这两个步骤合并,直接从偏好数据中提取最优策略,而不需要显式地训练一个独立的奖励模型。其数学基础是:给定一个参考策略 $ \pi_{ref} $,在最大化奖励且受 KL 散度约束的优化问题中,最优策略 $ \pi^{*} $ 满足:
$$ \pi^{*}(y|x)=\frac{1}{Z(x)}\pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) $$
其中 $ Z(x) $ 是配分函数。通过对这个等式取对数并移项,我们可以将奖励函数表示为策略和参考策略的函数:
$$ r(x,y)=\beta\log\frac{\pi^{*}(y|x)}{\pi_{ref}(y|x)}+\beta\log Z(x) $$
将这个形式的奖励代入 Bradley-Terry 偏好模型中,配分函数 $ Z(x) $ 会被抵消。于是,我们得到了一个仅依赖于策略 $ \pi_{\theta} $ 和参考策略 $ \pi_{\text{ref}} $ 的损失函数。DPO 直接优化这个损失函数来更新策略参数 $ \theta $,从而绕过了显式奖励模型的训练和 RL 过程。
“绕过”的实质是:奖励模型所扮演的角色被隐式地内化在策略和参考策略的对数概率比值中。这个比值就是“隐式奖励”。DPO的训练信号直接来自偏好数据,它让chosen回答的隐式奖励高于rejected回答的隐式奖励,而无需一个额外的网络去预测这个奖励。这样,DPO将对齐问题转化为了一个简单的、有监督的对比学习问题,极大地简化了训练流程。
2. 推导 DPO 的损失函数:从 Bradley-Terry 模型和 RL 目标出发,写出最终形式。¶
第一步:约束 RL 目标下的最优策略形式¶
RLHF 的优化目标通常是在最大化奖励的同时,约束策略不偏离参考模型太远:
$$ \max_{\pi}\mathbb{E}{x\sim\mathcal{D},y\sim\pi(\cdot|x)}[r(x,y)]-\beta D(\cdot|x)) $$ }(\pi(\cdot|x)||\pi_{\mathrm{r e f}
这是一个带 KL 惩罚的最大化期望奖励问题。可以证明,该问题的最优解具有如下封闭形式:
$$ \pi^{*}(y|x)=\frac{1}{Z(x)}\pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) $$
其中 $ Z(x)=\sum_{y}\pi_{\mathrm{ref}}(y|x)\exp\left(\frac{1}{\beta}r(x,y)\right) $ 是配分函数,确保概率之和为1。
第二步:从最优策略中解出奖励函数¶
对上述等式取对数并整理,可以得到奖励函数的表达式:
$$ r(x,y)=\beta\log\frac{\pi^{*}(y|x)}{\pi_{\mathrm{ref}}(y|x)}+\beta\log Z(x) $$
这个公式告诉我们:给定任意一个策略 $ \pi $,我们可以通过它对参考模型的 log-ratio 来恢复出它所隐式优化的奖励函数。这正是 DPO 绕过奖励模型的关键。
第三步:代入 Bradley-Terry 偏好模型¶
Bradley-Terry 模型假设,对于一对回答 $ (y_{w}, y_{l}) $,人类偏好 $ y_{w} $ 的概率为:
$$ P(y_{w}\succ y_{l}|x)=\sigma(r(x,y_{w})-r(x,y_{l})) $$
将第二步中由策略 $ \pi_{\theta} $ 恢复出的奖励函数代入上式:
$$ P(y_{w}\succ y_{l}|x)=\sigma\left(\beta\log\frac{\pi_\theta(y_{w}|x)}{\pi_{\mathrm{ref}}(y_{w}|x)}-\beta\log\frac{\pi_\theta(y_{l}|x)}{\pi_{\mathrm{ref}}(y_{l}|x)}\right) $$
注意,两个配分函数项 $ \beta\log Z(x) $ 在相减时完美抵消。这正是 DPO 的巧妙之处。
第四步:写出最大似然损失函数¶
我们希望通过优化参数 $ \theta $来最大化在偏好数据集上的似然。因此,DPO损失函数为负对数似然:
$$ \mathcal{L}{\mathrm{D P O}}(\pi};\pi_{\mathrm{r e f}})=-\mathbb{E{(x,y\right)\right] $$ },y_{l})\sim\mathcal{D}}\left[\log\sigma\left(\beta\log\frac{\pi_{\theta}(y_{w}|x)}{\pi_{\mathrm{r e f}}(y_{w}|x)}-\beta\log\frac{\pi_{\theta}(y_{l}|x)}{\pi_{\mathrm{r e f}}(y_{l}|x)
这就是 DPO 的最终损失函数形式。它完全不再包含奖励模型,只依赖于策略 $ \pi_{\theta} $ 和一个冻结的参考策略 $ \pi_{ref} $。训练时,我们直接最小化这个损失,让 chosen 回答的相对对数概率高于 rejected 回答。
3. DPO 损失函数中的对数概率比和 $ \beta $ 参数分别代表什么含义?¶
在 DPO 的损失函数中,核心项是对数概率比:
$$ \hat{r}(x,y)=\beta\log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)} $$
这个表达式具有深刻的含义。
对数概率比——隐式奖励¶
它直接来自于最优策略与奖励函数的解析映射。因此,它可以被解释为由策略 $ \pi_{\theta} $ 为回答 $ y $ 分配的“隐式奖励”。当我们比较 chosen 回答 $ y_w $ 和 rejected 回答 $ y_l $ 时,损失函数试图让 $ \hat{r}(x, y_w) > \hat{r}(x, y_l) $。也就是说,模型被训练去提高它自己相对于参考模型对好回答的“偏好”,同时降低对坏回答的“偏好”。这里完全没有一个独立的奖励模型;策略本身通过对参考模型的偏离程度,直接编码了它对回答质量的判断。
β参数——控制偏离强度的温度系数¶
β 在 DPO 中扮演的角色与它在 RLHF 约束优化目标中的角色完全一致。它控制着策略 $ \pi_{\theta} $ 被允许偏离参考模型 $ \pi_{ref} $ 的程度。
当 $ \beta $ 很小时,最优策略 $ \pi^{*} $ 的表达式中的指数项 $ \exp(r/\beta) $ 会被放大,这意味着策略可以为了追求高奖励而大幅偏离参考模型。在 DPO 损失中,小的 $ \beta $ 会放大隐式奖励的差距,使损失对 chosen 和 rejected 的区分更加“严格”,梯度更强,优化更激进,但也增大了过拟合和模式崩塌的风险。
当 $ \beta $很大时,指数项被压缩,策略被强制靠近参考模型。损失函数对隐式奖励差异的敏感度降低,优化更保守,策略的变化更小,能更好地保持原始语言模型的多样性和流畅性,但可能不足以充分对齐偏好。
因此, $ \beta $ 是一个关键的权衡参数:它平衡了对齐的强度与分布保持。这与 PPO 中 KL 惩罚系数的作用完全相同,只不过在 DPO 中它是内嵌在损失函数里,而不是作为一个独立的强化学习惩罚项。
4. 为什么 DPO 可以看作是一种“直接在偏好数据上的监督学习”?它和监督学习有何本质不同?¶
将 DPO 视作一种“直接在偏好数据上的监督学习”是合理的,因为它确实具备监督学习的许多特征:它在一个固定的、离线的偏好数据集上进行训练,直接优化一个损失函数,而不需要像强化学习那样与环境(或奖励模型)进行在线交互采样。
相似点:¶
无需在线交互:DPO的训练只需要偏好数据,不需要在训练过程中与奖励模型交互生成新回答。这使得它非常稳定,类似于标准的微调。
标准的梯度下降:DPO的损失函数是连续可微的,可以直接使用任何现代优化器(如Adam)进行训练,不需要PPO中的价值函数、优势估计、重要性采样等复杂机制。
本质不同——优化目标的根本差异:¶
尽管训练方式像监督学习,但 DPO 的优化目标与监督学习有本质区别。
-
监督学习(如 SFT)的目标是最大化目标 token 的似然,即让模型输出的条件概率分布 $ P_{\theta}(y|x) $ 尽可能接近训练数据(如人类写的答案)的经验分布。它是一个无条件的模仿。
-
DPO 的目标是最大化偏好概率,即 $ P(y_w \succ y_l) $。它不要求模型完全模仿某个具体的“标准答案”,而是要求模型在 chosen 和 rejected 之间形成正确的相对偏好排序。DPO 优化的是一个对比目标,它教给模型的是“A 比 B 好”,而不是“你必须要说 A”。
这种差异导致了行为上的巨大不同:¶
- 超越标注:SFT 永远无法超越人类标注员写的答案质量。而 DPO 训练出的策略有可能生成比数据中任何 chosen 回答都更好的输出,因为它学到的是一种价值判断能力,而非单纯的模仿。
保留多样性:在优化偏好时,模型可以在满足“比 rejected 好”的广阔空间中自由寻找最优解,只要不偏离参考模型太远。这保留了语言生成的多样性,而 SFT 往往会促使模型向单一、平均化的答案坍缩。
因此,DPO 是形式上的监督学习,内核上的对比式偏好优化,它兼具了监督学习的稳定性和强化学习的目标导向性。
5. 比较 DPO 和 RLHF+PPO 的流程:哪个更简单?哪个更稳定?哪个效果更好?¶
流程复杂度:DPO 远胜于 RLHF+PPO¶
• RLHF 需要四阶段流程:预训练 → SFT → RM 训练 → PPO。涉及四个大模型(Actor, Ref, Critic, RM)的加载和协同,工程实现极其复杂。
· DPO 仅需:预训练 → SFT → DPO。它只有两个模型(策略和参考),且参考冻结,训练只需一个标准的监督学习循环。DPO 的流程被简化到了极致,几乎没有额外的工程负担。
训练稳定性:DPO 优于 RLHF+PPO¶
DPO的稳定性源自其监督学习本质。损失函数是一个凸的、有下界的交叉熵式目标。梯度直接来自偏好标签,没有引入RL中的高方差、离线策略修正和信用分配难题。训练极为平稳,不易出现奖励黑客、语言崩溃等RLHF的典型灾难。
• RLHF+PPO 是一个在线RL过程,极度依赖众多超参数(学习率、 $ \beta $、裁剪率、GAE $ \lambda $等)的精妙平衡,任何一个环节的失调都可能导致训练崩溃。DPO 的超参数少得多,调参门槛极低。
最终效果:目前在理论分析上存在分歧,实践中PPO略占上风¶
这是一个有争论的问题。
DPO 的理论优势:DPO 直接将偏好数据映射为最优策略,避免了 RLHF 中由有限数据训练的不完美奖励模型所带来的误差放大问题。它更“直接”,因此在小数据集或静态数据上,DPO 往往能取得很好的效果,甚至优于同等数据量的 RLHF。
· PPO 的实践优势:PPO 是一个在线过程,它能在训练中不断探索、生成新的回答,并从奖励模型获得实时反馈。这使得 PPO 能发现并纠正那些 DPO 数据中从未出现过的错误模式,理论上具有更强的分布外泛化能力。在超大规模模型和超大数据集的条件下,经过精心调参的 PPO 往往能达到更高的性能天花板,ChatGPT 的成功便是例证。
总结:DPO 是简单与稳定的极致追求,对于快速迭代、预算有限或数据静态的场景是理想选择。PPO 虽然昂贵且不稳定,但在大规模、高性能要求的工业级对齐中仍展现出更强的潜力上限。
6. DPO 是否还需要 SFT 阶段?如果需要,SFT 和 DPO 的顺序是怎样的?¶
绝对需要 SFT 阶段。没有 SFT 的 DPO 几乎无法成功,原因和 RLHF 需要 SFT 一样。
为什么需要 SFT?¶
- 提供有意义的参考策略:DPO 需要一个参考模型 $ \pi_{ref} $。这个参考模型必须本身就是一个合理的、能生成流畅文本的语言模型。基座模型虽然在语言上很强,但它没有经过指令微调,不具备遵循用户意图和进行对话的能力。如果用基座模型作为参考,DPO 优化出的策略将被锚定在“续写文本”的范式上,而非“对话回答”。SFT 模型则是经过指令微调的,它定义了“好的对话回答”的基本范式,为 DPO 提供了正确的初始分布。
- 初始化策略到良好区域:DPO 的优化是在一个极其高维的动作空间中进行的。如果不从一个好的起点开始,DPO 损失函数的梯度将淹没在基座模型那广阔无垠的输出噪声中。SFT 已经将策略参数移动到了一个能生成有意义回复的局部最优附近,DPO 只需在这个基础上进行精细的偏好对齐。
SFT 与 DPO 的顺序:¶
标准顺序是:预训练 → SFT → DPO。
• SFT 与 DPO 是严格的前后顺序。SFT 的输出(即 $ \pi_{SFT} $)被用作 DPO 的初始策略 $ \pi_{\theta} $ 和冻结的参考策略 $ \pi_{ref} $。在 DPO 训练开始时,策略和参考策略是同一个模型,隐式奖励 $ \hat{r}(x, y) $ 处处为0。随着 DPO 训练的进行,策略逐渐偏离参考策略,建立起非零的隐式奖励,从而实现偏好对齐。
是否可以跳过 SFT,直接从预训练到 DPO?¶
理论上有探索,但实践中效果不佳。这相当于要求DPO同时完成指令遵循和对齐两个任务,往往导致两个目标都完成不好,最终模型的语言能力和对话能力都难以令人满意。因此,将SFT作为独立的前置阶段,是目前实现高质量对齐的标准实践。
7. DPO 是否需要一个参考模型?它的参考模型是否参与梯度更新?¶
DPO 绝对需要一个参考模型 $ \pi_{ref} $。它是 DPO 损失函数不可或缺的组成部分,其作用是在计算隐式奖励时提供基准。
为什么需要参考模型?¶
DPO 的损失函数依赖于对数概率比 $ \log \frac{\pi_\theta}{\pi_{\text{ref}}} $。如果没有参考模型,我们就只有一个孤立的策略对数概率,无法构造出有意义的优化目标。仅仅最大化 $ \log \pi_\theta(y_w|x) $ 会退化为普通的 SFT,无法实现对比学习;而直接最大化差异 $ \log \pi_\theta(y_w|x) - \log \pi_\theta(y_l|x) $ 虽然看似合理,但缺乏正则化,会导致策略迅速崩塌到某些极端解。参考模型为策略的“偏离”提供了一个归一化的基点,使得 DPO 的优化目标与带KL约束的RLHF在数学上等价。
参考模型是否参与梯度更新?¶
绝对不参与。DPO的参考模型必须是冻结的、不可训练的。这是DPO的核心设计之一。
数学上的必要性:参考模型 $ \pi_{ref} $ 是作为一个固定锚点存在于损失函数中的。如果它也更新,那么隐式奖励 $ \hat{r} = \beta \log \frac{\pi_0}{\pi_{ref}} $ 中的分子分母都在变,整个优化目标就失去了固定的参照系,我们无法保证优化过程与原始RLHF目标的等价性。策略会与参考模型一起漂移,导致训练崩溃或效果退化。
实践上的稳定性:冻结参考模型确保了DPO的超稳定特性。我们只需维护一个静态的SFT模型副本,在训练中永远不更新它,就能保证DPO的训练始终在一个安全的、可预测的轨道上进行。
8. DPO 的梯度分析:请写出 DPO 损失关于策略参数 $ \theta $ 的梯度表达式,并说明其含义。¶
设 DPO 损失函数为:
$$ \mathcal{L}=-\mathbb{E}{(x,y[\log\sigma(u)] $$ },y_{l})
其中 $ u = \beta \log \frac{\pi_{\theta}(y_{w}|x)}{\pi_{\mathrm{ref}}(y_{w}|x)} - \beta \log \frac{\pi_{\theta}(y_{l}|x)}{\pi_{\mathrm{ref}}(y_{l}|x)} $。
对参数 $ \theta $求梯度(忽略期望和常数 $ \beta $):
$$ \nabla_{\theta}\mathcal{L}=-\beta\cdot\mathbb{E}\left[\sigma(-u)\cdot(\nabla_{\theta}\log\pi_{\theta}(y_{w}|x)-\nabla_{\theta}\log\pi_{\theta}(y_{l}|x))\right] $$
含义解释:
这个梯度的形式极其优雅,与策略梯度的思想一脉相承,但更加直接。
权重因子 $ \sigma(-u) $: $ u = \hat{r}(x, y_w) - \hat{r}(x, y_l) $ 是隐式奖励的差值。当模型已经能正确判断偏好(即 $ u $ 足够大且为正)时, $ \sigma(-u) $ 接近 0,梯度接近于 0。这说明模型在已经排序正确的样本上不再更新,避免了过拟合。当模型判断错误 $ (u < 0) $ 时, $ \sigma(-u) > 0.5 $,梯度权重变大,模型会被强烈纠正。当模型不确定 $ (u \approx 0) $ 时, $ \sigma(-u) \approx 0.5 $,提供中等强度的梯度。这是一个自适应的、基于模型当前判断力的“困难样本挖掘”机制。
- 梯度方向 $ \nabla_{\theta} \log \pi_{\theta}(y_{w}|x) - \nabla_{\theta} \log \pi_{\theta}(y_{l}|x) $:这个差值告诉模型:沿着增加 chosen 回答 $ y_{w} $ 的对数概率的方向移动,并沿着减少 rejected 回答 $ y_{l} $ 的对数概率的方向移动。每个 token 在序列中的梯度贡献都会受到这个总体方向的影响。DPO 因此巧妙地将一个标量的偏好信号,转化为了对序列中所有 token 的概率调整指令。
整个梯度更新的效果是,它会提升 chosen 回答的整体生成概率,同时降低 rejected 回答的整体生成概率,并且这种更新的强度由模型当前对这两个回答的“奖励差距”决定。
9. 从梯度角度解释,DPO 如何增大 chosen 概率,同时降低 rejected 概率?¶
DPO 的梯度向量直接指明了参数更新的方向,完美地实现了“奖励好回答,惩罚坏回答”这一目标。
梯度向量的分解:¶
DPO 梯度是两项的加权差:
$$ \nabla_{\theta}\mathcal{L}\propto\sum_{t}\left(\nabla_{\theta}\operatorname{l o g}\pi_{\theta}(y_{w,t}|...)\right)-\nabla_{\theta}\operatorname{l o g}\pi_{\theta}(y_{l,t}|...)) $$
(这里简化为序列级别,实际是 token 级别梯度的序列和)
具体作用机制:¶
-
对 chosen 回答 $ y_w $ 的影响:梯度中包含项 $ + \nabla_\theta \log \pi_\theta(y_{w,t}|...) $。在梯度下降中,我们沿着负梯度方向更新参数,因此这项会增加 $ \log \pi_\theta(y_{w,t}|...) $,即提高模型在生成 chosen 回答的每一个 token 时的概率。这使得模型在遇到类似状态时,更有可能输出和 $ y_w $ 相似的 token。
-
对 rejected 回答 \(y_l\) 的影响:梯度中包含项 \(-\nabla_\theta \log \pi_\theta(y_{l,t}|...)\)。更新时,负负得正,实际效果是降低 \(\log \pi_\theta(y_{l,t}|...)\),即降低模型在生成 rejected 回答的每一个 token 时的概率。这使得模型在未来更不可能输出那些导致糟糕评价的 token。
-
加权的联合更新:这两部分不是孤立的,而是被同一个权重因子 $ \sigma(-u) $ 一起缩放。这意味着,对于一个偏好对,模型会同时学习“什么是好的”(模仿)和“什么是坏的”(避免)。而且,这两种学习是相互联系的:chosen 和 rejected 回答中相同的 token 部分,其梯度会相互抵消,模型主要学习的是它们差异部分。这迫使模型去关注那些导致好坏之分的关键 token,而不是对所有 token 进行无差别的奖惩。
因此,DPO 的梯度更新在数学上等价于同时进行正样本强化和负样本抑制,精准地调整了策略,使其在人类偏好的指引下重塑输出分布。
10. DPO 中 $ \beta $ 参数的作用是什么?和 PPO 中的 KL 系数有什么关系?¶
DPO 中的 $ \beta $ 与 PPO 中的 KL 惩罚系数在数学上同源,在作用上等效。
数学同源性:
在 RLHF 的约束优化目标中, $ \beta $ 是最大化奖励和最小化 KL 散度之间的拉格朗日乘子。DPO 是通过求解该约束优化问题的最优解推导而来的。在推导过程中,这个 $ \beta $ 被原封不动地保留在了隐式奖励的表达式中: $ \hat{r} = \beta \log \frac{\pi_{\theta}}{\pi_{\text{ref}}} $。因此,DPO 中的 $ \beta $ 就是那个 RL 目标中的 KL 惩罚系数。它们本质上是同一个东西,只是 DPO 将它“折叠”进了损失函数,而不是作为一个独立的强化学习奖励惩罚项。
作用上的等效性:¶
在 PPO 中, $ \beta $ 控制着每一步 token 级 KL 惩罚的强度,从而限制策略的探索范围。
在 DPO 中, $ \beta $ 直接控制着损失函数对隐式奖励差距 $ u = \beta(\log \text{ratio}_w - \log \text{ratio}_l) $ 的敏感度。
β越大,DPO损失对概率比偏离1越敏感,等价于PPO中对策略偏离参考模型的惩罚越重。此时DPO的训练更保守,策略变化小,更贴近 $ \pi_{ref} $。
β越小,DPO损失越能容忍大的概率比,等价于PPO中放松了KL约束。此时DPO训练更激进,策略会更大幅度地改变概率分布去适应偏好数据,但也面临更高的过拟合和模式崩塌风险。
关键区别:PPO的 $ \beta $作用于每一步的即时奖励,而DPO的 $ \beta $直接体现在最终损失函数的尺度上。但它们的核心作用是相同的:作为策略偏离程度和优化激进度的调控旋钮。在实践中,DPO的 $ \beta $取值范围通常在0.1到1.0之间,这与PPO中KL系数的典型范围也高度一致。
11. 如果偏好数据集较小,DPO 容易过拟合吗?为什么?¶
是的,DPO 在小数据集上非常容易过拟合,而且其过拟合的表现形式极为有害。这是由于 DPO 的优化特性和语言模型的灵活性共同决定的。
过拟合的根源:¶
-
高维空间的强拟合能力:现代大语言模型拥有数十亿参数,表达能力极强。在一个仅含几千或几万条偏好数据的有限数据集上,模型几乎可以“记住”每个样本的偏好。DPO 的损失是要求 chosen 的隐式奖励高于 rejected。由于模型容量足够,它可以轻松地通过大幅改变 chosen 和 rejected 中特定 token 的概率来实现完美排序,而不需要学到通用的、可泛化的偏好模式。
-
隐式奖励的退化:过拟合时,模型可能会学会给数据集中出现的 chosen 回答中的罕见 token 组合以极高的概率,而对 rejected 中的 token 给予极低的概率。这会导致隐式奖励 $ \hat{r} = \beta \log \frac{\pi_{\theta}}{\pi_{\text{ref}}} $ 出现极端值,模型对这两类回答的区分度在训练集上极其显著,但对未见过的回答则完全无法正确评价。
- 语言崩塌:过拟合最直接的后果是熵崩塌和语言能力丧失。模型为了最大化与参考模型的差异,可能会将概率质量全部集中在训练集中 chosen 回答的那些特定措辞、特定模板上,彻底丧失语言表达的多样性。它变成了一个只会复述训练数据的“复读机”。
与小数据集上 SFT 过拟合的对比:¶
SFT 在小数据集上过拟合,通常表现为输出文本变得单一、泛化能力差。但 DPO 的过拟合更加危险,因为它的优化目标是“对比”,这更容易鼓励模型走向极端。一个 SFT 模型即使过拟合,也至少还在模仿“人类语言”的分布内;而 DPO 过拟合可能促使模型去学习一些反人类的、但能最大化与参考模型差异的畸形表达,以在训练数据上获得巨大优势。
缓解措施:¶
使用适中的 $ \beta $:不要设置过小的 $ \beta $,避免过度激进。
数据增强与多样化:使用更大、更多样化的偏好数据集。
·早停(Early Stopping):基于验证集的奖励或与黄金标准的吻合度进行早停。
· 混合训练:在 DPO 损失中加入一个 SFT 损失的项(如在 chosen 上的 LM 损失),以锚定语言能力。
12. DPO 能否处理多级标注(如 Likert 1-5)?如果可以,如何扩展?¶
标准的 DPO 是针对二元偏好(chosen vs rejected)设计的,但完全可以扩展来处理多级评分,以获得更细粒度的对齐效果。
挑战:Likert 评分提供了比二元选择更丰富的信息。例如,一个评分 5 的回答绝对优于评分 1 的回答,而评分 4 和评分 5 之间的差距可能很小。如何将这些不同程度的偏好强度编码进 DPO 的框架?
扩展方案:¶
方案一:基于评分差的加权DPO¶
为每个偏好对分配一个基于评分差的权重 $ w = f(score_w - score_l) $。例如,评分差越大,权重越高。修改后的损失为:
$$ \mathcal{L}=-w\cdot\log\sigma(\beta\log\frac{\pi_{\theta}(y_{w})}{\pi_{\mathrm{r e f}}(y_{w})}-\beta\log\frac{\pi_{\theta}(y_{l})}{\pi_{\mathrm{r e f}}(y_{l})}) $$
这在概念上简单,但没有充分利用评分的绝对信息。
方案二:基于 Bradley-Terry 的扩展——多重比较¶
可以将评分转化为一系列二元比较。例如,评分 5 vs 4, 5 vs 3, 4 vs 3 等。也可以建模为 Plackett-Luce 模型,处理完整排序。但最符合 DPO 精神的是将其视为一个回归问题。
方案三:评分作为隐式奖励的回归目标¶
这是最直接且信息利用率最高的方法。在 DPO 的推导中,我们得到了隐式奖励 $ \hat{r}{\theta}(x,y) = \beta \log \frac{\pi $。我们可以直接要求这个隐式奖励去拟合人类的绝对评分(经过适当归一化)。损失函数可以是 MSE:}(y|x)}{\pi_{\mathrm{ref}}(y|x)
$$ \mathcal{L}{\mathrm{M S E}}=(\hat{r} $$ }(x,y)-\mathrm{n o r m a l i z e d_{h u m a n_{s} c o r e})^{2
这可以作为一个辅助损失,与DPO的对比损失一起使用。或者,我们可以使用一个hinge loss来要求评分差距大的回答之间隐式奖励差距也大。
方案四:分位回归或期望¶
如果评分代表了用户满意度的期望,我们可以训练模型去最大化这个期望值。
实践中的选择:最常见的做法是将多级评分转化为带权重的二元偏好对(方案一),因为它实现最简单,且与标准DPO代码兼容。但若追求更精确的对齐,将隐式奖励回归到绝对评分(方案三)是更有潜力的方向。
13. 什么是“对齐与分布的权衡”?DPO 在分布外(OOD)偏好数据上表现如何?¶
“对齐与分布的权衡”是指在RLHF或DPO中,一个不可避免的根本矛盾:你越想将模型对齐到特定的人类偏好(提高奖励),就越需要改变模型原始的、基于海量数据预训练的概率分布,从而导致模型在语言流畅性、多样性和世界知识等方面的性能下降。这是一个典型的帕累托权衡。
对齐:意味着模型输出要符合人类的价值观和意图,这通常要求模型去生成某种特定风格、特定内容、甚至特定格式的文本。
分布:指的是模型从预训练和 SFT 中学到的、极其丰富的通用语言分布。它代表了模型的综合语言能力。
两者往往冲突。一个完美的对齐模型可能为了安全而拒绝回答很多问题(丧失有用性),或者为了迎合偏好而生成千篇一律的模板化回复(丧失多样性)。而一个完全保持原始分布的模型,则可能输出不安全或不符合人类期望的内容。
DPO 在 OOD 偏好数据上的表现:¶
DPO 对 OOD 问题非常敏感且脆弱。这里的 OOD 指偏好数据中没有覆盖到的 prompt 或回答类型。
- 完全依赖静态数据:DPO的训练完全基于固定的离线数据集。如果测试时的 prompt 分布与训练时的 prompt 分布不同,DPO 模型的表现会急剧下降,因为它没有在那些 OOD prompt 上学习过如何平衡“对齐”与“分布”。
过拟合导致的极端 OOD 行为:由于 DPO 倾向于在训练数据上追求极致的排序正确率,它可能在 OOD 数据上展现出极端的、不可预测的行为。例如,它可能对一个在训练集中从未见过的风格的 prompt,要么给出极其保守的万能回复,要么因为某个词触发了它学到的某个强烈偏好而给出一个怪异答案。
缺乏探索的恶果:与PPO不同,DPO没有在线探索机制。它不会在训练中主动去生成那些OOD的回答,并请求反馈。因此,对于这些区域,它的隐式奖励函数是完全未被定义的,可能极不准确。
因此,解决 OOD 问题是 DPO 的一个核心挑战。常用的缓解手段包括:使用大规模、高覆盖率的偏好数据集;结合在线策略采样进行迭代式 DPO;以及在 DPO 损失中加入更强的正则化(如更大的 $ \beta $)来约束策略不要偏离太远,从而间接提高 OOD 鲁棒性。
14. 为什么 DPO 有时会在标准基准测试上得分低于 PPO?可能存在什么根本局限性?¶
DPO 在某些基准测试(尤其是需要强推理或复杂指令遵循的任务)上不及 PPO,根源在于两者优化范式的根本差异:DPO 是静态离线学习,PPO 是动态在线学习。
根本局限性分析:¶
- 缺乏在线探索与“自我纠正”能力:这是最核心的差异。PPO 是一个在线过程,它会用当前策略不断生成新的回答,并从奖励模型获得实时反馈。这使得 PPO 能够发现并修正 DPO 训练数据中从未出现过的错误模式。例如,DPO 数据中可能没有包含“模型生成了冗长但空洞的回复,但仍被选为 chosen”这种情况。
况,DPO 就学不会惩罚冗长。而 PPO 在在线生成中会偶然产生这种回答,并因为其实际质量不高而得到奖励模型的低分(如果 RM 足够好),从而学会避免。PPO 在不断地“试错”中进化,而 DPO 只能“纸上谈兵”。
-
信用分配更粗粒度:DPO的损失函数对整个序列进行操作,它通过chosen和rejected回答的整体对数概率之差来给出梯度。这种粗粒度的信号可能不足以精确指导token级别的优化。相比之下,PPO通过Critic和GAE,能为序列中的每个token计算独立的优势函数,实现细粒度的逐token信用分配。这在长序列生成和复杂推理中尤为重要。
-
对奖励模型分布外问题的脆弱性:虽然 DPO 绕过了显式 RM,但它的训练数据仍然是从一个静态的 SFT 模型的分布中采样的。当 DPO 训练后的策略偏离了这个初始分布时,其隐式奖励 $ \hat{r} $ 的可靠性就会下降。而 PPO 在每次迭代中都会用当前策略重新采样,其奖励模型的训练(或隐式奖励的更新)始终与策略的当前分布保持同步,因此对分布漂移具有更强的适应性。
-
容易陷入局部最优:DPO 通过梯度下降在静态数据上直接优化到一个满足偏好排序的局部最优点。由于没有探索噪声和在线反馈,它可能被困在一个“足够好”但并非最优的平坦区域。PPO 的随机探索和与环境(RM)的交互,使其更有可能跨越一些小障碍,找到更优的策略峰。
总结:DPO 在稳定性和效率上胜出,但在能力天花板上可能受限。它像一个只靠题库学习的学生,可以考得很好,但遇到完全陌生的题型可能就束手无策。PPO 则像一个在实战中不断成长的学生,虽然学习过程更痛苦,但往往能发展出更深刻的解题能力。
15. DPO 训练时,两个对比回答都来自同一模型吗?如果来自不同模型,会有什么影响?¶
最佳实践是:对比回答应尽可能来自同一个参考模型或同一能力的模型,最好是 SFT 模型本身的不同采样。
为什么?——控制变量,避免捷径学习¶
DPO 的核心目标是让策略学会区分内容的相对质量,而不是学会区分模型的身份或风格。如果 chosen 回答总是来自强大的 GPT-4,而 rejected 回答总是来自弱小的 SFT 模型,DPO 会迅速学会识别这种系统性差异,并将其作为排序的“捷径”。具体后果包括:
- 学习到表面风格而非质量:DPO 可能会简单地学会给所有看起来像 GPT-4 生成的(如更长、用词更华丽、结构更复杂)回答打高分,而完全忽略内容本身的正确性与有用性。
-
策略趋同与多样性丧失:训练出的策略将疯狂地向强模型(如 GPT-4)的风格靠拢,变成一个“低仿版GPT-4”,丧失自己原有的语言特色和多样性。这本质上是在做模型蒸馏,而非偏好对齐。
-
隐式奖励的尺度扭曲:不同模型生成相同质量回答的概率不同。因此, $ \log\text{ratio}\log\frac{\pi_\theta}{\pi_{\text{ref}}} $ 对于来自强模型的回答天然会很高,对于弱模型的回答天然很低。这给隐式奖励 $ \hat{r} $ 引入了一个与质量无关的、由模型能力差异造成的偏差。
正确做法:¶
同源同参采样:所有对比回答都应由同一个参考模型 $ \pi_{ref} $(即 SFT 模型)生成,仅通过不同的随机种子或采样温度来制造质量差异。
如果必须混合模型,务必平衡:如果确实需要使用来自多个模型的数据,必须确保每个模型生成的回答在 chosen 和 rejected 中的比例大致相当,以消除模型身份带来的统计偏差。
使用更强的模型作为评判员:一个更好的实践是,用弱模型(SFT)生成多个回答,然后让更强的模型(如GPT-4)来评判并给出偏好标签。这样,偏好标签的质量更高,但对比的双方仍来自同一分布,避免了上述捷径学习。
总之,DPO偏好数据的构造必须严格遵循单变量原则:确保两个对比回答的唯一系统性差异,就是我们希望模型学会的那个“质量差异”。
16. 如何在 DPO 中加入“安全”信号?需要修改损失函数吗?¶
将“安全”信号加入 DPO 是对齐的关键环节,可以通过多维度偏好融合和损失函数改造来实现,并非必须修改损失函数,但修改后会更强大。
方案一:数据层面的融合——无需修改损失函数¶
这是最简单的方式。在构建偏好数据时,标注指南融入安全考量。例如:
Chosen:既有用又安全的回答。
· Rejected:有用但不安全,或安全但无用,或既无用又不安全的回答。
通过让标注员在比较时综合权衡有用性和安全性,最终的偏好标签就已经编码了安全信号。DPO模型会从这些数据中隐式地学到“安全”是一种好的属性。这种做法的缺点是:权衡的尺度(到底多安全才算够)是模糊的,且由标注员主观决定。
方案二:损失函数层面的融合——多维度DPO¶
我们可以像训练多维奖励模型一样,为安全性和有用性分别构造偏好数据,然后扩展DPO损失函数。一种做法是引入条件偏好:
• 拥有两个数据集:有用性偏好集 $ D_{helpful} $ 和安全性偏好集 $ D_{safe} $。
修改损失函数为两个损失的加权和:
$$ \mathcal{L}=\mathcal{L}{\mathrm{D P O}}(\mathcal{D}}})+\lambda\cdot\mathcal{L{\mathrm{D P O}}(\mathcal{D}) $$ }
其中 $ \lambda $控制安全性的相对重要性。
方案三:对隐式奖励的约束——修改损失函数¶
我们可以利用隐式奖励 $ \hat{r}(x, y) = \beta \log \frac{\pi_\theta}{\pi_{\text{ref}}} $ 来直接施加安全约束。如果我们有一批被标注员标记为“绝对有害”的回答 $ y_{\text{harmful}} $,我们可以要求模型给这些回答的隐式奖励必须低于某个阈值。这可以通过添加一个 hinge loss 来实现:
$$ \mathcal{L}{\mathrm{safety}}=\max(0,\hat{r}(x,y)-\tau) $$ }
这个损失项迫使模型主动降低这些有害回答的生成概率,将它们推到概率分布的低谷。这与DPO原始损失结合,可以实现更硬性的安全对齐。
方案四:基于规则的惩罚信号¶
类似 RLAIF 中的宪法式 AI,我们可以在 DPO 中引入基于规则的安全批评。用 AI 评判员根据安全准则给出 rejected 标签,然后直接用这些数据训练 DPO。这是在数据层面的改进。
结论:最简单有效的方法是从数据标注指南入手,让偏好标签直接体现安全权衡。对于更严苛的安全要求,可以通过加权多任务损失或对隐式奖励添加约束来显式地、更强力地注入安全信号。不需要从根本上修改DPO损失,只需要在其上进行针对性的扩展。