Skip to content

DPO 模型推导

1. 概述

RLHF (Reinforcement Learning from Human Feedback)使用强化学习(Reinforcement Learning)它利用人类的直接反馈来训练“奖励模型”,然后利用奖励模型通过强化学习来优化语言模型的策略 ,以输出可以获得高奖励的回答。

RLHF 方法也存在一些问题。首先,奖励模型的构建需要耗费大量的人力和时间成本。其次,由于奖励模型是基于人类反馈的,因此可能存在主观性和偏见。最后, RLHF 方法需要使用复杂的强化学习算法,这增加了实现难度和计算成本。

为了解决这些问题,斯坦福研究者提出了 DPO (Direct Preference Optimization)算法作为 RLHF 的替代。DPO 算法不需要显式地构建奖励模型,而是直接优化模型生成的回答之间的偏好关系。

DPO 算法的核心思想在于,它假设模型生成的多个回答之间存在偏好关系,即某些回答比其他回答更受用户欢迎。因此, DPO 算法通过比较不同回答之间的偏好关系来优化模型的策略,而不是依赖于显式的奖励模型。

在实际应用中, DPO 算法已经在一些模型中得到了验证。例如, Zephyr 模型就是基于 DPO 算法进行优化的。Zephyr 模型使用 Mistral 7B 作为基础模型,并通过微调来适应不同的任务。在微调过程中, Zephyr 模型使用 DPO 算法来优化生成回答的质量,从而提高了模型的性能。

2. 预备知识

2.1 KL 散度

KL 散度也称为相对熵(Relative Entropy),是衡量两个概率分布差异的一种方法。它是两个概率分布 P 和 Q 之间的非对称距离度量,定义为:

DKL(P||Q)=xP(x)log(P(x)Q(x))

其中, P 是数据的真实分布,而 Q 是模型或估计分布。KL 散度的值总是非负的,当且仅当 P 和 Q 完全相同时, KL 散度为零。

2.2 Bradley-Terry 模型

下面通过一个例子介绍 Bradley-Terry 模型 如何对比较关系进行建模:

winLoss
A vs B84
A vs C35

在这个例子中, A 和 B 对战, 胜 8 场,输 4 场, A 和 C 对战, 胜 3 场, 输 5 场。问题是 B 和 C 对战,获胜的几率有多大?

这个问题可以通过 Bradley-Terry 模型建模。

Bradley-Terry 模型假设每个个体都有一个隐含的实力参数 α,αi 代表个体 i 的正实值分数,P(i>j)代表 i 战胜 j 的概率。

P(i>j)=αiαi+αj

我们可以通过 MLE 对参数 α进行求解。

L=8ln(αAαA+αB)+4ln(αBαA+αB)+3ln(αAαA+αC)+5ln(αCαA+αC)

计算得到: αA=1,αB=12,αC=53, 从而:P(B>C)=αBαC+αc0.23,根据现有数据, B 和 C 对战,获胜的几率大概为 0.23.

不使用 MLE, 我们也可以使用机器学习的方式通过迭代优化的方式来进行求解, 上述问题的一般的 Loss 函数可表示成:

Loss=E(αx,αy)D[ln(αxαx+αy)]

可以看到,这就是一般分类问题的交叉熵损失函数的样式, 优化的目标损失函数的值越小越好。 而其中 αxαx+αy代表 x 战胜 y 的概率, 优化的目标变成 x 战胜 y 的概率约趋近于 1 越好。

3. RLHF 研究

现有的 RLHF 流程通常包括三个阶段: 1)监督微调(SFT); 2)偏好采样和奖励学习; 3) RL 优化。

img

3.1 SFT

RLHF 通常以对感兴趣下游任务(对话、摘要等)的高质量数据进行监督学习来微调预训练的 LM 开始,以获得模型 πSFT

3.2 Reward Model

在 RLHF 的第二阶段, 我们需要训练一个 Reward 模型来为生成的结果打分。大模型的输入的 Prompt 为 x, 输出的回答为 y,回答的好坏可以通过 Reward 模型打分。

p(ywyl|x)=r(x,yw)r(x,yw)+r(x,yl)

Reward 模型有可能返回负数, 因此我们加上一个指数函数变换, 从而得到 BT 模型中,人类偏好分布 p的建模:

