DPO:从偏好比较直接训练策略#
TL;DR#
本页内容8 个部分
1. 偏好数据的直接策略优化#
假设同一道题有两个回答,数据标签指出其中一个被偏好,但没有提供奖励分数。怎样利用这种成对比较更新语言模型?
一种做法是先用偏好训练奖励模型,再用强化学习提高奖励。DPO 通过奖励与最优策略的关系,直接用成对偏好标签训练策略,省去单独的奖励模型和在线采样更新循环。
2. 一对回答的偏好概率与 loss#
DPO(Direct Preference Optimization,直接偏好优化)将回答对的偏好预测写成策略概率的函数。先计算模型赋予观测标签的概率,再由负对数似然得到训练 loss。[1]
固定问题 的一对回答:标签偏好 ,另一条记为 ,下标分别表示 winner 和 loser。冻结参考策略 ,正在训练的策略为 ,取 调节偏好分差的尺度。对每条回答,先计算 current/reference 对数概率比。用被偏好回答的 log-ratio 减去另一条回答的 log-ratio,再乘以 ,将结果记为偏好分差 。
用 sigmoid 函数 将分差转成预测偏好概率,单对 loss 为 。这个分差来自 KL 正则奖励目标中的奖励—策略对应关系。
2.1 一对回答的偏好概率与 loss 计算#
下面用这一对回答完成计算。所有概率均为手算设定,不是模型实验。固定一道题,只有三个可能回答,其中标签为 ,第三个回答记为 。取 :
| 回答 | Reference 概率 | Current 概率 | Current / reference | Log-ratio |
|---|---|---|---|---|
两列回答概率分别归一化为 。训练只比较前两个回答,偏好分差为 。因此模型预测的偏好概率为 ,这一对的 loss 为 。
如果 current 还等于 reference,两项 log-ratio 都为零,偏好概率就是 ,loss 为 。现在 loss 更低,说明模型相对 reference 赋予观测偏好标签更高的概率。
这里的 是“这对回答中选中 ”的预测偏好概率,不是生成 的概率;后者在表中是 。
2.2 单个偏好对的更新方向与梯度计算#
固定一条偏好对,其 loss 为 。先对分差求导,;再对策略参数求导:
梯度下降沿着“提高 winner 的 log 概率、降低 loser 的 log 概率”的方向更新。系数 决定这一对的权重:固定 时,模型赋予观测偏好标签的概率越低,该偏好对的梯度系数越大;概率越高,梯度系数越小。
这描述的是本对样本提供的梯度方向。共享参数、多条样本共同更新时,不能保证每个 winner 的实际概率都单独上升。[1]
本例的梯度权重为 。
为计算这三个回答的参数梯度,本例将策略参数设为三个归一化前分数(logits),再通过 softmax 得到回答概率。记当前概率向量为 ,则 ,,其中 是对应位置的单位向量。
两者相减时 抵消,所以 。一次梯度下降会提高 winner 的 logit、降低 loser 的 logit,随后由 softmax 重新归一化。
3. 从偏好模型推导策略 loss#
上述分差利用了奖励与最优策略的对应关系:给定奖励和 reference,带 KL 正则的最优策略可以解析写出。反过来,最优策略相对 reference 的 log 概率比可以表示隐式奖励;同题回答的奖励相减时,归一化常数抵消。
3.1 偏好数据与偏好模型#
把这些偏好对组成的数据集记为 ,每条数据是 。标签只说明 在这次比较中被偏好,不提供两条回答的奖励差。
用 表示潜在奖励。Bradley–Terry 偏好模型假设,奖励差决定一个回答被选中的概率:
两条回答的奖励相同时,偏好概率为 ; 越大,模型预测 被偏好的概率越高。这是对偏好如何产生的建模假设。[1]
3.2 KL 正则奖励目标及其最优策略#
固定问题 ,令 reference 策略 固定,KL 强度 。先假设奖励 已知,考虑最大化:
这里对所有回答分布优化,不先限制在某个神经网络内。假设只在 reference 的支持上分配概率,相关期望有限,且归一化常数 有限。
定义 。由其 log 概率可得 。代回目标:
第一项与待选策略 无关,第二项至多为零。因此 取得最大值。高奖励回答在 reference 概率的基础上,乘上更大的指数权重。 这也说明了奖励与最优策略之间的对应关系。[1]
3.3 代入奖励差,得到偏好 loss#
同一道题的两个回答共享 。将两条回答的隐式奖励表达式相减,归一化项消失:
现在用待训练策略 代替未知的 ,将右侧记为偏好分差 。模型预测 被偏好的概率就是 。对已有标签做最大似然拟合,得到要最小化的目标:
这里的期望按偏好数据分布计算,实际用 minibatch 中的偏好对平均。训练时固定回答对与 reference 的 log 概率,重算 current 对两个完整回答的 log 概率。
该 loss 只需 current 和 reference 对两个回答的 log 概率,不需要绝对奖励或归一化常数 。[1]
相应的隐式奖励为 。它是策略定义的一种奖励表示,不能直接当作真实正确率或人工评分。
4. 从逐 token 概率到离线训练#
4.1 回答级 log 概率汇总#
完整回答 的 log 概率为 。本文计入终止 token,排除 prompt 和 padding。
因此先把每条回答的有效 token log 概率求和,再用两条回答构造一个偏好 loss,最后对偏好对平均。原始 DPO 不先除以每条回答的长度;改成平均 log 概率,会改变分差和目标。[2]
4.2 离线偏好训练流程#
- 准备已有的偏好对,以监督微调模型初始化 current,并保存冻结的 reference。
- 将同一份问题与两条回答分别输入 current 和 reference,计算四个回答 log 概率。
- 计算偏好分差和 DPO loss,对本批偏好对平均。
- 只更新 current;reference 与数据标签固定,继续处理下一批。
训练时读取已有回答,逐位置计算其条件概率,不需要重新生成回答,也不训练额外的价值预测器(Critic)。偏好数据的采集发生在这个训练循环之外。[2]
5. KL 含义与偏好数据的局限性#
DPO 用 current/reference 对数概率比表示隐式奖励;它不是用 current/old 校正采样分布。本文采用固定偏好对的离线配置,训练循环不持续收集新回答与反馈。
5.1 KL 约束含义与 beta 的作用#
KL 已经进入奖励—策略关系,reference 和 随之保留在偏好 loss 中。这与删掉 KL 后只提高 winner 概率的目标不同;共同出发点见 Reference KL。
但 DPO 不在每一步显式计算完整回答分布的 KL,也不保证 KL 低于某个硬阈值。给定同一份奖励时,理论最优策略中的 越大,奖励差对两个回答相对概率的影响越弱;实际 DPO 中, 还给偏好分差和梯度定标,不能仅凭单步梯度大小判断最终偏离程度。
5.2 偏好拟合的条件与数据覆盖限制#
推导把奖励对应的最优策略写成解析形式,再用策略参数化偏好模型。要从偏好拟合恢复相应的理想最优策略,还需要偏好模型成立、数据足以识别奖励差异、模型能表示目标策略,以及优化充分等条件。
有限数据只约束见到的比较,未覆盖的回答未必得到可靠约束;标签噪声或互相矛盾的偏好,也会影响拟合。因而不能把 DPO 的训练梯度当作 PPO 奖励梯度的无偏估计,更不能把二者每一步更新视为相同。
原始 log 概率按回答内 token 求和,长度因此会影响偏好分差。若要调整长度权重,应说明改动后的目标,而不是在实现中隐式增加逐回答长度分母。跨方法的聚合口径见 Loss 平均。
参考资料#
- Direct Preference Optimization(2023,v3). 原文 §4、附录 A:KL 正则目标、偏好重参数化与梯度推导。
- DPO 作者实现(commit
f8b8c0f). trainers.py:preference_loss、回答 log 概率求和、冻结 reference 与 batch 平均。本文采用原始 DPO 配置,不启用 IPO 或 label smoothing。
补充比较#
与 SFT、在线策略更新比较
| 方法 | 本页比较的训练信号 | 怎样更新 |
|---|---|---|
| SFT(Supervised Fine-Tuning,监督微调) | 示范回答 | 提高示范回答的似然,不显式比较另一条回答 |
| PPO | 新采样回答的奖励与价值估计 | 构造 advantage,使用 current/old ratio 与 clipping |
| GRPO | 同题多次采样的评分差异 | 构造组内相对权重,再做 clipped 更新 |
| DPO | 已有回答对的偏好标签 | 拟合扣除 reference 差异后的偏好概率 |
DPO 使用的 current/reference 比值来自奖励与策略的对应关系。Importance Ratio 使用的 current/old 则用于采样分布校正,二者作用不同。
本页讲的是离线偏好优化。 原始 DPO 使用固定偏好对;PPO、GRPO 的在线训练则会在策略更新后继续生成回答并获取评分。在线/离线关注数据收集方式,与 on-policy/off-policy 的区别见 阅读总览。
DPO 的 loss 直接对固定偏好数据求期望,因此无需 PPO 式 old 快照、importance 校正或 clipping;DPO 的适用范围主要取决于偏好数据覆盖与偏好模型拟合。