直接偏好优化(Direct Preference Optimization,DPO):论文与源码解析

news2025/4/25 16:34:35

简介

虽然大规模无监督语言模型(LMs)学习了广泛的世界知识和一些推理技能,但由于它们是基于完全无监督训练,仍很难控制其行为。

微调无监督LM使其对齐偏好,尽管大规模无监督的语言模型(LMs)能够学习广泛的世界知识和一些推理技能,但由于它们的训练完全是无监督的,要精确控制它们的行为是困难的。

现有方法为了获得这种可操纵性,会收集人类对模型生成内容相对质量的标签,并微调无监督LM,使其与这些偏好一致,通常会使用基于人类反馈的强化学习(RLHF)。然而,RLHF是一个复杂且经常不稳定的过程,首先需要拟合一个反映人类偏好的奖励模型,然后使用强化学习微调大型无监督LM,以最大化这个估计奖励,同时不太偏离原始模型。

在这篇论文中,我们介绍了一个RLHF中新的奖励模型参数化方法,该方法可以在闭式中提取对应的最优策略,使我们仅使用简单的分类损失来解决标准的RLHF问题。最终算法我们称之为直接偏好优化(DPO),该算法稳定、性能良好且计算成本低,无需在微调时从LM中进行抽样或进行显著的超参数调整。

实验表明,DPO可以与现有方面一样或更好地微调LM以对齐人类偏好。值得注意的是,使用DPO微调LMs在控制生成内容的情感方面超过了基于PPO的RLHF,并且在摘要和单轮对话的回复质量上效果相当或有提升,同时大大地简化了实现和训练过程。

1 介绍

在大型数据集上训练的大规模无监督语言模型(LMs)获得了惊人能力。然而,这些模型是在人类生成的具有多样化的目标、优先级和技能的数据集上训练的。

然而,这些模型是基于具有各种目标、优先级和技能集的人类生成的数据进行训练的。其中一些目标和技能集我们可能并不想模仿;例如,我们想要我们的AI编程助手理解常见的编程错误并纠正,但在生成代码时,我们希望我们的模型倾向于它训练数据中存在的(可能很罕见)高质量编程能力。同样地,我们希望我们的语言模型能理解50%的人相信的常见误解,但我们当然不希望模型在关于这个误解的查询中有50%声称它是真的!换句话说,从模型广泛的知识和能力中选择期望的回复和行为,对于构建安全、高效和可控的AI系统来说,是至关重要的。

虽然现有方法通常使用强化学习(RL)引导LMs对齐人类偏好,但我们将证明现有方法使用的基于RL的目标,可以通过简单的二元交叉熵目标精确地优化,大大地简化了偏好学习流程。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/64f56ff8170c4d8ea82ae8658d241923.png
在这里插入图片描述

图1:DPO不使用强化学习优化人类偏好。现有的使用人类反馈微调语言模型的方法,首先是在一些提示和人类对提示的多个响应的偏好的数据集上拟合一个奖励模型,然后使用RL寻找可以最大化学习奖励的策略。与之相反,DPO使用一个简单的分类目标直接优化最能满足偏好的策略,拟合一个隐式的奖励模型,其对应的最优策略可从闭式中提取。

在高层次上,现有方法使用精心策划的人类偏好集合向语言模型灌输期望行为,这些偏好表示人类认为安全且有用的行为类型。这种偏好学习发生在初始的大型文本数据集上大规模无监督预训练阶段之后。

虽然最直接的偏好学习方法是在高质量的人类示例响应上有监督微调,但最成功的方法类别是基于人类(或AI)反馈的强化学习(RLHF/RLAIF)。RLHF方法对一个人类偏好数据集拟合一个奖励模型,然后使用RL来优化一个语言模型策略,以产生被分配了高奖励的响应,同时不过度偏离原始模型。

虽然RLHF产生了在对话和编码能力上表现不错的模型,但RLHF流程比监督学习复杂的多,涉及多LMs训练以及在训练循环中从LM策略中采样,导致计算成本非常高。

本文中,我们展示了如何直接优化语言模型以遵循人类偏好,无需显式的奖励建模或者强化学习。我们提出了一种直接偏好优化(DPO)算法,它隐式地优化与已有的RLHF算法相同的目标(KL散度约束的奖励最大化),但实现简单,训练直接。直觉上,相对于不偏好响应,DPO更新增加了偏好响应的对数概率,但它包含了一个动态的、每个例子的重要性权重,这可以防止我们发现的使用朴素的概率目标时出现的模型退化。

与现有方法一致,DPO依赖于一个理论偏好模型(例如Bradley-Terry模型);该模型衡量给定奖励函数与经验偏好数据的一致性。然而,尽管现有方法使用偏好模型定义偏好损失来训练奖励模型,然后再训练一个策略优化学好的奖励模型,DPO使用一个变量变体直接将偏好损失定义为策略函数。给定一个模型响应的人类偏好数据集,DPO因此可以使用简单的二元交叉熵目标来优化策略,产生一个对隐式奖励函数的最优策略,以拟合偏好数据。

