DPO:从偏好比较直接训练策略#

进阶8 分钟阅读查看源文件 ↗

TL;DR#

本页内容8 个部分

DPO:从偏好对到直接训练策略

1. 偏好数据的直接策略优化#

假设同一道题有两个回答,数据标签指出其中一个被偏好,但没有提供奖励分数。怎样利用这种成对比较更新语言模型?

一种做法是先用偏好训练奖励模型,再用强化学习提高奖励。DPO 通过奖励与最优策略的关系,直接用成对偏好标签训练策略,省去单独的奖励模型和在线采样更新循环。

2. 一对回答的偏好概率与 loss#

DPO(Direct Preference Optimization,直接偏好优化)将回答对的偏好预测写成策略概率的函数。先计算模型赋予观测标签的概率,再由负对数似然得到训练 loss。[1]

固定问题 qq 的一对回答:标签偏好 ywy_w,另一条记为 yly_l,下标分别表示 winner 和 loser。冻结参考策略 πref\pi_{\text{ref}},正在训练的策略为 πθ\pi_\theta,取 β>0\beta>0 调节偏好分差的尺度。对每条回答,先计算 current/reference 对数概率比。用被偏好回答的 log-ratio 减去另一条回答的 log-ratio,再乘以 β\beta,将结果记为偏好分差 mθm_\theta。

用 sigmoid 函数 σ(u)=1/(1+e−u)\sigma(u)=1/(1+e^{-u}) 将分差转成预测偏好概率,单对 loss 为 ℓ=−log⁡σ(mθ)\ell=-\log\sigma(m_\theta)。这个分差来自 KL 正则奖励目标中的奖励—策略对应关系。

2.1 一对回答的偏好概率与 loss 计算#

下面用这一对回答完成计算。所有概率均为手算设定,不是模型实验。固定一道题,只有三个可能回答,其中标签为 yw≻yly_w\succ y_l,第三个回答记为 yoy_o。取 β=0.5\beta=0.5:

回答 Reference 概率 Current 概率 Current / reference Log-ratio
ywy_w 0.20.2 0.40.4 22 log⁡2≈0.6931\log2\approx0.6931
yly_l 0.40.4 0.20.2 1/21/2 −log⁡2≈−0.6931-\log2\approx-0.6931
yoy_o 0.40.4 0.40.4 11 00

两列回答概率分别归一化为 11。训练只比较前两个回答,偏好分差为 mθ=0.5[log⁡2−(−log⁡2)]=log⁡2m_\theta=0.5[\log2-(-\log2)]=\log2。因此模型预测的偏好概率为 σ(mθ)=2/3\sigma(m_\theta)=2/3,这一对的 loss 为 ℓ=−log⁡(2/3)≈0.4055\ell=-\log(2/3)\approx0.4055。

如果 current 还等于 reference,两项 log-ratio 都为零,偏好概率就是 1/21/2,loss 为 ℓ=log⁡2≈0.6931\ell=\log2\approx0.6931。现在 loss 更低,说明模型相对 reference 赋予观测偏好标签更高的概率。

这里的 2/32/3 是“这对回答中选中 ywy_w”的预测偏好概率,不是生成 ywy_w 的概率;后者在表中是 0.40.4。

2.2 单个偏好对的更新方向与梯度计算#

固定一条偏好对,其 loss 为 ℓ=−log⁡σ(mθ)\ell=-\log\sigma(m_\theta)。先对分差求导,dℓ/dmθ=σ(mθ)−1d\ell/dm_\theta=\sigma(m_\theta)-1;再对策略参数求导:

∇θℓ=−β[1−σ(mθ)][∇θlog⁡πθ(yw∣q)−∇θlog⁡πθ(yl∣q)].\nabla_\theta\ell=-\beta\left[1-\sigma(m_\theta)\right]\left[\nabla_\theta\log\pi_\theta(y_w\mid q)-\nabla_\theta\log\pi_\theta(y_l\mid q)\right].

梯度下降沿着“提高 winner 的 log 概率、降低 loser 的 log 概率”的方向更新。系数 β[1−σ(mθ)]\beta[1-\sigma(m_\theta)] 决定这一对的权重:固定 β\beta 时,模型赋予观测偏好标签的概率越低,该偏好对的梯度系数越大;概率越高,梯度系数越小。

这描述的是本对样本提供的梯度方向。共享参数、多条样本共同更新时,不能保证每个 winner 的实际概率都单独上升。[1]

本例的梯度权重为 β[1−σ(mθ)]=0.5(1−2/3)=1/6\beta[1-\sigma(m_\theta)]=0.5(1-2/3)=1/6。

为计算这三个回答的参数梯度,本例将策略参数设为三个归一化前分数(logits)θ=(θw,θl,θo)\theta=(\theta_w,\theta_l,\theta_o),再通过 softmax 得到回答概率。记当前概率向量为 p=(0.4,0.2,0.4)p=(0.4,0.2,0.4),则 ∇θlog⁡πθ(yw)=ew−p\nabla_\theta\log\pi_\theta(y_w)=e_w-p,∇θlog⁡πθ(yl)=el−p\nabla_\theta\log\pi_\theta(y_l)=e_l-p,其中 ew,ele_w,e_l 是对应位置的单位向量。

