DPO 推导及其问题讨论

DPO 推导及其问题讨论

本文主要参考两篇博文(12),结合自身对推导和 RL 理解记录,学习从 RLHF(RM+PPO)到 DPO 的推导过程,以及 DPO 问题。

原始 RLHF: RM + PPO

原始 RLHF 的训练分为两步,第一步是收集人类偏好数据,训练 reward model,第二步根据 reward model 给出的奖励进行强化学习 PPO 训练,来优化 LLM。

第一步,训练 reward model r ϕ r_\phi rϕ,其输入是问题和回答,输出是对回答质量的标量打分。训练数据是对于同一个 prompt x x x 的成对的两个回答,我们需要知道这两个回答哪个相对较好( y win y_\text{win} ywin),哪个相对较差( y lose y_\text{lose} ylose),其训练目标为:
Obj rm = max ⁡ r ϕ { E ( x , y win , y lose ) ∼ D [ log ⁡ σ ( r ϕ ( x , y win ) ) − σ ( r ϕ ( x , y lose ) ) ] } (1) \text{Obj}_\text{rm}=\max_{r_\phi}\left\{\mathbb{E}_{(x,y_\text{win},y_\text{lose})\sim \mathcal{D}}[\log\sigma(r_\phi(x,y_\text{win}))-\sigma(r_\phi(x,y_\text{lose}))]\right\} \tag{1} \\ Objrm=rϕmax{E(x,ywin,ylose)D[logσ(rϕ(x,ywin))σ(rϕ(x,ylose))]}(1)

很直观,就是想让 reward model 能给更好的回答打更高的分数,差的回答打更低的分数。

第二步,使用 reward model 的反馈,训练语言模型 π θ \pi_\theta πθ,这一步的数据就不需要任何标注数据了,只需要问题 prompt 集合即可,使用 RL 的思路,模型自己生成结果(rollout),再由 reward model 打分。训练目标为:
Obj ppo = max ⁡ π θ { E x ∼ D , y ∼ π θ ( y ∣ x ) [ r ϕ ( x , y ) ] − β D KL [ π θ ( y ∣ x ) ∣ ∣ π ref ( y ∣ x ) ] } (2) \text{Obj}_\text{ppo}=\max_{\pi_\theta}\{\mathbb{E}_{x\sim \mathcal{D},y\sim\pi_\theta(y|x)}[r_\phi(x,y)]-\beta D_\text{KL}[\pi_\theta(y|x)||\pi_\text{ref}(y|x)]\} \tag{2} \\ Objppo=πθmax{ExD,yπθ(yx)[rϕ(x,y)]βDKL[πθ(yx)∣∣πref(yx)]}(2)
这个目标包括了两项,第一项是 reward model 对语言模型输出的打分,我们希望其得分越高越好,第二项是语言模型和参考模型 π ref \pi_\text{ref} πref 输出之间的 KL 散度,希望这个 KL 散度尽量小,约束语言模型不要和参考模型差异太大。

从 RM+PPO 到 DPO

本节主要参考了 1,对推导的步骤进行了一些注释。

DPO 通过巧妙的推导,整合了 RLHF 的两阶段训练流程,直接根据偏好数据进行优化,大大简化了训练流程。

在这里插入图片描述