我们主要的贡献是直接偏好优化(DPO),一种简单从偏好中训练语言模型的非强化学习算法。实验证明,DPO至少与现有方法(包括基于PPO的RLHF)的性能相当,可以使用多达6B参数的语言模型,从情感调节、总结、对话等任务中的偏好中学习。

2 相关工作

规模不断增大的语言模型可以使用零样本或少样本提示完成一些任务。然而,在指令和人工回复的数据集上微调,对于提升这些模型的性能和对齐用户意图至关重要。“指令微调”过程可以使LLMs在指令微调数据集之外的指令上具备泛化性,通常增加了模型的可用性。

尽管指令微调取得了成功,但相对于专家示例来说,人类判别回复质量的数据更容易收集【排序数据比生成数据容易收集】。因此,后续的工作利用人类偏好数据集微调LLM,以提升模型在翻译、总结、故事编写、指令遵循等方面的专业性。

这些方法首先利用偏好数据集优化一个神经网络奖励函数,以兼容偏好数据集下的偏好模型。然后,使用强化学习算法微调一个语言模型,以最大化给定奖励,常见方法有REINFORCE、PPO及其变体。

这项紧密相关的工作是,利用经过人类反馈微调的LLMs来遵循指示,生成针对特定属性(如安全性和无害性)的额外合成偏好数据,以LLM的注释形式为准则,只使用人类提供的弱监督进行文本标注。

这些方法代表了两个领域的融合:一个工作领域是使用强化学习训练语言模型用于各种目标,另一个领域是从人类偏好中学习的通用方法。

尽管使用相对人类偏好的方法具有吸引力,但使用强化学习微调大语言模型仍是一种主要的实践挑战;本文提供了一种合理的方法论,可不使用RL优化相对偏好。

在语言之外的领域,从偏好中学习策略已在赌博机和强化学习环境中进行了研究,并提出了几种方法。

使用偏好或行动排序而非奖励的上下文赌博机制学习,被称为上下文对决赌博机制(CDB)。在缺乏绝对奖励的情况下,CDB的理论分析将最优策略的概念替换为冯·诺依曼赢家,其对其他任何策略的预期胜率至少为50%。然而在CDB场景,偏好标签是在线给出的,而在人类偏好学习中,我们通常是从固定的离线偏好标注的批次中学习。

类似地,基于偏好的RL(PbRL)从未知的“评分”函数中学习二元偏好,而非奖励。目前存在各种PbRL,包括可以重用离线偏好数据的方法,但通常涉及首先明确估计潜在的评分函数(即奖励模型),然后再进行优化。相反,我们提出了一种单阶段策略学习方法,直接优化策略来满足偏好。

3 预备知识

我们回顾一下Ziegler等人提出的RLHF pipeline,其通常包括三个阶段:

  1. 监督微调(SFT)
  2. 偏好采样和奖励学习
  3. RL优化

监督微调(SFT): RLHF的初始模型 π SFT \pi^\text{SFT} πSFT,通常是在高质量的感兴趣的下游任务(如对话、总结等)上使用监督学习微调的预训练的语言模型。

奖励建模阶段(Reward Modeling Phase): 在第二阶段,SFT模型使用提示 x x x,产生答案对 ( y 1 , y 2 ) ∼ π SFT ( y ∣ x ) (y_1, y_2) \sim \pi^\text{SFT}(y|x) (y1,y2)πSFT(yx)。然后让标注员从这些答案对中标注一个偏好的答案,表示为 y w > y l ∣ x y_w > y_l | x yw>ylx,其中 y w y_w yw y l y_l yl分别表示偏好回复和不偏好回复。假设这些偏好是由一些潜在的奖励模型生成的,但实际上我们并不能访问这些奖励模型。

存在一些建模偏好的方法,Bradley-Terry (BT) 模型是一个常见的选择(尽管更一般的Plackett-Luce排序模型在我们可以访问的多个排序答案时也与该框架兼容)。BT模型将人类偏好分布 p ∗ p^* p定义为以下形式:
p ∗ ( y 1 > y 2 ∣ x ) = exp ⁡ ( r ∗ ( x 1 , y 1 ) ) exp ⁡ ( r ∗ ( x , y 1 ) ) + exp ⁡ ( r ∗ ( x , y 2 ) ) = 1 1 + exp ⁡ ( r ∗ ( x , y 2 ) − r ∗ ( x , y 1 ) ) = σ ( r ∗ ( x , y 1 ) − r ∗ ( x , y 2 ) ) \begin{align} p^*(y_1>y_2|x) &=\frac{\exp(r^*(x_1, y_1))}{\exp(r^*(x, y_1)) + \exp(r^*(x, y_2))} \\ &=\frac{1}{1+\exp(r^*(x,y_2)-r^*(x,y_1))}=\sigma(r^*(x,y_1)-r^*(x,y_2)) \tag 1 \end{align} p(y1>y2x)=exp(r(x,y1))+exp(r(x,y2))exp(r(x1,y1))=1+exp(r(x,y2)r(x,y1))1=σ(r(x,y1)r(x,y2))(1)

