引言
在快速发展的大语言模型 (LLM) 领域,越大并不总是越好——尤其是当涉及到模型回复的长度时。如果你曾与现代聊天机器人互动过,你可能注意到了一个独特的习惯: 它们喜欢喋喋不休。问一个简单的问题,你往往会得到长篇大论。
这种现象被称为冗长 (verbosity) 。 虽然我们希望模型是详尽的,但我们不希望它们混淆“长”与“正确”。
目前,将模型与人类偏好对齐的行业标准是直接偏好优化 (Direct Preference Optimization, DPO) 。 它优雅、稳定,且通常有效。然而,DPO 有一个隐蔽的缺陷: 它受困于一种固有的算法偏差,这种偏差鼓励模型通过生成更长的回复来“作弊”,以最大化其奖励分数。
在这篇文章中,我们将深入探讨一篇引人入胜的论文,题为 “Eliminating Biased Length Reliance of Direct Preference Optimization via Down-Sampled KL Divergence” (通过下采样 KL 散度消除直接偏好优化的有偏长度依赖) 。作者准确指出了 DPO 为何偏好冗长,并提出了一种巧妙、轻量级的解决方案,称为 SamPO (Sampled Preference Optimization,采样偏好优化) 来修复这一问题。
背景: 通往 DPO 之路
要理解解决方案,我们首先需要理解问题所在。我们如何教 LLM 什么是人类喜欢的?
从 RLHF 到 DPO
最初,我们使用基于人类反馈的强化学习 (RLHF) 。 这是一个复杂的多阶段过程:
- 训练一个奖励模型 (Reward Model) 来模仿人类的偏好。
- 使用该奖励模型通过强化学习 (如 PPO) 来训练 LLM。
虽然有效,但 RLHF 计算成本高昂且不稳定。于是 DPO (直接偏好优化) 出现了。DPO 通过完全移除独立的奖励模型简化了这场游戏。取而代之的是,它使用一种数学技巧,直接基于偏好数据 (成对的“选中”和“拒绝”回复) 来优化模型。
隐式奖励
DPO 不会给模型一个像“10 分满分得 8 分”那样的分数。相反,它计算一个隐式奖励 。 这个奖励基于模型生成“选中”回复相对于参考模型 (通常是原始基础模型) 的概率。
DPO 的核心依赖于 Bradley-Terry 模型 , 该模型估计一个回复比另一个回复更好的概率。损失函数如下所示:

在这里,\(\Delta\) 代表选中回复 (\(y_w\)) 和拒绝回复 (\(y_l\)) 之间“隐式奖励”的差值。

这个差距 (\(\Delta\)) 越大,模型就越能学会偏好选中的回复。
核心问题: 算法长度偏差
这正是该论文做出关键贡献的地方。之前的研究假设模型之所以啰嗦,是因为训练数据有偏差 (即人类标注员单纯喜欢更长的答案) 。虽然这也是事实,但作者认为 DPO 本身在数学上就偏向于长度。
分解奖励
为了明白其中的原因,我们需要看看那个隐式奖励究竟是如何计算的。这个奖励本质上是KL 散度 (衡量概率分布差异的一种指标) 在整个文本序列上的总和。
如果我们将方程分解到 Token (词元) 级别,它看起来是这样的:

注意求和符号 (\(\Sigma\)) 。奖励是从 \(t=1\) 到 \(T\) 的每个 Token 的对数概率之和。
这就是问题所在: 如果“选中”的回复 (\(T_w\)) 明显比“拒绝”的回复 (\(T_l\)) 长,那么选中回复的求和项就会更多。它仅仅因为拥有更多的 Token 就累积了更多的值。
- 高估 (Overestimation) : 如果选中回复更长,DPO 会高估其质量,因为奖励总和因长度而膨胀。
- 低估 (Underestimation) : 如果选中回复更短 (即使它简洁且正确) ,DPO 会低估其奖励。
这激励模型生成更长的序列来利用奖励函数的漏洞。
可视化偏差
作者在下图中精彩地展示了这一点。

- 顶部 (a): 看红线和紫线。这些是累积奖励。因为“选中 (Chosen) ”序列更长,红线不断攀升,仅仅因为存在的时间更长就制造了巨大的差距 (奖励) 。
- 左下 (b): 如果你尝试通过平均化来归一化 (DPO-SANorm) ,你会失去 Token 级别的方差细微差别。
- 右下 (c): 这是提出的解决方案 (SamPO) ,我们将在接下来讨论。注意奖励的累积是如何变得更加平衡的。
解决方案: SamPO (下采样 DPO)
为了消除这种长度依赖性,作者引入了 SamPO 。 这个想法很直观: 为了公平地比较两名赛跑者,他们必须跑相同的距离。
如果选中的回复长 100 个 Token,而拒绝的回复长 50 个 Token,我们不应该将 100 个 Token 的总和与 50 个 Token 的总和进行比较。
SamPO 如何工作
SamPO 通过对较长的序列进行下采样 (down-sampling) 来修改损失计算。
- 确定选中回复的长度 (\(T_w\)) 和拒绝回复的长度 (\(T_l\)) 。
- 找到最小长度: \(T_m = \min(T_w, T_l)\)。
- 从两个序列中随机采样 \(T_m\) 个 Token (或者只对较长的那个进行采样以匹配较短的) 。
- 仅使用这些采样后的 Token 计算隐式奖励。
新公式如下所示:

