来自:克鲁斯卡
OpenAI发布了 o1之后,LLM领域又掀起了Inference Scaling Law的热潮,此次推理能力的大幅提升其中就有强化学习的参与,其利用 RL 改进模型思维链的中间步骤,得到了更好的答案。
LLM发展到现在这个阶段,从最初的 Pre-training 到现在的 Post-training,也是有了明显的范式变化。其中 Post-training 中对齐的方法也比较多了,从最初的 RLHF 到现在的各种O,各有优劣。标准的RLHF流程虽然清晰明了,但是相对来说实现起来更加复杂,而DPO就是旨在简化对齐这一过程,同时保持甚至提高性能。
本文就逐步骤的推理一下DPO(Direct Preference Optimization)算法的设计,希望能够通过细致的推导帮助理解算法背后的原理。
总体文章结构如下:
在推导之前,还是先了解下RLHF的做法。
1. RLHF
1.1 RLHF 架构
如图 1 所示,RLHF(Reinforcement Learning with Human Feedback)的完整流程包含三个阶段:
Self-Supervised Pre-Training:在大量无标注的文本上训练LLM,得到一个base model
Supervised Fine-Tuning(SFT):使用QA数据对base model进行指令微调(Instruct Tunning),得到chat model ,一般可以把这个复制一份作为后续使用的参考模型
Alignment Tuning
Preference Sampling:输入准备好的问题到 ,得到答案后,人为标注偏好数据集
Reward Learning:使用偏好数据训练奖励模型 ,使其能分辨哪个更好
RL Finetuning:使用奖励模型的指导,利用强化学习进一步微调,对齐人类偏好,比如近端策略优化(PPO),至少会用到上述的、、