假设可以访问从 p ∗ p^* p中采样的一个静态数据集 D = { x ( i ) , y w ( i ) , y l ( i ) } i = 1 N \mathcal D = \{x^{(i)}, y_w^{(i)}, y_l^{(i)}\}_{i=1}^N D={x(i),yw(i),yl(i)}i=1N,那么我们可以参数化奖励模型 r ϕ ( x , y ) r_\phi(x,y) rϕ(x,y),并通过最大似然来估计参数。将问题框定为二分类问题,我们有以下负对数似然损失:
L R ( r ϕ , D ) = − E ( x , y w , y l ) [ log ⁡ σ ( r ϕ ( x , y w ) − r ϕ ( x , y l ) ) ] (2) \mathcal L_R(r_\phi, \mathcal D)=-\mathbb E_{(x,y_w,y_l)} \big[\log \sigma(r_\phi(x,y_w)-r_\phi(x,y_l))\big] \tag 2 LR(rϕ,D)=E(x,yw,yl)[logσ(rϕ(x,yw)rϕ(x,yl))](2)

其中, σ \sigma σ为逻辑函数。在LMs的背景下,网络 r ϕ ( x , y ) r_\phi(x,y) rϕ(x,y)通常是从SFT模型 π SFT ( y ∣ x ) \pi^\text{SFT}(y|x) πSFT(yx)初始化,并且在transformer的最后一层加上线性层,用于预测奖励标量值。为保证奖励函数低方差,此前工作对奖励做了标准化,例如对于所有的 x x x,使得 E x , y ∼ D [ r ϕ ( x , y ) ] = 0 \mathbb E_{x,y\sim\mathcal D}[r_\phi(x,y)]=0 Ex,yD[rϕ(x,y)]=0

强化学习微调阶段(RL Fine-Tuning Phase): 在强化学习阶段,我们使用学习好的奖励函数为语言模型提供反馈。具体来说,我们用公式表示以下最优问题:
max ⁡ π θ E x ∼ D , y ∼ π θ ( y ∣ x ) [ r ϕ ( x , y ) ] − β D KL [ π θ ( y ∣ x )   ∣ ∣   π ref ( y ∣ x ) ] (3) \max_{\pi_\theta}\mathbb E_{x\sim\mathcal D, y\sim\pi_\theta(y|x)}\big[r_\phi(x,y)\big]-\beta\mathbb D_\text{KL}\big[\pi_\theta(y|x)\ ||\ \pi_\text{ref}(y|x)\big] \tag 3 πθmaxExD,yπθ(yx)[rϕ(x,y)]βDKL[πθ(yx) ∣∣ πref(yx)](3)
其中, β \beta β是用于控制与基础参考模型 π ref \pi_\text{ref} πref(即初始的SFT模型 π SFT \pi^\text{SFT} πSFT)之间偏差的参数。实际上,语言策略模型也是从 π SFT \pi^\text{SFT} πSFT初始化。这个附加约束非常重要,它可防止模型偏离奖励模型准确度高的分布太远,同时也可以保持生成多样性以及防止模型在某个高奖励答案上出现坍塌。

由于语言生成离散性,该目标函数不可微,因此通常使用强化学习优化。标准方法通常是构建以下形式的奖励函数,并使用PPO优化。
r ( x , y ) = r ϕ ( x , y ) − β ( log ⁡ π θ ( y ∣ x ) − log ⁡ π ref ( y ∣ x ) ) r(x,y)=r_\phi(x,y)-\beta(\log\pi_\theta(y|x)-\log\pi_\text{ref}(y|x)) r(x,y)=rϕ(x,y)β(logπθ(yx)logπref(yx))

4 直接偏好优化

受大规模问题(如微调语言模型)上应用强化学习存在挑战的驱动,我们的目标是推演出一种直接使用偏好的简单的策略优化方法。不同于之前的RLHF模型,此类方法先学习奖励模型然后再使用RL优化,我们的方法利用了一种特定的奖励模型参数化选择,使得可以以闭式提取其最优策略,而不需要RL训练循环。

接下来我们详细描述,我们的关键观点是利用从奖励函数到最优策略的分析映射,这使我们能够将奖励函数的损失函数转化为策略的策略损失。这种变量改变的方法避免了拟合显式、独立的奖励模型,而是在现有的人类偏好模型(如Bradley-Terry模型)下进行优化。本质上,策略网络代表语言模型和(隐式)奖励。

推演DPO目标函数

我们从与之前工作相同的RL目标开始,即公式3,针对一个通用的奖励函数 r r r。根据之前工作,很显而易见,在公式3中,KL约束下的奖励最大化目标的最优解具有以下形式:
π r ( y ∣ x ) = 1 Z ( x ) π ref ( y ∣ x ) exp ⁡ ( 1 β r ( x , y ) ) (4) \pi_r(y|x)=\frac{1}{Z(x)}\pi_\text{ref}(y|x)\exp\Big(\frac{1}{\beta}r(x,y)\Big) \tag 4 πr(yx)=Z(x)1πref(yx)exp(β1r(x,y))(4)
其中, Z ( x ) = ∑ y π r e f ( y ∣ x ) exp ⁡ ( 1 β r ( x , y ) ) Z(x)=\sum_y\pi_{ref}(y|x)\exp\Big(\dfrac{1}{\beta}r(x,y)\Big) Z(x)=yπref(yx)exp(β1r(x,y))为配分函数。