通过确保求和中的项数相同 (\(T_m\)) ,“长度”变量从方程中被移除了。模型不再能简单地通过增加 Token 来增加奖励;它必须提高其生成 Token 的质量 (概率) 。
Top-K 与随机采样
你可能会问: 为什么要选择随机 Token?为什么不选择概率最高的“最佳” Token (Top-K) ?
作者实际上测试了这一点。有趣的是,随机采样效果更好。如下图所示,Top-K 采样 (图 6) 造成的人为差距可能过于激进,而随机采样在修正长度的同时保留了文本的自然分布。

实验与结果
SamPO 真的有效吗?作者在多个模型 (Pythia, Llama3, Tulu2) 和基准测试 (GSM8K, AlpacaEval 等) 上进行了测试。
1. 证明偏差的存在
首先,他们进行了一个“合理性检查”实验。他们将 UltraFeedback 数据集分成两个子集:
- Long (长) : 选中回复较长的样本对。
- Short (短) : 选中回复较短的样本对。
他们在这些子集上训练了一个标准的 DPO 模型。

- “Short”子集 (蓝线) : 当 DPO 在获胜者更短的数据上训练时,奖励崩塌了 (趋势向下) 。DPO 难以学会“短即是好”,因为它的数学机制在与之对抗。
- SamPO 的修复 (表 1) : SamPO 稳定了这一点。即使在“Short”数据集上,SamPO 也取得了不错的平均基准分数 (49.73) ,而标准 DPO 则崩塌了 (40.59) 。
2. 性能比较
作者将 SamPO 与 DPO 以及其他近期方法如 SimPO (使用长度归一化) 和 TDPO 进行了比较。
结果在图 1 中可视化,显示了一个明显的趋势:

SamPO 在各个基准测试中始终优于标准 DPO。例如:
- GSM8K (数学) : SamPO 达到 77.81%,而 DPO 为 75.59%。
- AlpacaEval 2 (通用聊天) : SamPO 达到了 35.14% 的胜率,而 DPO 为 23.2% (使用长度控制评估) 。
3. 冗长性分析
这是最关键的结果。模型停止啰嗦了吗?
下图追踪了在 3 个训练周期 (Epoch) 内,平均输出长度 (Y 轴) 与性能分数 (X 轴) 的关系。

- 粉色三角形 (DPO) : 注意那条急剧向上的轨迹。随着训练的进行,模型变得稍微好了一点,但变得长得多。它正在学会啰嗦。
- 蓝色方块 (Iterative SamPO) : 曲线向右移动 (性能更好) ,但在 Y 轴上保持相对平坦。模型在没有膨胀长度的情况下提高了质量。
4. 综合基准测试
在使用 Llama3-8B 模型进行的详细比较中,SamPO 展示了它可以在简洁与信息量之间保持微妙的平衡。

观察表 2 , 我们可以看到 SimPO (另一种控制长度的方法) 往往会过度减少长度。
- SimPO: 极大地减少了长度 (Length/Token ~375) ,但有时会损害像 GSM8K 这样的推理任务的性能 (72.93) 。
- SamPO: 保持了健康的长度 (Length/Token ~375-377) ,但在 GSM8K 上取得了最高分 (77.81) 。
这表明 SamPO 不仅仅是“削减”文本;它在鼓励模型变得更高效。
5. 其他数据集 (HH-RLHF 和 TL;DR)
作者还在 HH-RLHF (有用且无害) 和 TL;DR (摘要) 数据集上进行了测试。

在 TL;DR (摘要) 任务上,简洁是关键。
- DPO 的胜率为 60.98%。
- Iterative SamPO 跃升至 73.58% 。
这证明了对于需要简洁回答的任务,消除长度偏差是一个巨大的优势。
结论
LLM 中的“冗长”问题不仅仅是训练数据的怪癖;它是我们在 DPO 中计算奖励方式的数学产物。通过对不等长的对数概率进行求和,我们无意中教会了模型“多即是好”。
SamPO 提供了一个优雅的代码级修复方案。通过在损失计算期间将 Token 序列下采样到相同长度,它迫使模型在质量而非数量上进行竞争。
其意义重大:
- 效率: 更短、正确的答案在推理过程中节省了计算成本。
- 用户体验: 用户得到的是直接的回答,而不是啰嗦的文章。
- 对齐: 我们可以将模型与真正的人类偏好对齐,而不仅仅是像长度这样的表面特征。
随着我们迈向更自主、更高效的 AI 智能体,像 SamPO 这样的方法对于确保我们的模型不仅说得更多,而且说得更好至关重要。
](https://deep-paper.org/en/paper/2406.10957/images/cover.png)