DPO 指出,RLHF 中第二步 PPO 训练的目标函数可以写为:
Obj ppo = max ⁡ π θ { E x ∼ D , y ∼ π θ ( y ∣ x ) [ r ϕ ( x , y ) ] − β D KL [ π θ ( y ∣ x ) ∣ ∣ π ref ( y ∣ x ) ] } = max ⁡ π θ E x ∼ D , y ∼ π θ ( y ∣ x ) [ r ϕ ( x , y ) − β log ⁡ π θ ( y ∣ x ) π ref ( y ∣ x ) ] K L 散度定义展开 D KL ( P ∣ ∣ Q ) = ∑ i P ( i ) log ⁡ P ( i ) Q ( i ) = min ⁡ π θ E x ∼ D , y ∼ π θ ( y ∣ x ) [ log ⁡ π θ ( y ∣ x ) π ref ( y ∣ x ) − 1 β r ϕ ( x , y ) ] 同除 − 1 β = min ⁡ π θ E x ∼ D , y ∼ π θ ( y ∣ x ) [ log ⁡ π θ ( y ∣ x ) π ref ( y ∣ x ) exp ⁡ ( r ϕ ( x , y ) / β ) ] \begin{aligned} \text{Obj}_\text{ppo}&=\max_{\pi_\theta}\{\mathbb{E}_{x\sim \mathcal{D},y\sim\pi_\theta(y|x)}[r_\phi(x,y)]-\beta D_\text{KL}[\pi_\theta(y|x)||\pi_\text{ref}(y|x)]\} \\ &=\max_{\pi_\theta}\mathbb{E}_{x\sim \mathcal{D},y\sim\pi_\theta(y|x)}\left[r_\phi(x,y)-\beta\log\frac{\pi_\theta(y|x)}{\pi_\text{ref}(y|x)}\right]\quad\quad KL散度定义展开\quad D_\text{KL}(P||Q)=\sum_iP(i)\log\frac{P(i)}{Q(i)} \\ &=\min_{\pi_\theta}\mathbb{E}_{x\sim \mathcal{D},y\sim\pi_\theta(y|x)}\left[\log\frac{\pi_\theta(y|x)}{\pi_\text{ref}(y|x)}-\frac{1}{\beta}r_\phi(x,y)\right]\quad\quad 同除-\frac{1}{\beta}\\ &=\min_{\pi_\theta}\mathbb{E}_{x\sim \mathcal{D},y\sim\pi_\theta(y|x)}\left[\log\frac{\pi_\theta(y|x)}{\pi_\text{ref}(y|x)\exp(r_\phi(x,y)/\beta)}\right] \end{aligned} \notag \\ Objppo=πθmax{ExD,yπθ(yx)[rϕ(x,y)]βDKL[πθ(yx)∣∣πref(yx)]}=πθmaxExD,yπθ(yx)[rϕ(x,y)βlogπref(yx)πθ(yx)]KL散度定义展开DKL(P∣∣Q)=iP(i)logQ(i)P(i)=πθminExD,yπθ(yx)[logπref(yx)πθ(yx)β1rϕ(x,y)]同除β1=πθminExD,yπθ(yx)[logπref(yx)exp(rϕ(x,y)/β)πθ(yx)]
对分母进行一下归一化,记为 Z ( x ) Z(x) Z(x)
Z ( x ) = ∑ y π ref ( y ∣ x ) exp ⁡ ( r ϕ ( x , y ) / β ) Z(x)=\sum_y\pi_\text{ref}(y|x)\exp(r_\phi(x,y)/\beta) \notag \\ Z(x)=yπref(yx)exp(rϕ(x,y)/β)
这样就保证了概率和为 1,从而可以构造出一个新的概率分布 π ∗ \pi^* π
π ∗ ( y ∣ x ) = π ref ( y ∣ x ) exp ⁡ ( r ϕ ( x , y ) / β ) / Z ( x ) (3) \pi^*(y|x)=\pi_\text{ref}(y|x)\exp(r_\phi(x,y)/\beta)/Z(x) \tag{3} \\ π(yx)=πref(yx)exp(rϕ(x,y)/β)/Z(x)(3)
那么 PPO 的训练目标进一步可写为:
Obj ppo = min ⁡ π θ E x ∼ D , y ∼ π θ ( y ∣ x ) [ log ⁡ π θ ( y ∣ x ) π ref ( y ∣ x ) exp ⁡ ( r ϕ ( x , y ) / β ) ] = min ⁡ π θ E x ∼ D , y ∼ π θ ( y ∣ x ) [ log ⁡ π θ ( y ∣ x ) π ∗ ( y ∣ x ) − log ⁡ Z ( x ) ] 代入新构造的概率分布 π ∗ = min ⁡ π θ E x ∼ D , y ∼ π θ ( y ∣ x ) [ log ⁡ π θ ( y ∣ x ) π ∗ ( y ∣ x ) ] Z ( x ) 与 θ 无关,丢掉 = min ⁡ π θ E x ∼ D D KL [ π θ ( y ∣ x ) ∣ ∣ π ∗ ( y ∣ x ) ] K L 散度定义 \begin{aligned} \text{Obj}_\text{ppo}&=\min_{\pi_\theta}\mathbb{E}_{x\sim\mathcal{D},y\sim\pi_\theta(y|x)}\left[\log\frac{\pi_\theta(y|x)}{\pi_\text{ref}(y|x)\exp(r_\phi(x,y)/\beta)}\right] \\ &=\min_{\pi_\theta}\mathbb{E}_{x\sim\mathcal{D},y\sim\pi_\theta(y|x)}\left[\log\frac{\pi_\theta(y|x)}{\pi^*(y|x)}-\log Z(x)\right]\quad\quad代入新构造的概率分布 \pi^* \\ &=\min_{\pi_\theta}\mathbb{E}_{x\sim\mathcal{D},y\sim\pi_\theta(y|x)}\left[\log\frac{\pi_\theta(y|x)}{\pi^*(y|x)}\right]\quad\quad Z(x)与\theta无关,丢掉\\ &=\min_{\pi_\theta}\mathbb{E}_{x\sim\mathcal{D}}D_\text{KL}[\pi_\theta(y|x)||\pi^*(y|x)]\quad\quad KL散度定义 \end{aligned} \notag \\ Objppo=πθminExD,yπθ(yx)[logπref(yx)exp(rϕ(x,y)/β)πθ(yx)]=πθminExD,yπθ(yx)[logπ(yx)πθ(yx)logZ(x)]代入新构造的概率分布π=πθminExD,yπθ(yx)[logπ(yx)πθ(yx)]Z(x)θ无关,丢掉=πθminExDDKL[πθ(yx)∣∣π(yx)]KL散度定义