推导过程(详见附录A.1)
max ⁡ π E x ∼ D , y ∼ π θ ( y ∣ x ) [ r ( x , y ) ] − β D KL [ π ( y ∣ x )   ∣ ∣   π ref ( y ∣ x ) ] = max ⁡ π E x ∼ D , y ∼ π [ r ( x , y ) ] − E x ∼ D , y ∼ π [ β log ⁡ π ( y ∣ x ) π ref ( y ∣ x ) ] = min ⁡ π E x ∼ D , y ∼ π [ log ⁡ π ( y ∣ x ) π ref ( y ∣ x ) − 1 β r ( x , y ) ] = min ⁡ π E x ∼ D , y ∼ π [ log ⁡ π ( y ∣ x ) π ref ( y ∣ x ) exp ⁡ ( 1 β r ( x , y ) ) 1 Z ( x ) Z ( x ) ] = min ⁡ π E x ∼ D , y ∼ π [ log ⁡ π ( y ∣ x ) 1 Z ( x ) π ref ( y ∣ x ) exp ⁡ ( 1 β r ( x , y ) ) − log ⁡ Z ( x ) ] \begin{align} & \max_\pi\mathbb E_{x\sim\mathcal D, y\sim\pi_\theta(y|x)}\big[r(x,y)\big]-\beta\mathbb D_\text{KL}\big[\pi(y|x)\ ||\ \pi_\text{ref}(y|x)\big]\\ &=\max_\pi\mathbb E_{x\sim\mathcal D,y\sim\pi}\Big[r(x,y)\Big]- \mathbb E_{x\sim\mathcal D,y\sim\pi}\Big[\beta\log\frac{\pi(y|x)}{\pi_\text{ref}(y|x)}\Big] \\ &=\min_\pi\mathbb E_{x\sim\mathcal D,y\sim\pi}\Big[\log\frac{\pi(y|x)}{\pi_\text{ref}(y|x)}-\frac{1}{\beta}r(x,y)\Big]\\ &=\min_\pi\mathbb E_{x\sim\mathcal D,y\sim\pi}\Big[\log\frac{\pi(y|x)}{\pi_\text{ref}(y|x)\exp\Big(\dfrac{1}{\beta}r(x,y)\Big)\dfrac{1}{Z(x)}Z(x)}\Big]\\ &=\min_\pi\mathbb E_{x\sim\mathcal D,y\sim\pi}\Big[\log\frac{\pi(y|x)}{\frac{1}{Z(x)}\pi_\text{ref}(y|x)\exp\Big(\dfrac{1}{\beta}r(x,y)\Big)}-\log Z(x)\Big] \end{align} πmaxExD,yπθ(yx)[r(x,y)]βDKL[π(yx) ∣∣ πref(yx)]=πmaxExD,yπ[r(x,y)]ExD,yπ[βlogπref(yx)π(yx)]=πminExD,yπ[logπref(yx)π(yx)β1r(x,y)]=πminExD,yπ[logπref(yx)exp(β1r(x,y))Z(x)1Z(x)π(yx)]=πminExD,yπ[logZ(x)1πref(yx)exp(β1r(x,y))π(yx)logZ(x)]

Z ( x ) = ∑ y π ref ( y ∣ x ) exp ⁡ ( 1 β r ( x , y ) ) Z(x)=\sum_y\pi_\text{ref}(y|x)\exp\Big(\dfrac{1}{\beta}r(x,y)\Big) Z(x)=yπref(yx)exp(β1r(x,y)),则上述分母为概率分布,定义为 π ∗ ( y ∣ x ) \pi^*(y|x) π(yx)。由于 Z ( x ) Z(x) Z(x)不是 π \pi π的函数,最小化时可忽略,因此:
max ⁡ π E x ∼ D , y ∼ π θ ( y ∣ x ) [ r ( x , y ) ] − β D KL [ π ( y ∣ x )   ∣ ∣   π ref ( y ∣ x ) ] = min ⁡ π E x ∼ D , y ∼ π [ log ⁡ π ( y ∣ x ) π ∗ ( y ∣ x ) − log ⁡ Z ( x ) ] = min ⁡ π E x ∼ D , y ∼ π [ log ⁡ π ( y ∣ x ) π ∗ ( y ∣ x ) ] = min ⁡ π E x ∼ D [ D K L ( π ( y ∣ x )   ∣ ∣   π ∗ ( y ∣ x ) ) ] \begin{align} & \max_\pi\mathbb E_{x\sim\mathcal D, y\sim\pi_\theta(y|x)}\big[r(x,y)\big]-\beta\mathbb D_\text{KL}\big[\pi(y|x)\ ||\ \pi_\text{ref}(y|x)\big]\\ &=\min_\pi\mathbb E_{x\sim\mathcal D,y\sim\pi}\Big[\log\frac{\pi(y|x)}{\pi^*(y|x)}-\log Z(x)\Big]\\ &=\min_\pi\mathbb E_{x\sim\mathcal D,y\sim\pi}\Big[\log\frac{\pi(y|x)}{\pi^*(y|x)}\Big]\\ &=\min_\pi\mathbb E_{x\sim\mathcal D}[\mathbb D_{KL}(\pi(y|x)\ ||\ \pi^*(y|x))] \end{align} πmaxExD,yπθ(yx)[r(x,y)]βDKL[π(yx) ∣∣ πref(yx)]=πminExD,yπ[logπ(yx)π(yx)logZ(x)]=πminExD,yπ[logπ(yx)π(yx)]=πminExD[DKL(π(yx) ∣∣ π(yx))]

