[写在开头] 小白第一次在CSDN写博客,希望大家多多支持,后面会不断更新。
1. 摘要
这篇文章是斯坦福在2023年5月提出的工作,由于基于人类反馈的强化学习(RLHF)的复杂性和不稳定性(玄学),论文希望提出一个更加简单轻量且稳定的优化算法。于是,论文通过严格(硬核)的数学推导,提出了直接偏好优化算法(DPO)。
这篇文章的贡献点是,提出了直接偏好优化算法(DPO)。
2. 基于人类反馈的强化学习(RLHF)
RLHF通常包含三个阶段,有监督微调(SFT),奖励模型建模和强化学习微调。
2.1 有监督微调(SFT)
在这一阶段,RLHF旨在于通过有监督学习的方式,利用最大化似然的方法得到一个通用的语言模型
π
S
F
T
\pi^{SFT}
πSFT 作为后续训练的基础模型。
2.2 奖励模型建模
在得到通用语言模型后
π
S
F
T
\pi^{SFT}
πSFT 通过设计prompt
x
x
x,我们可以得到一个输出
y
1
、
y
2
y_1、y_2
y1、y2 。然而,这两个输出是有好有坏的。根据 Bradley-Terry模型,我们的偏好可以通过一个隐性的奖励模型来表示
r
∗
(
x
,
y
)
r^{*}(x,y)
r∗(x,y) 。
其中
y
1
y_1
y1 比
y
2
y_2
y2 好的概率可以被表达为:
p
∗
(
y
1
>
y
2
∣
x
)
=
e
x
p
(
r
∗
(
x
,
y
1
)
)
e
x
p
(
r
∗
(
x
,
y
1
)
)
+
e
x
p
(
r
∗
(
x
,
y
2
)
)
p^{*}(y_1>y_2 | x)=\frac{exp(r^{*}(x,y_1))}{exp(r^{*}(x,y_1))+exp(r^{*}(x,y_2))}
p∗(y1>y2∣x)=exp(r∗(x,y1))+exp(r∗(x,y2))exp(r∗(x,y1))
根据概率统计的知识,通过采样一系列这样的输出对构成数据集
D
=
{
x
i
,
y
w
i
,
y
l
i
}
i
=
1
N
D=\left\{x^i,y_w^i,y_l^i\right\}^N_{i=1}
D={xi,ywi,yli}i=1N ,其中
y
w
、
y
l
y_w、y_l
yw、yl 分别代表好的输出和坏的输出,通过最大化似然方法,我们就可以对奖励模型进行参数估计,得到奖励模型
r
ϕ
(
x
,
y
)
r_{\phi}(x,y)
rϕ(x,y)
于是,在训练中,我们的优化目标就是最小化负对数似然损失,即
L
R
(
r
ϕ
,
D
)
=
−
E
(
x
,
y
w
,
y
l
)
∼
D
[
l
o
g
σ
(
r
ϕ
(
x
,
y
w
)
−
r
ϕ
(
x
,
y
l
)
)
]
L_R(r_{\phi},D)=-E_{(x,y_w,y_l)\sim D}[log \sigma(r_{\phi}(x,y_w)-r_{\phi}(x,y_l))]
LR(rϕ,D)=−E(x,yw,yl)∼D[logσ(rϕ(x,yw)−rϕ(x,yl))],其中
σ
\sigma
σ 是 logistic 函数。
训练语言模型时,
r
ϕ
(
x
,
y
)
r_{\phi}(x,y)
rϕ(x,y) 通常用
π
S
F
T
(
y
∣
x
)
\pi^{SFT}(y|x)
πSFT(y∣x) 加一个线性层去初始化。
2.3 强化学习微调
在强化学习微调阶段,我们通过上一阶段学习到的奖励模型给待训练的语言模型提供反馈,训练policy
π
θ
(
x
,
y
)
\pi_{\theta}(x,y)
πθ(x,y) ,因此,我们的优化目标是
m
a
x
π
θ
E
x
∼
D
,
y
∼
π
θ
(
y
∣
x
)
[
r
ϕ
(
x
,
y
)
]
−
β
∗
D
K
L
[
π
θ
(
y
∣
x
)
∣
∣
π
r
e
f
(
y
∣
x
)
]
max_{\pi_{\theta}} E_{x \sim D, y \sim \pi_{\theta}(y|x)}[r_{\phi}(x,y)]-\beta*D_{KL}[\pi_{\theta}(y|x) || \pi_{ref}(y|x)]
maxπθEx∼D,y∼πθ(y∣x)[rϕ(x,y)]−β∗DKL[πθ(y∣x)∣∣πref(y∣x)]
其中
β
\beta
β 是参数,防止训练得到的 policy 偏离
π
r
e
f
\pi_{ref}
πref 太远,
π
r
e
f
\pi_{ref}
πref 即
π
S
F
T
\pi^{SFT}
πSFT 。
在实际训练中,
π
θ
\pi_{\theta}
πθ通常用
π
r
e
f
\pi_{ref}
πref初始化。
3. 直接偏好优化算法(DPO)
从RLHF的流程上我们可以看出,先训练奖励模型——再利用奖励模型进行policy的强化学习,这种两步走的方式实际上比较繁琐,耗费计算资源。因此,DPO直接省略了奖励模型的建模过程 ( 后面细思一下其实是隐性地包含在了policy的训练中 ) ,如下图所示。
从RLHF第三阶段目标函数出发,
m
a
x
π
θ
E
x
∼
D
,
y
∼
π
θ
(
y
∣
x
)
[
r
ϕ
(
x
,
y
)
]
−
β
∗
D
K
L
[
π
θ
(
y
∣
x
)
∣
∣
π
r
e
f
(
y
∣
x
)
]
max_{\pi_{\theta}} E_{x \sim D, y \sim \pi_{\theta}(y|x)}[r_{\phi}(x,y)]-\beta*D_{KL}[\pi_{\theta}(y|x) || \pi_{ref}(y|x)]
maxπθEx∼D,y∼πθ(y∣x)[rϕ(x,y)]−β∗DKL[πθ(y∣x)∣∣πref(y∣x)]
它的解的形式一定是
π
θ
(
y
∣
x
)
=
1
Z
(
x
)
π
r
e
f
(
y
∣
x
)
e
x
p
(
1
β
r
(
x
,
y
)
)
\pi_{\theta}(y|x)=\frac{1}{Z(x)} \pi_{ref}(y|x) exp(\frac{1}{\beta} r(x,y))
πθ(y∣x)=Z(x)1πref(y∣x)exp(β1r(x,y))
其中
Z
(
x
)
=
∑
y
π
r
e
f
(
y
∣
x
)
e
x
p
(
1
β
r
(
x
,
y
)
)
Z(x)=\sum_y\pi_{ref}(y|x) exp(\frac{1}{\beta} r(x,y))
Z(x)=∑yπref(y∣x)exp(β1r(x,y)) 代表分布函数,
r
(
x
,
y
)
r(x,y)
r(x,y) 代表奖励模型。
通过对这个解两边取对数,并整理,可以得到
r
(
x
,
y
)
=
β
l
o
g
π
θ
(
y
∣
x
)
π
r
e
f
(
y
∣
x
)
+
β
l
o
g
Z
(
x
)
r(x,y)=\beta log\frac{\pi_{\theta}(y|x)}{\pi_{ref}(y|x)}+\beta logZ(x)
r(x,y)=βlogπref(y∣x)πθ(y∣x)+βlogZ(x)
接下来我们就用这条公式去替换奖励函数,从而隐性地把奖励函数消掉。
于是,在 Bradley-Terry偏好模型中, 第一条输出比第二条好的概率就变成了
p
∗
(
y
1
>
y
2
∣
x
)
=
1
1
+
e
x
p
(
β
l
o
g
π
θ
(
y
2
∣
x
)
π
r
e
f
(
y
2
∣
x
)
−
β
l
o
g
π
θ
(
y
1
∣
x
)
π
r
e
f
(
y
1
∣
x
)
)
p^{*}(y_1>y_2|x)=\frac{1}{1+exp( \beta log\frac{\pi_{\theta}(y_2|x)}{\pi_{ref}(y_2|x)}-\beta log\frac{\pi_{\theta}(y_1|x)}{\pi_{ref}(y_1|x)})}
p∗(y1>y2∣x)=1+exp(βlogπref(y2∣x)πθ(y2∣x)−βlogπref(y1∣x)πθ(y1∣x))1
在RLHF第二阶段中,我们估计的是奖励函数,换了变量以后,我们其实就变成了直接估计policy,
我们的优化目标同样是最小化负对数似然,但是式子变了,即
于是,我们相当于在RLHF第二阶段就把policy找出来了,省略掉了奖励函数和RLHF第三阶段的强化学习。
4. 总结与对比
根据对RLHF和DPO的学习我们可以看出,他们的流程分别是这样的。
RLHF:先训一个参考模型,再找一个奖励模型,最后用这个奖励模型去对模型进行强化学习找policy。
DPO:先训一个参考模型,然后找到训练模型的policy。
事实上,从对DPO的学习我们也可以看出,它是RLHF的由果推因,即使用(由奖励函数推出来的)policy反解奖励函数,然后代入Bradley-Terry偏好模型消去奖励函数,得到优化目标。细思一下,其实这个优化目标里隐性地包含了对奖励模型的学习(这一点从损失函数的更新就可以看出),但确实大大简化了流程,不需要强化学习了。
5. 实验
最后是作者做的实验,和几个算法对比,验证DPO算法的有效性。
最后一个实验是在GPT4上使用DPO算法,并且看看人是否认同GPT4。
以上就是2023年这篇"Direct Preference Optimization: Your Language Model is Secretly a Reward Model" 的阅读笔记,创作不易,希望大家多多关注。
【创作不易,转载请注明出处】