到这里,我们看到 PPO 的训练目标可以写为最小化 π θ \pi_\theta πθ π ∗ \pi^* π 之间的 KL 散度,即让 π θ \pi_\theta πθ 尽可能接近 π ∗ \pi^* π,也就是说, π ∗ \pi^* π 就是训练希望得到的最优分布。

π ∗ \pi^* π 是我们自己定义的(式 3),我们知道 r ϕ r_\phi rϕ π ∗ \pi^* π 的关系,因此我们可以把训练 r ϕ r_\phi rϕ 转化成直接训练 π ∗ \pi^* π。对式 3 进行变换,得到:
r ϕ ( x , y ) = β log ⁡ π ∗ ( y ∣ x ) π ref ( y ∣ x ) + β log ⁡ Z ( x ) r_\phi(x,y)=\beta\log\frac{\pi^*(y|x)}{\pi_\text{ref}(y|x)}+\beta\log Z(x) \notag \\ rϕ(x,y)=βlogπref(yx)π(yx)+βlogZ(x)

代入到 RLHF 第一步训练 reward model r ϕ ( x , y ) r_\phi(x,y) rϕ(x,y) 的目标函数(式 1),有:
Obj rm = max ⁡ π ∗ { E ( x , y win , y lose ) ∼ D [ log ⁡ σ ( β log ⁡ π ∗ ( y win ∣ x ) π ref ( y win ∣ x ) − β log ⁡ π ∗ ( y lose ∣ x ) π ref ( y lose ∣ x ) ] } \text{Obj}_\text{rm}=\max_{\pi^*}\left\{\mathbb{E}_{(x,y_\text{win},y_\text{lose})\sim\mathcal{D}}\left[\log\sigma(\beta\log\frac{\pi^*(y_\text{win}|x)}{\pi_\text{ref}(y_\text{win}|x)}-\beta\log\frac{\pi^*(y_\text{lose}|x)}{\pi_\text{ref}(y_\text{lose}|x)}\right]\right\} \notag \\ Objrm=πmax{E(x,ywin,ylose)D[logσ(βlogπref(ywinx)π(ywinx)βlogπref(ylosex)π(ylosex)]}
我们可以用这个目标函数直接去优化 π θ \pi_\theta πθ
Obj dpo = max ⁡ π θ { E ( x , y win , y lose ) ∼ D [ log ⁡ σ ( β log ⁡ π θ ( y win ∣ x ) π ref ( y win ∣ x ) − β log ⁡ π θ ( y lose ∣ x ) π ref ( y lose ∣ x ) ] } (4) \text{Obj}_\text{dpo}=\max_{\pi_\theta}\left\{\mathbb{E}_{(x,y_\text{win},y_\text{lose})\sim\mathcal{D}}\left[\log\sigma(\beta\log\frac{\pi_\theta(y_\text{win}|x)}{\pi_\text{ref}(y_\text{win}|x)}-\beta\log\frac{\pi_\theta(y_\text{lose}|x)}{\pi_\text{ref}(y_\text{lose}|x)}\right]\right\} \tag{4} \\ Objdpo=πθmax{E(x,ywin,ylose)D[logσ(βlogπref(ywinx)πθ(ywinx)βlogπref(ylosex)πθ(ylosex)]}(4)

这就是 DPO 的训练目标(式 4)了,DPO 大大简化了 RLHF PPO 的训练流程,将两阶段的训练转换为一阶段的训练,整体上端到端来看,RLHF 和 DPO 所需要的监督数据都只有人类偏好数据。在训练时,DPO 只需要跑 actor 和 ref model 2 个模型,而 PPO 中需要同时跑 actor、critic、reward model、ref model 4 个模型,大大降低了训练成本。

然而,在实验结论中,大家发现 DPO 的效果相比与 PPO 一般还是要稍差一点,这是为什么呢?上面的理论推导看起来很完美,在实际中 DPO 会遇到什么问题呢?

DPO 的问题

本节参考了 2,结合自己对 RL 的理解进行简单讨论。

DPO 相比于 PPO 绕开了复杂的 RL 训练,大大简化了训练流程,然而,这些被简化的训练流程是否真的是不必要的呢?端到端来看,在数据上 DPO 和 PPO 并没有差别,都是需要人类偏好数据。DPO 所简化的,主要就是 PPO 在线采样和打分的过程,而缺少了这个过程所带来的潜在的局限,可以从 Online/Offline 训练和 Exploration 两个角度来讨论。

Online / Offline 的角度

这里的 online/offline 是取自 RL 中 on/off policy 的定义。online 是指模型的训练数据是由待优化的模型本身直接生成的,offline 是指不要求数据是如何生成的,直接拿来训练就行。这样的话,PPO 每次更新需要根据自己的生成结果,让 reward model 打分,以及对齐 ref model,因此 PPO 是 online 的;DPO 则是直接根据人类偏好数据进行端到端的训练,至于偏好数据是自己生成的、另一个模型生成的还是人类标注的,都可以,因此 DPO 是 offline 的。从 online/offline 的角度直观来看,PPO 是根据模型每次的最新生成结果因材施教,DPO 则是根据固定的偏好数据死记硬背。虽然 PPO 的训练更复杂,但显然是 online 的因材施教效果会更好,当然了,online 算法的问题是样本效率比较低,每个样本只能用一次,模型更新后需要重新进行采样生成。

Exploration 的角度

Exploration 是 RL 里的一个重要话题,大概意思就是希望模型在尽可能提高最终 return 的同时,也能去探索一下其他的可能,而不是每次都无脑采取概率最高的动作,看是否有最终 return 更高的路径,避免陷入到局部最优。在这里,DPO 的训练就固定在给定的偏好数据集上,对于除此之外的其他数据就没有任何的训练信号了;而 PPO 会在训练时采样探索各种各样的生成结果,再由 reward model 来打分评判,有更大的 explore 的空间。当然,对于 ood 的数据打分准不准,就要看 reward model 的泛化能力了。另外,从这一点来看,DPO 想要有更好的结果,对偏好数据集的要求应该会更高,如果偏好数据集足够大,质量足够高,应该效果也能不错。

总结

DPO 通过巧妙的推导,整合了 RLHF 的两阶段(RM + PPO)训练流程,直接根据偏好数据进行优化,大大简化了训练流程。但也由于缺少在线采样和打分的过程,探索能力有限,性能稍逊于 PPO/GRPO 等 RL 算法,对偏好数据集的质量要求更高。

参考

  1. DPO 是如何简化 RLHF 的
  2. dpo 的局限性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值