因此,最优解 π r ( y ∣ x ) \pi_r(y|x) πr(yx) π ∗ ( y ∣ x ) \pi^*(y|x) π(yx),得证。

即使我们使用MLE估计奖励函数 r ∗ r^* r的真值 r ϕ r_\phi rϕ,配分函数 Z ( x ) Z(x) Z(x)仍难以估计,使得这种表示方法实际上难以应用。然而,我们可以重新整理公式4,将奖励函数表示为最优策略 π r \pi_r πr、参考策略 π ref \pi_\text{ref} πref和未知配分函数 Z ( ⋅ ) Z(\cdot) Z()的函数。具体来说,我们先对公式4两边取对数,然后进行一些代数运算可以得到:
r ( x , y ) = β log ⁡ π r ( y ∣ x ) π ref ( y ∣ x ) + β log ⁡ Z ( x ) (5) r(x,y)=\beta\log\frac{\pi_r(y|x)}{\pi_\text{ref}(y|x)}+\beta\log Z(x) \tag 5 r(x,y)=βlogπref(yx)πr(yx)+βlogZ(x)(5)
我们可以将这个重参数化的模型应用到真实奖励 r ∗ r^* r和对应的最优模型 π ∗ \pi^* π。幸运的是,Bradley-Terry模型仅依赖于两种回复的奖励差异,见公式1。将公式5带入公式1参考模型,可消去配分函数。此时,我们可以仅使用优化策略 π ∗ \pi^* π和参考策略 π ref \pi_\text{ref} πref表示人类偏好概率。因此,BT模型下的最优RLHF策略 π ∗ \pi^* π满足参考模型:
p ∗ ( y 1 > y 2 ∣ x ) = 1 1 + exp ⁡ ( β log ⁡ π ∗ ( y 2 ∣ x ) π ref ( y 2 ∣ x ) − β log ⁡ π ∗ ( y 1 ∣ x ) π ref ( y 1 ∣ x ) ) (6) p^*(y_1>y_2|x)=\frac{1}{1+\exp\Big(\beta\log\frac{\pi^*(y_2|x)}{\pi_\text{ref}(y_2|x)}-\beta\log\frac{\pi^*(y_1|x)}{\pi_\text{ref}(y_1|x)}\Big)} \tag 6 p(y1>y2x)=1+exp(βlogπref(y2x)π(y2x)βlogπref(y1x)π(y1x))1(6)
推导过程详见附录A.2。尽管公式6使用BT模型,但我们仍可以在更通用的Plackett-Luce下推演出相似的表达,详见附录A.3。

现在我们有优化策略形式的人类偏好数据的概率,而不是奖励模型,我们可以为参数策略 π θ \pi_\theta πθ定义形式化的最大似然目标。类似于奖励建模方法(即公式2),我们的策略目标变为:
L DPO ( π θ ; π ref ) = − E ( x , y w , y l ) ∼ D [ log ⁡ σ ( β log ⁡ π θ ( y w ∣ x ) π ref ( y w ∣ x ) − β log ⁡ π θ ( y l ∣ x ) π ref ( y l ∣ x ) ) ] = − E ( x , y w , y l ) ∼ D [ σ ( β ( log ⁡ π θ ( y w ∣ x ) − log ⁡ π θ ( y l ∣ x ) ) − β ( log ⁡ π ref ( y w ∣ x ) − log ⁡ π ref ( y l ∣ x ) ) ) ] \begin{align} \mathcal L_\text{DPO}(\pi_\theta;\pi_\text{ref}) &=-\mathbb E_{(x,y_w,y_l)\sim\mathcal D}\Big[\log\sigma\Big(\beta\log\frac{\pi_\theta(y_w|x)}{\pi_\text{ref}(y_w|x)}-\beta\log\frac{\pi_\theta(y_l|x)}{\pi_\text{ref} (y_l|x)}\Big)\Big] \\ \tag 7 &=-\mathbb E_{(x, y_w, y_l)\sim \mathcal D}\Big[\sigma\Big(\beta (\log\pi_\theta(y_w|x) - \log\pi_\theta(y_l|x)) - \beta(\log\pi_\text{ref}(y_w|x) -\log\pi_\text{ref}(y_l|x))\Big)\Big] \end{align} LDPO(πθ;πref)=E(x,yw,yl)D[logσ(βlogπref(ywx)πθ(ywx)βlogπref(ylx)πθ(ylx))]=E(x,yw,yl)D[σ(β(logπθ(ywx)logπθ(ylx))β(logπref(ywx)logπref(ylx)))](7)
以这种方式,我们使用一种替代的参数化拟合隐式奖励,其最优策略是简单的 π θ \pi_\theta πθ。而且,由于我们的流程等价于拟合一个重参数化的BT模型,它具有理论支持,例如适当的偏好数据分布下具有一致性。在第5节,我们进一步讨论在其他相关工作中DPO的理论性。