p(ywyl|x)=exp(r(x,yw))exp(r(x,yw))+exp(r(x,yl))

假设我们可以访问来自 p的比较静态数据集D={x(i),y(i)w,y(i)l}i=1N的样本,我们可以通过最大似然估计参数化奖励模型rϕ(x,y)。将问题框架为二元分类,我们得到了优化 Reward 模型的负对数似然损失函数:

LR(rθ;D)=E(x,yw,yl)D[logσ(rθ(x,yl)rθ(x,yw))]=E(x,yw,yl)D[logexp(r(x,yw))exp(r(x,yw))+exp(r(x,yl))]=E(x,yw,yl)D[log11+exp(r(x,yw)r(x,yl))]=E(x,yw,yl)D[logσ(r(x,yw)r(x,yl))]

其中, σ(x)=11+exp(x)为 sigmoid 函数。

在 LMs 的背景下,网络rϕ(x,y)通常从 SFT 模型πSFT(y|x)初始化,顶层增加一个线性层,产生单个标量预测奖励值。为了确保具有较低方差的奖励函数,以前的工作对奖励进行了归一化,使得对所有x, 有E(x,y)D[rϕ(x,y)]=0

3.3 RL 微调阶段

在 RL 阶段,我们使用学习到的奖励函数为语言模型提供反馈。具体来说,我们构建了以下优化问题:

maxπExD,yπ[rϕ(x,y)βDKL(π(y|x)πref(y|x))]

其中β是一个控制基础模型参考策略πref(即初始 SFT 模型πSFT)的参数。在实践中,语言模型策略πθ也初始化为πSFT。增加的 KL 散度约束很重要,因为它防止模型偏离奖励模型准确的分布,同时保持生成多样性并防止模式崩溃到单一高奖励答案。

RL 微调阶段的目标是:我们希望找到一个能够最大化奖励的策略,同时我们也希望该策略与初始未优化策略的行为不能相差太大。

4. Direct Preference Optimization (DPO)

DPO 完全消除了对奖励模型的需要。

img

DPO 的策略目标为:

LDPO(πθ;πref)=E(x,yw,yl)D[logσ(βlogπθ(yw|x)πref(yw|x)βlogπθ(yl|x)πref(yl|x))]

求解上述优化问题的最有解为:

π(y|x)=1Z(x)πref(y|x)exp(1βr(x,y))

其中:Z(x)=yπref(y|x)exp(1βr(x,y))

重新排列π(y|x)方程式(通过对等式两边取对数和代数运算),得到奖励函数:

r(x,y)=βlogπ(y|x)πref(y|x)+βlogZ(x)

4.1 DPO 更新的作用是什么?

为了深入理解 DPO,分析损失函数 LDPO的梯度是有用的。梯度相对于参数θ可以写成:

θLDPO(πθ;πref)=βE(x,yw,yl)D[σ(r^θ(x,yl)r^θ(x,yw))(θlogπθ(yw|x)θlogπθ(yl|x))]

其中 r^θ(x,y)=βlogπθ(y|x)πref(y|x)是由语言模型πθ和参考模型πref隐式定义的奖励(更多内容见第 5 节)。

r^θ(x,yw)>r^θ(x,yl), 算式σ(r^θ(x,yl)r^θ(x,yw))越接近 1,反之接近 0,若两者趋近则该权重接近 0.5。

直观上,损失函数 LDPO的梯度增加了首选回答yw的可能性,并减少了非首选回答yl的可能性。

4.2 DPO 概述

一般 DPO 流程如下:

  1. 对于每个提示 x,从参考模型πref(|x)中采样完成y1,y2,用人类偏好标注以构建离线偏好数据集D={(x(i),y(i)w,y(i)l)}i=1N
  2. 优化语言模型 πθ以最小化给定πrefD以及期望的βLDPO

在实践中,使用公开可用的偏好数据集,而不是生成样本和收集人类偏好。偏好数据集是使用 πSFT采样得到。

当可以取得πSFT, 我们初始化πref=πSFT

πSFT不可用时,我们通过最大似然估计偏好目标(x,yw)的似然来初始化πref,即πref=argmaxπEx,ywD[logπ(yw|x)]

这个过程有助于减少真实参考分布(不可用)和 DPO 使用的 πref之间的分布偏移。