由上述流程可以看到,RLHF的关键组成是奖励模型和PPO强化学习微调部分,前者的难点在于数据的构造以及奖励模型的准确性,而后者则是RL的通病,难以训练。Pre-training 和 SFT 老生常谈了,先关注下
奖励模型训练
强化学习提升
还是先从 RLHF 开始,方便后面理解DPO推导以及其优化的点。
1.2 训练奖励模型
偏好数据包括相同提示 的两个回复 和 ,组成一个样本 训练奖励模型的目标是让好回答获得更高的分数,尽量对齐人类的偏好,其损失函数如下:
进而可以得到奖励模型的训练目标:
其中:
是我们训练的奖励模型,用来给回答打分。
是训练数据集。
是问题(prompt), 和 分别是好回答和差回答。
目标非常简单明了:让好回答的得分比差回答高,从而拉大它们之间的差距。
细节解释
:期望值代表在所有训练数据上的平均表现,模型不仅要学会在单个问题上判断好坏,还要在不同问题上都能正确地给出评分。
:这个部分表示从数据集 中随机采样一组问题和回答。
即 Sigmoid 函数,用来将两个回答的得分差距转换为 0 到 1 之间的概率。这个值越接近 1,表明模型更加确信好回答要明显优于差回答;如果值接近 0.5,则表示模型无法很清晰地分辨两者的好坏。这个公式的核心目标就是最大化好回答与差回答得分差距的概率。
:奖励模型打分,根据问题 和回答 给出分数。
🔥 总结:通过这个训练过程,我们希望构建一个模型,它能通过对问题的不同回答打分,从而确保好的回答总是能得到更高的分数,而差的回答则分数较低。这个模型随着训练会逐渐提高对好坏回答的区分能力。
上述是训练奖励模型的损失函数,至于为什么要这么设置,下面章节会详细解释
建议阅读,帮助理解 DPO 公式,也可直接跳过,看第二部分
1.2.1 损失函数推导
双偏好奖励损失
Bradley-Terry 模型
奖励模型 的训练通常使用 Bradley-Terry 模型,这是一个经典的用于排序和偏好建模的统计模型。它的目的是通过将不可观测的隐性分数映射到明确的偏好上,以估计两个输出间的偏好概率。
Bradley-Terry 模型是一种经典的统计模型,最初用于描述竞赛和比较的结果。在这个模型中,如果两个对象 和 相互竞争,模型会为每个对象分配一个“隐性得分” 和 ,用来表示各自的“实力”或“偏好值”。模型的核心思想是:对象获胜的概率取决于两个对象得分的相对大小。具体来说,对于 和 ,获胜的概率计算为
这个模型可以自然地推广到排序问题,即如何根据各个对象的得分来预测哪一个更优。
在此模型中,给定输入prompt 和两个候选回复 和 , 表示模型认为回复 比 更优的概率。这个概率计算如下:
这里, 和 分别表示两个答案的“评分”经过指数化后的值
引入Sigmoid 函数
将上式进一步变形,可以得到一个更简洁的表达:
其中 是 sigmoid 函数,定义为:
具体推导过程如下:
概率建模
为了训练奖励模型 ,我们希望通过最大化 模型正确判断偏好的概率来优化参数。这意味着我们需要构建一个损失函数,使得
当模型选择 的概率较大时,损失较小
当模型无法区分 和 或选错时,损失较大
首先,我们已经推导出 的概率表达式
现在我们用二分类的方式模拟上述过程,引入交叉熵损失(Cross-Entropy Loss),其用于衡量模型预测的概率分布与实际目标分布之间的差异。转换一下:
如果 ,(表示 优于 ,我们希望最大化
如果 ,情况正好相反。因此,可以构建如下的二分类损失:
表示 是正确答案,因此我们关注的是 ,
时,表示 为正确答案,对应 。
简化为奖励模型的损失函数
对于有明确的偏好对的数据(即知道 比 更优,因此 总是 1,这样可以简化损失表达式:
通过这种方式,我们将概率表达式与交叉熵损失联系了起来,构建了一个可以用于优化的损失函数。核心思想是:最大化模型正确判断偏好的概率,即最小化预测错误的损失,让奖励模型学会这种预测模式。
多偏好奖励损失
Plackett-Luce
上面我们使用Bradley-Terry模型结合交叉熵,推导出来奖励模型的优化目标,但是这是针对只有两个回复的情况 。而对于超过两条回复的情况,则需要使用Plackett-Luce 模型来进行推导。
Plackett-Luce模型是一种经典的概率排序模型,用于描述多项选择或多项排序的情况。与Bradley-Terry模型主要处理两个对象间的偏好不同,Plackett-Luce模型适用于多个对象的排序问题。在Plackett-Luce模型中,每个对象都会被分配一个“隐性得分” ,用于表示其相对的“偏好强度”或“选择可能性”。模型的核心思想是:在多项选择中,某个对象被选中的概率由该对象的隐性得分相对于所有候选对象隐性得分的总和来决定。
比如对于一个输入 ,我们有 个候选回复 。我们手动的逐个为这些回复进行了排序,记为 ,表示 是最优的, 次之,以此类推。
排序概率的计算
Step 1: 选出第一个回复首先,我们希望计算在给定prompt 时,哪个回复是最好的概率。模型为每个回复计算一个得分 ,然后通过指数化得到一个正值 ,代表人类对该回复的相对“偏好”。
指数函数 有个很好的特性:无论 是什么值,指数变换后的结果都会是正数,并且指数变换还保留了奖励的相对大小关系。
第一个被选出的最优回复 的概率可以表示为:
这表示 的概率是其得分占所有回复得分之和的比重,分母部分确保了所有回复的概率总和为 1。
Step 2: 选出第二个回复选出第一个回复后,接下来从剩下的 个回复中选出第二个最优的 。我们假设第一个回复 已经被选出,那么第二个回复的概率可以写为:
这表示我们从剩余回复中选择 的概率,分母只考虑除 之外的回复。
Step 3: 持续选择,直到最后一个我们继续这个过程,直到选出最后一个回复 。整个排序的联合概率为:
概率建模
在二分类情况下,我们使用交叉熵损失来最大化正确分类的概率。在这里,我们可以借鉴相同的思想:通过最大化模型预测的排序概率与人类排序一致的概率来优化模型。也就是,如果人类排序为 ,我们希望模型给出同样排序的概率 尽可能大。
在概率模型中,直接最大化概率有时会遇到数值上的不稳定问题,所以常见的做法是最小化负对数似然。从数学上讲,最小化负对数似然等价于最大化模型预测的概率,换句话说,NLL 越小意味着模型预测的排序与人类偏好越一致。
负对数似然的数学形式来源于对概率 的对数进行取负号:
使用对数概率可以使优化过程更加稳定,将概率变换为 一个更线性和数值上更稳定的值域,避免了在极小概率(接近 0)时数值计算的问题。同时,通过对数函数,乘法变加法,在后续多步选择过程中,可降低复杂度,使梯度计算和优化更加高效。
简化为奖励模型的损失函数

详细解释下多回答偏好数据集下奖励模型的损失函数:
求和 :对每个候选回复的偏好顺序 进行求和。也就是说,模型逐层选择每一个候选回复(从第一个到第 个)的概率,构建整个偏好顺序的联合概率
打分 :奖励模型 为第 个候选回复 给出的偏好打分。在输入prompt 下,模型认为 回答的有多好
对数项 :
分子:最大化当前选中回复 的偏好得分 相对于其他候选回复的偏好得分之和。
分母:分母部分是当前未选中的回复得分的总和,公式 表示所有还未被选中的回复在当前层次的得分归一化项。模型通过比较 的偏好得分和其他答案偏好得分之和,计算该回复在剩余候选项中的相对优越性。
对于每一个被选中的回复 ,模型的目标是最大化其得分 与剩余候选回复得分之和的对数差值。换句话说,我们希望被选中的回复得分越高,剩余未选中的回复得分越低。通过最大化这个差值,模型将逐步优化多回复的排序结构。
1.3 使用强化学习(RL)
在经过上述的推导之后,假设我们已经有了一个能够评分的奖励模型,接下来使用强化学习(RL)来优化模型的输出。我们希望模型生成的回答不仅得分高,还不能偏离原有的回答风格。
因此,利用上述提到的三个模型,RLHF 目标可以被表述为一个受约束的优化问题:
其中:
:我们要训练的目标模型(也称为策略模型),让其生成符合人类偏好的回答
:之前训练好的奖励模型,用于对回答进行评分
:参考模型,通常是用SFT之后的模型来初始化
🔥这个公式的含义是,我们希望生成的回答分数尽可能高(最大化预期奖励),但同时不希望模型在生成过程中偏离参考模型太多,以避免生成一些没有意义的内容(作弊赢得奖励)。
细节解释(可跳过)
:表示从数据集 中随机采样输入
:表示给定 ,根据当前策略采样输出 ,这里的策略 是参数化的,描述了模型在给定输入 时生成输出 的概率分布
:这是 KL 散度,用来衡量训练中的新模型和参考模型之间的差异
:这个超参数决定了在训练过程中对 KL 散度的重视程度。 越大,模型越不会偏离参考模型
以上就是 RLHF 的总体目标,对应图 1 中 Post-Training 的部分,整体训练的过程,还涉及到一个在线迭代的训练方式,这也是比 DPO 灵活的地方,我们在推导完 DPO 之后再做对比。
RLHF虽好,但是有很多难点需要解决,简单列举几个:
计算复杂:上述过程要至少用到三个模型,对资源要求较高
采样过程不可微:输出序列涉及到采样,这个过程并不是连续函数,因此不存在明确的梯度,就不能用传统的梯度下降来优化
训练不稳定:上述过程有非常多的不确定性,比如奖励模型的训练质量、数据偏差等,还有RL非常多的超参需要调整,都会影响整个训练过程
在看完了 RLHF 的过程,我们再来看看 DPO 是怎么做的,尤其是对以上难点的优化
2. DPO 推导
2.1 DPO 架构
DPO 的目的就是为了克服RLHF 的诸多缺点,让alignment 变成熟悉的 SFT 风格。
如图 2 所示,一句话:DPO 是直接优化策略,而不需要进行显式的奖励计算或使用强化学习算法。
注意对比两个框架图的不同

话不多说,继续推导,同样从上述受约束的优化问题出发:
为了推导的完整性,此处先不拆分,关键步骤🎈有解释

2.2 详细解释
KL散度相关,公式 (🎈1)
上述推导中,第一步可以转换的关键点在于:
KL 散度的定义:KL 散度本质上是两个分布的对数比的期望值,因此可以直接展开。
线性性质:期望值具有线性性质,所以两个期望值可以合并成一个。KL散度(back-Leibler divergence)是衡量两个概率分布之间差异的常用方法。它的定义是:
KL散度 的数学定义是:
或在连续情况下:
其中, 和 分别是两个概 率分布。直观上,它衡量了使用分布 来近似分布 的信息损失程度。
如果 对所有 成立,那么:
所以
因此,KL散度的值为:
这表明当两个分布 和 完全相等时,KL散度为0,KL散度在两个分布相等时取最小值。从物理意义上讲,KL散度可以直观地理解为两个分布之间的“距离”或差异。当两个分布完全相等时,说明它们描述的事物是完全相同的,因此我们不需要额外的信息来描述这种差异。所以,KL散度为0,表示没有差异。
分母归一化,公式(🎈6)
为什么要引入 ?
上述推导中,第6步为:
在这里, 是一种概率分布,描述模型在给定输入 时生成不同输出 的概率,同理。
但是分母中的 是一个奖励函数,它衡量某个输出 在给定输入 时的得分或好坏程度。奖励函数的输出是一个数值,可以是正的、负的,或者大于1,甚至小于0,但这不是概率,不满足概率的基本性质:
概率的值必须在0到1之间
对于所有可能的事件,其概率的总和必须等于1
回顾一下DPO或者Alignment的目的:在语言模型的输出中,模型 其实是一个条件概率分布,它描述了在给定prompt 时,输出不同回复 的概率。我们优化的是这个分布,使得模型能生成更符合人类偏好的输出。具体方法则是想通过奖励函数 来调整模型的输出概率,使得分更高的答案的生成概率越高。
为什么不能直接使用 ?
由于 不符合概率的特性,所以我们不能直接使用 来构造概率分布。为了将奖励转换为概率,通常使用指数变换。
指数函数 有个很好的特性:无论 是什么值,指数变换后的结果都会是正数,并且指数变换还保留了奖励的相对大小关系。
然而,虽然 是正数,但它们还没有满足所有概率分布的要求:它们的总和可能不等于1。为了满足这个条件,我们需要对所有 进行归一化。
因此,引入 ,即归一化因子
这个 的作用是将每一个 除以一个总和,使得构造出来的概率之和为1。也就是为每个给定的提示 生成所有可能的答案 。
🛎️注意:虽然引入这,但是没有办法计算,因为无法得到每个 x 的所有 y
这样我们就能得到一个合法的概率分布 :
这个过程其实就是在将一个“未归一化”的概率转换为一个合法的概率分布,使得:
这一步非常重要,因为它使得我们能够将优化目标转化为最小化当前策略 和理想策略 之间的差异。也就是说,经过奖励加权的理想策略 成为我们优化的“目标”策略。
的物理意义是:对于一个prompt ,考虑模型本身的输出 ,同时还考虑了奖励模型对于输出 的奖励信号。
2.3 从奖励函数到最优策略显式解
这样我们有一个新的概率分布:
同时得到了新的目标优化问题的公式:
由于 KL散度在 2 个分布相等时取最小值,因此,我们的最优策略即为新的概率分布 。即:我们从RLHF 的目标中,推导出来了,想要得到最好的策略模型 ,那么就让 ,优化问题已经有显式解!
🙁但是仍然需要训练奖励函数,同时,前文也提到是不可计算的,所以,仍然需要继续推导。
RLHF 中难点之一就是奖励函数的训练,那么在最优策略对应的奖励函数变成了什么样呢?
从公式(1)我们可以看出,在给定奖励函数 和参考模型 的情况下,可以确定 。反过来,我们也可以这样认为,在给定 和参考模型 的情况下,我们可以获得奖励模型。利用 公式和归一化因子 ,将奖励函数用最优策略表示出来
此时,我们得到了另外一种奖励模型的表达方式,用我们已知的、从 RLHF 优化目标推导出的最优策略,表示出了奖励模型!
2.4 双偏好形式的 DPO
对于双偏好的数据形式 ,带入最上面Bradley-Terry 模型推导出的奖励模型的 loss:
奖励函数的表达式优化目标:
推导到这里,事情变得有意思了:我们一直寻找的最佳策略模型是,而现在奖励模型 的损失函数用我们的显式解表达出来了。这意味着,我们用另外一种不需要训练奖励模型的方式得到了 RLHF 的最优化的目标,无需明确学习奖励函数:
有了 DPO 的损失函数,我们可以直接优化策略 ,不用再训练奖励模型,而只用参考模型即可实现对齐。与 RLHF 类似,DPO 的对齐目标也可以表示为一个约束优化问题
🔥
2.5 多偏好形式的 DPO
上述是将最优策略带入了双偏好形式下的奖励模型损失函数,得到了双偏好数据下的 DPO loss。前文我们还推导了多偏好形式下奖励模型损失函数的表达式,同样,我们也代入最优策略,尝试推导
先回顾一下,多偏好数据形式 ,使用Plackett-Luce模型来处理多个候选回复的排序。这里我们将奖励函数 的表达式直接代入多偏好下的损失函数:
奖励函数 :
将 代入损失函数:
同样的方式,我们也用最佳策略模型,表示出了奖励模型 的损失函数,现在损失函数与奖励模型无关,因此, 最终得到多偏好形式的DPO损失函数为:
🔥
和上述过程一样,多偏好数据下 DPO 的对齐目标为:
🔥
注意:最小化上述的损失函数,实际上是在最大化模型生成符合人类偏好排序的概率,为了和双偏好最终的优化目标保持一致,我们去掉负号,转换为最大化问题:
🔥
Conclusion
好了,到这里算是推导完成了,公式确实比较多,但是把推导过程写的比较详细,因此可能会有些冗余。
从最终 DPO 的优化目标也能看出来,DPO 相对于 RLHF 变的简单了很多,尤其是不需要再单独训练奖励模型,直接通过偏好进行优化,因此会减少很多的不确定性。除此之外,我们可以再简单对比下二者之间的主要差异
训练复杂性:
RLHF 更复杂,需要训练奖励模型并使用 RL
DPO 更简单,利用偏好数据直接优化优化过程:
RLHF 使用强化学习算法,如 PPO,来微调模型
DPO 使用基于梯度的优化直接更新模型参数效率:
RLHF 至少需要三个模型,计算慢,资源要求高
DPO 则更高效,只需训练一个模型,资源要求低,类似 SFT,训练友好迭代:
RLHF 有线上采样迭代的过程,是 online 的,这个虽然耗时,但是的确更make sense
DPO 可以提前构造偏好数学,offline 的训练,只能说更方便,但是少了 RL 的味道
以上就是本文的全部内容了,希望能给你一点点的帮助
如果感觉还不错的话,欢迎点赞和关注🐻
分享知识,记录生活,一起进步
4. References
[1] Rafael Rafailov, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher D. Manning, & Chelsea Finn (2023). Direct Preference Optimization: Your Language Model is Secretly a Reward Model. arXiv preprint arXiv:2305.18290.
[2] Hanze Dong, Wei Xiong, Bo Pang, Haoxiang Wang, Han Zhao, Yingbo Zhou, Nan Jiang, Doyen Sahoo, Caiming Xiong, & Tong Zhang (2024). RLHF Workflow: From Reward Modeling to Online RLHF. arXiv preprint arXiv:2405.07863.
[3] lmpo. (2023). Direct Preference Optimization: A Novel Approach to Language Model Alignment. Medium.
备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群
id:DLNLPer,记得备注呦