DPO 原理推导

我们先考虑一般情况下的 RLHF:

maxπ  ExD[Eyπ(x)[r(x,y)]βDKL(π(x)πref(x))]\max_{\pi}\; \mathbb{E}_{x\sim\mathcal D} \left[ \mathbb{E}_{y\sim\pi(\cdot\mid x)}[r(x,y)] -\beta D_{\mathrm{KL}} \left( \pi(\cdot\mid x)\,\|\,\pi_{\mathrm{ref}}(\cdot\mid x) \right) \right]

目标是在不过度改变模型输出概率分布的情况下尽可能的提高模型的 Reward 分数。

对于 PPO ,往往需要通过训练一个 Value Model,同时每个 Prompt 都进行多样化的 Rollout,通过 Policy Gradient 来进行近似。而 DPO 则是在判断这个最优的策略是否可以写出来。

对于一个固定的 Prompt xx,我们可以得出优化的目标:

maxπyπ(yx)r(x,y)βyπ(yx)logπ(yx)πref(yx)\max_\pi \sum_y \pi(y|x)r(x,y) - \beta \sum_y \pi(y|x)\log \frac{\pi(y|x)}{\pi_{\text{ref}} (y|x)}

而这个目标包含一个约束:yπ(yx)=1\sum_y \pi(y|x) =1,所以我们可以构造拉格朗日函数:

J(π,λ)=yπ(yx)r(x,y)βyπ(yx)logπ(yx)πref(yx)+λ(yπ(yx))\mathcal{J}(\pi,\lambda) =\sum_y \pi(y|x)r(x,y) - \beta \sum_y \pi(y|x)\log \frac{\pi(y|x)}{\pi_{\text{ref}} (y|x)} + \lambda \left( \sum_y \pi(y|x) \right)

π(yx)\pi(y|x) 求偏导,并让整个偏导等于 0 :

r(x,y)β(logπ(yx)πref(yx)+1)+λ=0r(x,y)- \beta\left( \log\frac{\pi(y|x)}{\pi_{\text{ref}}(y|x)} +1\right) + \lambda = 0

可以求出理论上最优策略的表达式:

π(yx)=πref(yx)exp(r(x,y)β)exp(λβ1)\pi^*(y|x) = \pi_{\text{ref}}(y|x) \exp\left(\frac{r(x,y)}{\beta}\right)\exp(\frac{\lambda}{\beta}-1)

这里的参数 λ\lambda 不依赖于 yy,可以代入到其原先的约束 π(yx)=1\sum \pi^*(y|x)=1 中解出:

exp(λβ1)yπref(yx)exp(r(x,y)β)=1\exp\left( \frac{\lambda}{\beta}-1 \right) \sum_y \pi_{\text{ref}}(y|x) \exp\left( \frac{r(x,y)}{\beta} \right) = 1

为了方便记录,我们可以标记一个 Z(x)Z(x) 作为配分函数:

Z(x)=yπref(yx)exp(r(x,y)β)Z(x) = \sum_y \pi_{\text{ref}}(y|x) \exp \left( \frac{r(x,y)}{\beta} \right)

那么我们就可以表示:

exp(λβ1)=1Z(x)\exp \left( \frac{\lambda}{\beta}-1 \right) = \frac{1}{Z(x)}

所以我们可以把最优的策略表示为:

π(yx)=1Z(x)πref(yx)exp(r(x,y)β)\pi^*(y|x) = \frac{1}{Z(x)} \pi_{\text{ref}}(y|x) \exp\left( \frac{r(x,y)}{\beta} \right)

我们可以从当前的表示中推出来最优的奖励表示:

r(x,y)=βlogπ(yx)πref(yx)+βlogZ(x)r(x,y) = \beta \log\frac{\pi^*(y|x)}{\pi_{\text{ref}}(y|x)} + \beta \log Z(x)

后面一项只和 Prompt 有关(在同一组 Rollout 作差的时候可以直接被消掉),而前一项我们可以得到策略模型相对于参考模型的对数概率比例也是理想奖励的一个关键部分,我们可以把它称之为隐式奖励:

r^θ(x,y)=βlogπθ(yx)πref(yx)\hat{r}_\theta (x,y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)}

构造训练目标

现在我们得到了近似最优的奖励表达式,旧可以利用这个奖励的表达来构造训练的目标。

首先我们引入经典的 Bradley-Terry 模型:

P(ywylx)=exp(r(x,yw))exp(r(x,yw))+exp(r(x,yl))P(y_w \succ y_l|x) = \frac{\exp(r(x,y_w))}{\exp(r(x,y_w))+\exp(r(x,y_l))}

我们代入 Sigmoid 函数:σ(z)=11+exp(z)\sigma(z) = \frac{1}{1+\exp(-z)},我们可以得到:

P(ywylx)=σ(r(x,yw)r(x,yl))P(y_w \succ y_l|x) = \sigma(r(x,y_w) - r(x,y_l))

而代入我们前面算出来的隐式奖励可以得出:

Pθ(ywylx)=σ(β[logπθ(ywx)πref(ywx)logπθ(ylx)πref(ylx)])P_\theta(y_w\succ y_l|x) = \sigma \left( \beta \left[ \log \frac{\pi_\theta (y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right] \right)

我们就可以构造出标准的训练目标函数:

LDPO=E(x,yw,yl)Pθ(ywylx)\mathcal{L}_{\text{DPO}} = \mathbb{E}_{(x,y_w,y_l)} P_\theta(y_w \succ y_l|x)

可以把除形式的 Log 变换为差形式的 Log,我们就可以理解,在 DPO 中,不仅要求我们目标策略在 Win 的样本上的生成概率大于 Lose 样本,同时还要求我们的 Win 样本相比于 Lose 样本在相比于在 Ref 模型上的提升更大。


back to the post list