两者相减时 pp 抵消,所以 ∇θℓ=−(ew−el)/6=(−1/6,1/6,0)\nabla_\theta\ell=-(e_w-e_l)/6=(-1/6,1/6,0)。一次梯度下降会提高 winner 的 logit、降低 loser 的 logit,随后由 softmax 重新归一化。

3. 从偏好模型推导策略 loss#

上述分差利用了奖励与最优策略的对应关系:给定奖励和 reference,带 KL 正则的最优策略可以解析写出。反过来,最优策略相对 reference 的 log 概率比可以表示隐式奖励;同题回答的奖励相减时,归一化常数抵消。

3.1 偏好数据与偏好模型#

把这些偏好对组成的数据集记为 D\mathcal D,每条数据是 (q,yw,yl)(q,y_w,y_l)。标签只说明 ywy_w 在这次比较中被偏好,不提供两条回答的奖励差。

用 R(q,y)R(q,y) 表示潜在奖励。Bradley–Terry 偏好模型假设,奖励差决定一个回答被选中的概率:

P(yw≻yl∣q)=eR(q,yw)eR(q,yw)+eR(q,yl)=σ ⁣(R(q,yw)−R(q,yl)).P(y_w\succ y_l\mid q)=\frac{e^{R(q,y_w)}}{e^{R(q,y_w)}+e^{R(q,y_l)}}=\sigma\!\left(R(q,y_w)-R(q,y_l)\right).

两条回答的奖励相同时,偏好概率为 1/21/2;R(q,yw)−R(q,yl)R(q,y_w)-R(q,y_l) 越大,模型预测 ywy_w 被偏好的概率越高。这是对偏好如何产生的建模假设。[1]

3.2 KL 正则奖励目标及其最优策略#

固定问题 qq,令 reference 策略 πref\pi_{\text{ref}} 固定,KL 强度 β>0\beta>0。先假设奖励 RR 已知,考虑最大化:

J(π∣q)=Ey∼π(⋅∣q)[R(q,y)]−βDKL ⁣(π(⋅∣q)∥πref(⋅∣q)).J(\pi\mid q)=\mathbb E_{y\sim\pi(\cdot\mid q)}[R(q,y)]-\beta D_{\mathrm{KL}}\!\left(\pi(\cdot\mid q)\|\pi_{\text{ref}}(\cdot\mid q)\right).

这里对所有回答分布优化,不先限制在某个神经网络内。假设只在 reference 的支持上分配概率,相关期望有限,且归一化常数 Z(q)=∑yπref(y∣q)eR(q,y)/βZ(q)=\sum_y\pi_{\text{ref}}(y\mid q)e^{R(q,y)/\beta} 有限。

定义 π∗(y∣q)=πref(y∣q)eR(q,y)/β/Z(q)\pi^*(y\mid q)=\pi_{\text{ref}}(y\mid q)e^{R(q,y)/\beta}/Z(q)。由其 log 概率可得 R(q,y)=βlog⁡[π∗(y∣q)/πref(y∣q)]+βlog⁡Z(q)R(q,y)=\beta\log[\pi^*(y\mid q)/\pi_{\text{ref}}(y\mid q)]+\beta\log Z(q)。代回目标:

J(π∣q)=βlog⁡Z(q)+βEy∼π[log⁡π∗(y∣q)πref(y∣q)−log⁡π(y∣q)πref(y∣q)]=βlog⁡Z(q)−βDKL(π∥π∗).\begin{aligned} J(\pi\mid q) &=\beta\log Z(q)+\beta\mathbb E_{y\sim\pi}\left[\log\frac{\pi^*(y\mid q)}{\pi_{\text{ref}}(y\mid q)}-\log\frac{\pi(y\mid q)}{\pi_{\text{ref}}(y\mid q)}\right]\\ &=\beta\log Z(q)-\beta D_{\mathrm{KL}}(\pi\|\pi^*). \end{aligned}

第一项与待选策略 π\pi 无关,第二项至多为零。因此 π=π∗\pi=\pi^* 取得最大值。高奖励回答在 reference 概率的基础上,乘上更大的指数权重。 这也说明了奖励与最优策略之间的对应关系。[1]

3.3 代入奖励差,得到偏好 loss#

同一道题的两个回答共享 Z(q)Z(q)。将两条回答的隐式奖励表达式相减,归一化项消失:

R(q,yw)−R(q,yl)=β[log⁡π∗(yw∣q)πref(yw∣q)−log⁡π∗(yl∣q)πref(yl∣q)].R(q,y_w)-R(q,y_l)=\beta\left[\log\frac{\pi^*(y_w\mid q)}{\pi_{\text{ref}}(y_w\mid q)}-\log\frac{\pi^*(y_l\mid q)}{\pi_{\text{ref}}(y_l\mid q)}\right].