5. DPO 推导

5.1 推导 DPO 的训练目标

maxπExD,yπ[r(x,y)βDKL(π(y|x)πref(y|x))]=maxπExDEyπ(y|x)[r(x,y)βlogπ(y|x)πref(y|x)]=minπExDEyπ(y|x)[logπ(y|x)πref(y|x)1βr(x,y)]

进一步,将上式化简得到:

minπExDEyπ(y|x)[logπ(y|x)πref(y|x)1βr(x,y)]=minπExDEyπ(y|x)[logπ(y|x)πref(y|x)logexp(1βr(x,y))]=minπExDEyπ(y|x)[logπ(y|x)πref(y|x)exp(1βr(x,y))]=minπExDEyπ(y|x)[logπ(y|x)πref(y|x)exp(1βr(x,y))1Z(x)Z(x)]=minπExDEyπ(y|x)[logπ(y|x)1Z(x)πref(y|x)exp(1βr(x,y))log(Z(x))]

接下来,令:

Z(x)=yπref(y|x)exp(1βr(x,y))

Z(x) 称为划分函数, 注意划分函数仅是 x和参考策略πref的函数,不依赖于策略π

1Z(x)πref(y|x)exp(1βr(x,y))=πref(y|x)exp(1βr(x,y))yπref(y|x)exp(1βr(x,y))=π(y|x)

这是一个有效的概率分布,因为对于所有 yπ(y|x)0yπ(y|x)=1。从而:

minπExDEyπ(y|x)[logπ(y|x)1Z(x)πref(y|x)exp(1βr(x,y))log(Z(x))]=minπExDEyπ(y|x)[logπ(y|x)π(y|x)log(Z(x))]

现在,由于 Z(x)不依赖于π,最小值由最小化第一项 KL 散度的策略实现。

=minπExDEyπ(y|x)[logπ(y|x)π(y|x)]=minπExD[DKL(π(y|x)π(y|x))]

Gibbs 不等式告诉我们, KL 散度最小化为 0 当且仅当两个分布相同时。因此我们有最优解:当分布 π(y|x)π(y|x)相等时, KL 散度的值最小,从而我们优化的目标

π(y|x)=π(y|x)=1Z(x)πref(y|x)exp(1βr(x,y))

进一步:

π(y|x)=π(y|x)=1Z(x)πref(y|x)exp(1βr(x,y))=>exp(1βr(x,y))=π(y|x)πref(y|x)Z(x)=>r(x,y)=βlog(π(y|x)πref(y|x)Z(x))=>r(x,y)=βlogπ(y|x)πref(y|x)+βlogZ(x)

根据 Bradley-Terry 模型, 对于比较关系建模的损失函数可表示为:

log(σ(r(x,yw)r(x,yl)))=logσ(βlogπ(yw|x)πref(yw|x)+βlogZ(x)βlogπ(yl|x)πref(yl|x)βlogZ(x))=logσ(βlogπ(yw|x)πref(yw|x)βlogπ(yl|x)πref(yl|x))

这样,我们就得到了 最终的 DPO 损失函数:

LDPO=logσ(βlogπ(yw|x)πref(yw|x)βlogπ(yl|x)πref(yl|x))

因此,不需要优化奖励函数,我们就能优化最优策略。

5.2 在 Bradley-Terry 模型下推导 DPO 目标

在 Bradley-Terry 偏好模型下推导 DPO 目标是直接的,我们有

p(y1y2|x)=exp(r(x,y1))exp(r(x,y1))+exp(r(x,y2))

上面,我们展示了可以将(不可用的)真实奖励通过其相应的最优策略表示:

r(x,y)=βlogπ(y|x)πref(y|x)+βlogZ(x)

将方程(39)代入方程(38)我们得到:

p(y1y2|x)=exp(βlogπ(y1|x)πref(y1|x)+βlogZ(x))exp(βlogπ(y1|x)πref(y1|x)+βlogZ(x))+exp(βlogπ(y2|x)πref(y2|x)+βlogZ(x))=11+exp(βlogπ(y2|x)πref(y2|x)βlogπ(y1|x)πref(y1|x))=σ(βlogπ(y1|x)πref(y1|x)βlogπ(y2|x)πref(y2|x))

Maintained by Robin