DPO 推导及其问题讨论
本文主要参考两篇博文(1、2),结合自身对推导和 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{Ex∼D,y∼πθ(y∣x)[rϕ(x,y)]−βDKL[πθ(y∣x)∣∣πref(y∣x)]}(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{Ex∼D,y∼πθ(y∣x)[rϕ(x,y)]−βDKL[πθ(y∣x)∣∣πref(y∣x)]}=πθmaxEx∼D,y∼πθ(y∣x)[rϕ(x,y)−βlogπref(y∣x)πθ(y∣x)]KL散度定义展开DKL(P∣∣Q)=i∑P(i)logQ(i)P(i)=πθminEx∼D,y∼πθ(y∣x)[logπref(y∣x)πθ(y∣x)−β1rϕ(x,y)]同除−β1=πθminEx∼D,y∼πθ(y∣x)[logπref(y∣x)exp(rϕ(x,y)/β)πθ(y∣x)]
对分母进行一下归一化,记为
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(y∣x)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} \\
π∗(y∣x)=πref(y∣x)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=πθminEx∼D,y∼πθ(y∣x)[logπref(y∣x)exp(rϕ(x,y)/β)πθ(y∣x)]=πθminEx∼D,y∼πθ(y∣x)[logπ∗(y∣x)πθ(y∣x)−logZ(x)]代入新构造的概率分布π∗=πθminEx∼D,y∼πθ(y∣x)[logπ∗(y∣x)πθ(y∣x)]Z(x)与θ无关,丢掉=πθminEx∼DDKL[πθ(y∣x)∣∣π∗(y∣x)]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(y∣x)π∗(y∣x)+β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(ywin∣x)π∗(ywin∣x)−βlogπref(ylose∣x)π∗(ylose∣x)]}
我们可以用这个目标函数直接去优化
π
θ
\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(ywin∣x)πθ(ywin∣x)−βlogπref(ylose∣x)πθ(ylose∣x)]}(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 算法,对偏好数据集的质量要求更高。