DPO更新做了什么?

为理解DPO的机制,有必要分析下损失函数 L DPO \mathcal L_\text{DPO} LDPO的梯度。参数 θ \theta θ的梯度可以写为:

在这里插入图片描述

其中, r ^ θ ( x , y ) = β log ⁡ π θ ( y ∣ x ) π ref ( y ∣ x ) \hat r_\theta(x,y)=\beta\log\frac{\pi_\theta(y|x)}{\pi_\text{ref}(y|x)} r^θ(x,y)=βlogπref(yx)πθ(yx)是由语言模型 π θ \pi_\theta πθ和参考模型 π ref \pi_\text{ref} πref隐式定义的奖励(详见第5节)。直觉上,损失函数 L DPO \mathcal L_\text{DPO} LDPO的梯度增加了偏好回复 y w y_w yw的似然,减少了非偏好回复 y l y_l yl的似然。重要的是,示例的权重取决于隐式奖励模型对非偏好回复评分的高低,通过 β \beta β缩放,即隐式奖励模型对回复排序的不正确程度,归因于KL约束的作用。我们实验证明了这种加权的重要性,因为没有加权系数的朴素方法会导致语言模型退化。

DPO概述

常见的DPO流程如下:

  1. 对于每一个 x x x,采样参考模型的回复 y 1 , y 2 ∼ π ref ( ⋅ ∣ x ) y1,y2\sim\pi_\text{ref}(\cdot|x) y1,y2πref(x),人工标注构建离线偏好数据集 D = { x ( i ) , y w ( i ) , y l ( i ) } i = 1 N \mathcal D=\{x^{(i)},y_w^{(i)},y_l^{(i)}\}_{i=1}^N D={x(i),yw(i),yl(i)}i=1N
  2. 基于给定的参考模型 π ref \pi_\text{ref} πref、数据集 D \mathcal D D和期望 β \beta β,最小化损失 L DPO \mathcal L_\text{DPO} LDPO,优化语言模型 π θ \pi_\theta πθ

实际上,我们希望重新利用公开可用的偏好数据集,而不是生成样本再收集人类偏好。由于偏好数据集是从 π SFT \pi^\text{SFT} πSFT中采样获取的,我们始终初始化 π ref = π SFT \pi_\text{ref}=\pi^\text{SFT} πref=πSFT。然而,当 π SFT \pi^\text{SFT} πSFT模型不可用时,我们通过偏好回复的最大似然初始化 π ref \pi_\text{ref} πref,即 π ref = arg ⁡ max ⁡ π E x , y w ∼ D [ log ⁡ π ( y w ∣ x ) ] \pi_\text{ref}=\arg\max_\pi\mathbb E_{x,y_w\sim\mathcal D}[\log\pi(y_w|x)] πref=argmaxπEx,ywD[logπ(ywx)]。这一过程有助于缓解未知真实参考分布和DPO使用的 π ref \pi_\text{ref} πref之间的分布偏移。

5 DPO理论分析

本章节,我们对DPO方法做进一步解释,并提供理论支持,将DPO的优势与RLHF使用的actor-critic算法的问题联系起来。

5.1 你的语言模型其实是一种奖励模型

DPO使用单个最大似然目标函数,可避免拟合显式的奖励模型以及执行RL学习策略。公式5优化目标等价于包含奖励参数 r ∗ ( x , y ) = β log ⁡ π θ ∗ ( y ∣ x ) π ref ( y ∣ x ) r^*(x,y)=\beta\log\dfrac{\pi_\theta^*(y|x)}{\pi_\text{ref}(y|x)} r(x,y)=βlogπref(yx)πθ(yx)的BT模型,我们优化参数化模型 π θ \pi_\theta πθ,这等效于在变量变换下对公式2中的奖励模型进行优化。

本章节中,我们将构建重参数化背后的理论,展示它并不限制学习奖励模型的方法,以及允许准确恢复最优策略。我们首先定义奖励函数之间的的等价关系。

定义1 如果存在函数 f f f使得 r ( x , y ) − r ′ ( x , y ) = f ( x ) r(x,y)-r'(x,y)=f(x) r(x,y)r(x,y)=f(x) ,则奖励函数 r ( x , y ) r(x,y) r(x,y) r ′ ( x , y ) r'(x,y) r(x,y)等价。

显而易见,这确实是等价关系,它将奖励函数划分为类。我们可以声明以下两个引理:

引理1 在Plackett-Luce下,特别是在Bradley-Terry偏好框架下,来自同一类别的两个奖励函数将产生相同的偏好分布。

引理2 在约束的强化学习问题下,来自同一类别的两个奖励函数将产生相同的最优策略。