现在用待训练策略 πθ\pi_\theta 代替未知的 π∗\pi^*,将右侧记为偏好分差 mθm_\theta。模型预测 ywy_w 被偏好的概率就是 σ(mθ)\sigma(m_\theta)。对已有标签做最大似然拟合,得到要最小化的目标:

LDPO(θ)=−E(q,yw,yl)∼D[log⁡σ ⁣(β[log⁡πθ(yw∣q)πref(yw∣q)−log⁡πθ(yl∣q)πref(yl∣q)])].\boxed{L_{\mathrm{DPO}}(\theta)=-\mathbb E_{(q,y_w,y_l)\sim\mathcal D}\left[\log\sigma\!\left(\beta\left[\log\frac{\pi_\theta(y_w\mid q)}{\pi_{\text{ref}}(y_w\mid q)}-\log\frac{\pi_\theta(y_l\mid q)}{\pi_{\text{ref}}(y_l\mid q)}\right]\right)\right].}

这里的期望按偏好数据分布计算,实际用 minibatch 中的偏好对平均。训练时固定回答对与 reference 的 log 概率,重算 current 对两个完整回答的 log 概率。

该 loss 只需 current 和 reference 对两个回答的 log 概率,不需要绝对奖励或归一化常数 Z(q)Z(q)。[1]

相应的隐式奖励为 Rθ(q,y)=βlog⁡[πθ(y∣q)/πref(y∣q)]R_\theta(q,y)=\beta\log[\pi_\theta(y\mid q)/\pi_{\text{ref}}(y\mid q)]。它是策略定义的一种奖励表示,不能直接当作真实正确率或人工评分。

4. 从逐 token 概率到离线训练#

4.1 回答级 log 概率汇总#

完整回答 y=(y1,…,yT)y=(y_1,\ldots,y_T) 的 log 概率为 log⁡πθ(y∣q)=∑t=1Tlog⁡πθ(yt∣q,y<t)\log\pi_\theta(y\mid q)=\sum_{t=1}^T\log\pi_\theta(y_t\mid q,y_{<t})。本文计入终止 token,排除 prompt 和 padding。

因此先把每条回答的有效 token log 概率求和,再用两条回答构造一个偏好 loss,最后对偏好对平均。原始 DPO 不先除以每条回答的长度;改成平均 log 概率,会改变分差和目标。[2]

4.2 离线偏好训练流程#

  1. 准备已有的偏好对,以监督微调模型初始化 current,并保存冻结的 reference。
  2. 将同一份问题与两条回答分别输入 current 和 reference,计算四个回答 log 概率。
  3. 计算偏好分差和 DPO loss,对本批偏好对平均。
  4. 只更新 current;reference 与数据标签固定,继续处理下一批。

训练时读取已有回答,逐位置计算其条件概率,不需要重新生成回答,也不训练额外的价值预测器(Critic)。偏好数据的采集发生在这个训练循环之外。[2]

5. KL 含义与偏好数据的局限性#

DPO 用 current/reference 对数概率比表示隐式奖励;它不是用 current/old 校正采样分布。本文采用固定偏好对的离线配置,训练循环不持续收集新回答与反馈。

5.1 KL 约束含义与 beta 的作用#

KL 已经进入奖励—策略关系,reference 和 β\beta 随之保留在偏好 loss 中。这与删掉 KL 后只提高 winner 概率的目标不同;共同出发点见 Reference KL。

但 DPO 不在每一步显式计算完整回答分布的 KL,也不保证 KL 低于某个硬阈值。给定同一份奖励时,理论最优策略中的 β\beta 越大,奖励差对两个回答相对概率的影响越弱;实际 DPO 中,β\beta 还给偏好分差和梯度定标,不能仅凭单步梯度大小判断最终偏离程度。

5.2 偏好拟合的条件与数据覆盖限制#

推导把奖励对应的最优策略写成解析形式,再用策略参数化偏好模型。要从偏好拟合恢复相应的理想最优策略,还需要偏好模型成立、数据足以识别奖励差异、模型能表示目标策略,以及优化充分等条件。

有限数据只约束见到的比较,未覆盖的回答未必得到可靠约束;标签噪声或互相矛盾的偏好,也会影响拟合。因而不能把 DPO 的训练梯度当作 PPO 奖励梯度的无偏估计,更不能把二者每一步更新视为相同。

原始 log 概率按回答内 token 求和,长度因此会影响偏好分差。若要调整长度权重,应说明改动后的目标,而不是在实现中隐式增加逐回答长度分母。跨方法的聚合口径见 Loss 平均。

参考资料#

  1. Direct Preference Optimization(2023,v3). 原文 §4、附录 A:KL 正则目标、偏好重参数化与梯度推导。
  2. 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 的适用范围主要取决于偏好数据覆盖与偏好模型拟合。