我们将探讨直接偏好优化(Direct Preference Optimization,简称DPO)和简单偏好优化(Simple Preference Optimization,简称SimPO)这两篇论文。这两种方法都是无需强化学习(Reinforcement Learning,简称RL)的对齐优化技术。本文是继我之前关于从PPO到GRPO在语言建模中的应用文章的后续。

强化学习(RL)优化的问题

强化学习(RL)在实际应用中存在一些挑战,因为它对超参数非常敏感,并且在计算上更加昂贵。在RL中的演员-评论家算法由于方差较大,导致训练过程不稳定。为了缓解这个问题,我们使用广义优势估计(Generalized Advantage Estimation)和价值函数作为基线。然而,学习价值函数本身也是计算成本高昂的。在GRPO中,我们消除了价值函数,简化了价值函数的近似。

因此,我们寻求一种无需RL的对齐技术。我们选择RL的原因是为了最大化以下方程,但这个方程不可微分。因此,我们必须采样输出并估计它,以便我们可以最大化它(因此需要RL)。

这里,x是输入提示,y是补全。pi_ref是参考模型策略。

语言模型的策略是每个下一个标记的自回归概率分布的乘积。P(x_1, x_2, …, x_n) = P(x_1) * P(x_2|x_1) * P(x_3|x_1, x_2) * … * P(x_n|x_1, …, x_{n-1}),其中每个P(x_i|x_1, …, x_{i-1})是策略π(a|s)在第i步,s是序列直到x_{i-1}。

这种乘法给出了整个序列在模型参数下的可能性,但它本身并不是策略——它是反复应用策略直到补全序列结束的结果。

我们必须重新制定这种最大化,以便我们不必单独估计或训练一个奖励模型。你的语言模型实际上是一个奖励模型,因此,它的策略(对数几率上的softmax)应该对好的响应高,对差的响应低。

推导DPO目标

将当前策略(正在训练的语言模型)和参考语言模型策略(预训练后的SFT模型)的KL散度代入。

在PyTorch中,我们通常最小化一个损失函数,因此,我们必须将上述最大化目标转换为最小化目标,通过取上述公式的负值。

我们还可以提取出beta,因为它是一个正常数,并将其与r(x,y)一起放置。

现在,让我们定义一个来自参考模型的最优策略(oracle策略)。

最优策略

分母被称为划分函数。这看起来非常像softmax操作,我们通过奖励加权参考策略,分母是所有可能补全的总和。正如你猜的,这是不可行的,因为我们必须写下所有可能的提示输出,然后通过奖励模型给它们一个标量奖励。

现在,让我们将pi_ref代入前面的方程。

取对数后,我们可以取消r(x,y)项。

为了最小化这个目标,我们需要pi和pi具有相同的分布,因为它是pi和pi之间的KL散度。因此,如果我们能够近似pi*策略,那么我们将实现我们的目标。

之前,我们将pi*表示为参考模型策略的函数;让我们再次回顾它。

现在,我们将对两边取对数。

将r(x,y)带到LHS。

我们开始重新制定奖励模型,使其可以作为策略的函数,以便我们不必训练另一个奖励模型,现在我们已经重新制定了问题。

布拉德利-特里模型

布拉德利-特里模型估计了在给定输入提示x的情况下,偏好获胜响应(yw)而不是失败响应(yl)的概率。我们上面推导出了r(x,y),我们可以将其代入布拉德利-特里方程。

标记突出显示的项。

现在,我们将分子在分子和分母中都除以。

使用属性exp(A)/exp(B) = exp(A-B)。

我们能够在这里取消Z(x)项,我们之前讨论过这是不可行的。类比是,我们不必考虑输入提示的所有可能结果,而是可以查看偏好数据集,并根据获胜和失败响应之间的相对差异优化我们的策略。由于它们都依赖于划分函数Z(x),如果我们考虑相对差异,我们可以取消它。

机器学习中的Sigmoid函数

现在,如果我们要将其重新制定为sigmoid函数,那么我们需要乘以一个负号。

现在yw和yl在使其成为sigmoid后已经反转。

通常,对数值更平滑,因此我们将最小化上述目标的负对数似然。

论文中的DPO公式看起来像这样。

作为pi*是我们策略的代理,我们可以替换我们当前的策略pi_theta。

我们的目标现在不依赖于奖励模型;相反,策略是一个秘密的学习者奖励。在PPO-RLHF中,如果训练分布发生变化,我们必须刷新我们的奖励模型,但在这里,我们只需要提供偏好数据集,模型策略就会继续学习,而不需要显式依赖于奖励计算。

简单偏好优化(SimPO)

我在听Hanna Hajishirzi教授的讲座时,她提到Ai21实验室探索了DPO的另一种变体,SimPO和长度归一化的DPO。

让我们看看DPO的一些缺点

问题1:我们对下一个标记的自回归对数概率求和以计算可能性。如果获胜响应比失败响应长,其整体对数概率(由于0到1之间的概率的对数是负值,因此是负值之和)将会更低。因此,为了最大化目标,模型可能会人为地提高获胜响应的概率,导致奖励黑客攻击。

问题2:我们需要在训练期间保持参考模型在内存中,这增加了额外的计算和内存开销。

问题3:在训练期间,DPO目标最大化策略的可能性,同时通过参考模型的可能性进行归一化。这种归一化使方法对奖励规模的变化更加健壮。例如,如果每个奖励项都添加了一个常数,未归一化的方法将产生一个完全不同的策略,而归一化的方法将受到较小的影响。

然而,在推理期间,我们希望模型输出令牌,以便它最大化整个序列的对数可能性。DPO在训练期间优化的奖励和推理之间存在不匹配。

现在,让我们看看SimPO如何解决每个问题
解决问题1

问题1讨论了响应生成长度。这导致更长的响应,因为模型必须人为地提高获胜响应的所有标记的概率,这将导致糟糕的响应。我们可以通过按生成长度归一化目标来解决这个问题。

借鉴文本生成中的束搜索,我们通过生成长度归一化概率,以便我们可以准确比较不同长度的不同轨迹。同样,我们可以通过响应长度进行归一化。

解决问题2和3

训练期间的参考模型偏离了推理期间的目标,因此我们可以摆脱参考模型,而是只优化更高可能性的目标。

因此,奖励模型将是:

SimPO的奖励模型

此外,在摆脱训练期间的参考模型后,我们可以减少计算和内存开销。

最终的SimPO目标看起来像这样。

这使我们结束了我的LLM对齐系列。如果有任何疑问,我随时欢迎您的评论。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注