DPO源码解析

样本集 { x , y w , y l } \{x, y_w, y_l\} {x,yw,yl},构造dataloader:

  • build_dataset: 对于每一条样本,预处理后的样本集(dataloader中的dataset)为[{‘chosen_input_ids’: […], ‘chosen_attention_mask’: […], ‘chosen_labels’: […], ‘rejected_input_ids’: […], ‘rejected_attention_mask’: […], ‘rejected_labels’: […]}]
  • 从dataset中采样batch,经collator转换并padding为[{“input_ids”: …, “attention_mask”: …, “labels”: …}, …, {“input_ids”: …, “attention_mask”: …, “labels”: …}],其中前半部分为接受样本,后半部分为对应的拒绝样本,依次类推

核心训练代码:

def concatenated_forward(model, batch: dict):
	logits = model(**batch).logits
	per_token_logps = torch.gather(logits.log_softmax(-1), dim=2, index=batch["labels"].unsqueeze(2)).squeeze(2)
	loss_mask = batch["labels"] != -100
	logps = (per_token_logps * loss_mask).sum(-1)
	logps_avg = logps / loss_mask.sum(-1) # 对数似然,可作为SFT Loss
	
	batch_size = batch["input_ids"].size(0) // 2
	chosen_logps, rejected_logps = logps.split(batch_size, dim=0)
	chosen_logps_avg = logps_avg[:batch_size]
	return chosen_logps, rejected_logps, chosen_logps_avg

# policy model前向
policy_chosen_logps, policy_rejected_logps, policy_chosen_logps_avg = concatenated_forward(model, batch)

# 使用lora算法的reference model前向
ref_context = accelerator.unwrap_model(model).disable_adapter()
with torch.no_grad(), ref_context:
    reference_chosen_logps, reference_rejected_logps, *_ = concatenated_forward(model, batch)

# 计算每条样本对的偏好损失
pi_logratios = policy_chosen_logps - policy_rejected_logps
ref_logratios = reference_chosen_logps - reference_rejected_logps
logits = pi_logratios - ref_logratios
losses = (-F.logsigmoid(beta * logits) * (1 - label_smoothing) - F.logsigmoid(-beta * logits) * label_smoothing)

# 添加sft loss
if ftx_gamma > 1e-6:
    sft_loss = -policy_chosen_logps_avg
    losses += ftx_gamma * sft_loss
 
# 计算平均loss
loss = losses.mean()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2342558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE5.2+VarjoXR3,Lumen、GI、Nanite无效的两种解决方案

一、问题描述 最近在做一个基于VarjoXR3的VR项目开发,UE版本使用的是5.2,效果采用Lumen。首先在PC版本中调整了一个效果,但是当切换到VR运行后,就发现Lumen效果就丢失了。但是测试的其他的头显就没有问题,比如Quest。…

PH热榜 | 2025-04-24

1. Peek 标语:AI个人财务教练,帮你做出明智的财务决策。 介绍:Peek的人工智能助手能够主动进行财务检查,分析你的消费模式,并以一种细腻而积极的方式帮助你改善习惯。完全没有评判,也没有负罪感。就像为你…

相机雷达外参标定算法调研

0. 简介 相机与激光雷达的外参标定是自动驾驶、机器人等领域的基础工作。精准的标定不仅有助于提高数据融合的效果,还能提升算法的整体性能。随着技术的发展,许多研究者和公司致力于开发高效的标定工具和算法,本文将对无目标标定和有目标标定…

网络原理 - 7(TCP - 4)

目录 6. 拥塞控制 7. 延时应答 8. 捎带应答 9. 面向字节流 10. 异常情况 总结: 6. 拥塞控制 虽然 TCP 有了滑动窗口这个大杀器,就能够高效可靠的发送大量的数据,但是如果在刚开始阶段就发送大量的数据,仍然可能引起大量的…

idea连接远程服务器kafka

一、idea插件安装 首先idea插件市场搜索“kafka”进行插件安装 二、kafka链接配置 1、检查服务器kafka配置 配置链接前需要保证远程服务器的kafka配置里边有配置好服务器IP,以及开放好kafka端口9092(如果有修改 过端口的开放对应端口就好) …

Linux操作系统--基础I/O(上)

目录 1.回顾C文件接口 stdin、stdout、stderr 2.系统文件I/O 3.接口介绍 4.open函数返回值 5.文件描述符fd 5.1 0&1&2 1.回顾C文件接口 hello.c写文件 #include<stdio.h> #include<string.h>int main() {FILE *fp fopen("myfile","…

weibo_har鸿蒙微博分享,单例二次封装,鸿蒙微博,微博登录

weibo_har鸿蒙微博分享&#xff0c;单例二次封装&#xff0c;鸿蒙微博 HarmonyOS 5.0.3 Beta2 SDK&#xff0c;原样包含OpenHarmony SDK Ohos_sdk_public 5.0.3.131 (API Version 15 Beta2) &#x1f3c6;简介 zyl/weibo_har是微博封装使用&#xff0c;支持原生core使用 &a…

【MySQL数据库入门到精通-06 DCL操作】

一、DCL DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访 问权限。 二、管理用户 1.查询与创建用户 代码如下&#xff08;示例&#xff09;&#xff1a; -- DCL 管理用户 -- 1.查询用户 use mysql; select *from user;-…

无感字符编码原址转换术——系统内存(Mermaid文本图表版/DeepSeek)

安全便捷无依赖&#xff0c;不学就会无感觉。 笔记模板由python脚本于2025-04-24 20:00:05创建&#xff0c;本篇笔记适合正在研究字符串编码制式的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 P…

第七部分:向量数据库和索引策略

什么是矢量数据库&#xff1f; 简单来说&#xff0c;向量数据库是一种专门化的数据库&#xff0c;旨在优化存储和检索以高维向量形式表示的文本。 为什么这些数据库对RAG至关重要&#xff1f;因为向量表示能够在大规模文档库中进行高效的基于相似性的搜索&#xff0c;根据用户…

查看MAC 地址以及简单了解

MAC地址 简介 MAC 地址&#xff08;Media Access Control Address&#xff09;&#xff0c;直译为媒体访问控制地址&#xff0c;又称局域网地址&#xff08;LAN Address&#xff09;、MAC 地址、以太网地址&#xff08;Ethernet Address&#xff09;、硬件地址&#xff08;Ha…

《100天精通Python——基础篇 2025 第2天:Python解释器安装与基础语法入门》

目录 一、Windows安装Python1.1 下载并安装 Python1.2 测试安装是否成功 二、Linux系统安装Python(新手可以跳过)2.1 基于RockyLinux系统安装Python(编译安装)2.2 基于Ubuntu系统安装Python(编译安装)2.3 macOS 安装python解释器 三、如何运行Python程序&#xff1f;3.1 Python…

MyBatis 和 MyBatis-Plus 在 Spring Boot 中的配置、功能对比及 SQL 日志输出的详细说明,重点对比日志输出的配置差异

以下是 MyBatis 和 MyBatis-Plus 在 Spring Boot 中的配置、功能对比及 SQL 日志输出的详细说明&#xff0c;重点对比日志输出的配置差异&#xff1a; 1. MyBatis 和 MyBatis-Plus 核心对比 特性MyBatisMyBatis-Plus定位基础持久层框架MyBatis 的增强版&#xff0c;提供代码生…

动手试一试 Spring Boot默认缓存管理

1.准备数据 使用之前创建的springbootdata的数据库&#xff0c;该数据库有两个表t_article和t_comment&#xff0c;这两个表预先插入几条测试数据。 2.编写数据库表对应的实体类 Entity(name "t_comment") public class Comment {IdGeneratedValue(strategy Gener…

Opencv图像处理:旋转、打包、多图像匹配

文章目录 一、图像的旋转1、使用numpy方法实现旋转1&#xff09;顺时针旋转90度2&#xff09;逆时针旋转90度 2、使用opencv的方法实现图像旋转1&#xff09;顺时针旋转90度2&#xff09;逆时针旋转90度3&#xff09;旋转180度 3、效果 二、多图像匹配1、模板2、匹配对象3、代码…

BOM与DOM(解疑document window关系)

BOM&#xff08;浏览器对象模型&#xff09; 定义与作用 BOM&#xff08;Browser Object Model&#xff09;提供与浏览器窗口交互的接口&#xff0c;用于控制导航、窗口尺寸、历史记录等浏览器行为 window&#xff1a;浏览器窗口的顶层对象&#xff0c;包含全局属性和方法&am…

数据仓库建设全解析!

目录 一、数据仓库建设的重要性 1. 整合企业数据资源 2. 支持企业决策制定 3. 提升企业竞争力 二、数据仓库建设的前期准备 1. 明确业务需求 2. 评估数据源 3. 制定项目计划 三、数据仓库建设的具体流程 1.需求分析​ 2.架构设计​ 3.数据建模​ 4.ETL 开发​ 5.…

时序约束 记录

一、基础知识 1、fpga的约束文件为.fdc&#xff0c;synopsys的约束文件为.sdc。想通过fpga验证soc设计是否正确&#xff0c;可以通过syn工具(synplify)吃.fdc把soc code 转换成netlist。然后vivado P&R工具通过吃上述netlist、XDC 出pin脚约束、fdc时序约束三个约束来完成…

基于SpringBoot的在线抽奖系统测试用例报告

一、项目背景 在线抽奖系统采用前后端分离的方法来实现&#xff0c;同时使用了数据库来存储相关的数据&#xff0c;redis来缓存验证码&#xff0c;RabbitMQ来缓存信息队列&#xff0c;同时将其部署到云服务器上。前端主要有登录页、后台管理页、活动列表页&#xff0c;抽奖页等…

26考研|数学分析:数项级数

数项级数这一章的开始&#xff0c;开启了新的关于“级数”这一新的概念体系的学习进程&#xff0c;此部分共包含四章的内容&#xff0c;分别为数项级数、函数项级数、幂级数以及傅里叶级数。这一章中&#xff0c;首先要掌握级数的相关概念与定义&#xff0c;重难点在于掌握判断…