DPO 论文学习
不懂的问题
偏好学习的单位是什么?也是 token?还是以 response?
和 SFT 一样是Response
为什么人类偏好学习需要强化学习
对于一个 response 的偏好程度打分,不是模型的输出(模型输出的是对人类偏好的response(word tokens)),因为由于模型输出和打分不是一种类型的数据,所以我们无法将 LLM 的输出与标签对比算出 loss, 也就不能反向传播更新),所以就不能用常规的监督学习来训练模型
DPO 的缺点是需要大量有标注单独信息,而 RLHF 只需要小部分的
什么是策略?
在本文的环境中:策略就是模型生成概率空间,即生成的文本的概率分布。
策略训练(policy train)就是训练 LLM 的策略的过程,使其生成的文本更符合人类的偏好。
一般的策略训练的过程
-
确定目标:首先需要定义目标,这通常是通过一个损失函数来表示的。在传统的强化学习中,这个目标是最大化奖励。
-
优化过程:通过某种优化算法(如梯度下降、Proximal Policy Optimization(PPO)等),不断调整模型的参数,改变策略,使得策略能够在特定任务中表现得更好。例如,语言模型的策略可以通过优化语言生成的质量来训练。
-
策略调整:在训练过程中,模型会不断根据新的数据或环境反馈调整策略,以提高其执行任务的能力。
什么是奖励函数?
奖励函数:在强化学习和偏好学习中,奖励函数通常用于量化一个动作或响应的质量。在传统的 RLHF(从人类反馈中进行强化学习)方法中,奖励函数是由人类偏好数据训练出来的,它用来评估语言模型输出与人类偏好的一致性。
然而,在 DPO 方法中,作者没有显式地定义和训练一个独立的奖励函数,而是通过将偏好数据直接映射到策略(即语言模型)的优化中,从而隐含地使用奖励函数。
这里的奖励函数可以理解为偏好数据对某个输出的偏好程度,反映了人类更倾向于选择哪些输出
什么是 KL 散度?
KL 散度(Kullback-Leibler Divergence)是一种用于衡量两个概率分布之间差异的度量。它通常用于比较一个真实分布(或参考分布)和一个估计分布(或预测分布)之间的差异。
KL 散度的公式为:
\[D_{KL}(P || Q) = \sum_{x} P (x) \log \frac{P (x)}{Q (x)}\]或在连续情况下:
\[D_{KL}(P || Q) = \int p (x) \log \frac{p (x)}{q (x)} \, dx\]其中:
- $P (x)$ 是真实的概率分布(或参考分布),表示“正确”或期望的分布。
- $Q (x)$ 是估计的概率分布,表示模型输出的分布。
-
$D_{KL}(P Q)$ 衡量了分布 $P$ 相对于 $Q$ 的信息损失,或者说是从 $Q$ 生成 $P$ 时的效率损失。
KL 散度的含义:
-
非对称性:KL 散度是非对称的,即 $D_{KL}(P Q) \neq D_{KL}(Q P)$,这意味着它不是一个真正的“距离”,而是一个信息量度量。 - 度量差异:KL 散度的值越大,说明两个分布之间的差异越大。KL 散度为零时,说明两个分布是完全相同的(即 $P = Q$)。
- 信息量:KL 散度表示使用分布 $Q$ 来表示分布 $P$ 时所失去的信息量。如果我们使用 $Q$ 来描述真实分布 $P$,那么我们需要多少额外的信息来弥补这个差距。
在机器学习中的应用:
-
在强化学习中:KL 散度通常用于控制策略优化过程中的“平稳性”或“稳定性”。例如,在Proximal Policy Optimization (PPO) 算法中,KL 散度用作约束,防止优化过程中新的策略与旧的策略偏差过大,从而保证训练过程的稳定性。
-
在生成模型中:KL 散度常用于衡量生成模型(如变分自编码器 VAE)学习的分布与真实数据分布之间的差异。最小化 KL 散度有助于生成的样本更接近真实数据分布。
-
在模型优化中:KL 散度也常用于对抗训练等场景,作为衡量两个模型输出概率分布差异的一种方式。
总结:
KL 散度是一个衡量概率分布之间差异的工具,它通过计算一个分布生成另一个分布时的“信息损失”来工作。在强化学习、生成模型以及其他机器学习领域,KL 散度是优化过程中的一个重要工具,尤其用于控制训练过程中的分布变化。
DPO 的变量变换思想
我理解这里变量变换思想就是: 假设 A=B=C 原本的过程就是使用 A—>B—>C 而 DPO 的变量变换思想就是直接使用 A—>C
在DPO算法中,变量变换是一个数学技巧,它允许我们跳过显式构建奖励模型的过程,直接通过人类偏好数据优化策略。为了更好地理解这个概念,下面我将举一个简单的例子来解释“变量变换”的含义。
举例:假设我们有一个简单的分类问题
假设我们正在训练一个模型来生成文本,并且我们收集了大量的人类偏好数据,这些数据表明在两个不同的模型输出之间,人类更喜欢哪一个。
- 模型输出 A和模型输出 B是两个候选答案。
- 人类偏好数据告诉我们,A 更好,因此我们可以把人类偏好表示为“喜欢 A、不喜欢 B”。
在传统的强化学习方法中,我们可能会这样做:
- 构建奖励模型:首先需要定义一个奖励函数,比如给A一个高奖励,给B一个低奖励。
- 然后使用强化学习(如 PPO)来优化策略,使得模型生成的答案更倾向于 A,因为 A 得到了更高的奖励。
变量变换的作用
但是,DPO采用了变量变换的方式,避免了需要显式构建奖励模型和奖励值的问题,直接通过人类的偏好数据来优化模型。
假设我们已经知道,人类给出的是一个简单的偏好排序,也就是说,模型输出 A 被偏好于 B。DPO 的变量变换过程可以被理解为:
-
换一个视角:我们不再直接优化奖励值,而是通过将奖励值变换成策略本身来进行优化。具体来说,我们定义一个新的损失函数,这个损失函数表示我们希望生成更倾向于人类偏好的答案(即 A)的策略。
- 变量变换的步骤:通过数学变换(例如:对数变换),我们可以把偏好损失函数定义为一个关于策略的函数,而不需要显式地训练奖励模型。换句话说,我们直接用人类给出的“喜欢”或“不喜欢”作为优化目标,调整模型的生成策略,使得模型生成 A 的概率更高。
-
直接优化策略:通过这种变换,我们可以用二元交叉熵这样的简单目标函数来优化策略,即最大化模型生成 A 的概率,同时最小化生成 B 的概率。
数学背景:
-
如果我们不进行变量变换,奖励模型可能会让我们使用以下目标: \(\text{maximize} \quad \mathbb{E}[R (\text{output})]\) 其中 $R (\text{output})$ 是奖励函数。
-
但是通过变量变换,我们可以将这个目标变成: \(\text{maximize} \quad \log \left ( \frac{P (\text{preferred response})}{P (\text{dispreferred response})} \right)\) 这实际上是优化模型策略的一个等价目标,而不需要定义一个显式的奖励函数。
总结:
在DPO中,变量变换指的是将优化目标从奖励模型转变为直接优化策略的函数。通过这种变换,我们避免了构建奖励模型的复杂过程,直接通过人类偏好数据优化语言模型的策略。
DPO 和 Bradley-Terry 的异同
Bradley-Terry 模型是一种用于衡量人类偏好数据的一致性的统计模型,它可以用来评估两个或多个选项之间的相对偏好。 它通过给每个物品分配一个质量值,预测不同物品之间的偏好概率
DPO 和 Bradley-Terry 都是理论模型,而不是真实的训练出来模型。是可以通过数学公式计算出来的。
DPO 直接用人类偏好数据来优化模型,而 Bradley-Terry 模型是用来评估人类相对偏好的
摘要
当前背景
- LLM 的行为很难被精准控制,因为进行了无监督的预训练
- 想要控制 LLM 的办法:
- RLHF:通过收集人类标签来评估模型生成结果的相对质量,并对无监督LM进行微调以符合这些偏好,通常需要通过来自人类反馈的强化学习(RLHF)
作者的工作
- DPO:我们利用奖励函数与最优策略之间的映射,表明这个受限的奖励最大化问题可以通过一次单独的策略训练精确优化,实际上解决了人类偏好数据上的分类问题(二分类:喜欢、不喜欢)。
实验结果
- DPO可以将语言模型微调到与人类偏好相符,且效果与现有方法相当或更好。
- 使用DPO进行微调超越了RLHF控制生成内容情感的能力,并在摘要和单轮对话中提高了响应质量,同时实现和训练起来大大更简单。
引言
1. 问题:
从模型非常广泛的知识和能力中选择所期望的响应和行为对于构建安全、高性能和可控的人工智能系统至关重要
例子:
我们可能希望我们的语言模型意识到50%的人相信的一个常见误解,但我们肯定不希望模型声称这个误解在50%的查询中是真实的!
2. 现在一般的解决方法:
- 有监督微调:直接给 LLM 高质量的数据
- 通过 RLHF 进行微调(缺点:复杂、计算成本高)
3. 作者的解决办法:DPO
- DPO 算法的基本思路:
- 目标:DPO 的目标与现有的 RLHF 方法类似,都是奖励最大化,并且包含了一个KL 散度约束,即优化过程中不仅要最大化奖励,还要确保生成的回答不会偏离原始模型过多。
- 细节:DPO 通过增加偏好响应的对数概率来优化模型,使得模型生成“更喜欢”的回答,同时引入了动态的权重,防止模型因过度偏向某些回答而发生退化。传统方法中的概率比值目标可能导致模型不稳定,而 DPO 通过引入这些权重来避免这种问题。
- 与现有方法的区别:
- DPO 使用一个理论偏好模型(如Bradley-Terry 模型),用来衡量给定的奖励函数与人类偏好数据的一致性。现有方法(RLHF)依赖偏好模型来定义一个“偏好损失”函数,训练奖励模型,再用这个奖励模型来优化语言模型(策略)。
- 而 DPO 则通过变量变换,将这个“偏好损失”函数直接定义为语言模型策略的函数。也就是说,DPO 不需要显式地学习奖励函数,而是直接通过人类偏好的数据来优化模型。
- DPO 的训练过程:
- 给定一组人类对语言模型响应的偏好数据,DPO 通过一个简单的二元交叉熵目标(binary cross entropy)来优化模型,而不需要在训练过程中进行策略采样或显式学习奖励函数。
- 实验结果:
- 实验表明,DPO 至少与现有方法(如基于 PPO 的 RLHF 方法)一样有效,在任务如情感调节、文本摘要和对话生成等方面,使用最多 6 B 参数的语言模型,DPO 的表现与现有方法相当,甚至在某些情况下更好。
DPO 是一个简单且不依赖强化学习的算法, 它直接通过人类偏好数据优化语言模型,从而避免了复杂的奖励建模和强化学习过程。DPO 在多个任务中与传统方法相比同样有效,且实现简单,易于训练。
相关工作
LLM 对齐的发展
- 无监督的 LLM 可以在 zero-shot 和 few-shot 的情况下完成一些任务,但是不如指令微调后的 LLM
- 指令微调可以显著提高 LLM在下游任务上的表现和与用户意图的对齐,但是需要专家示范的数据
- 收集对响应质量的相对人类判断往往更为容易,因此随后的研究使用人类偏好的数据集对大语言模型进行了微调,
结果:提高了翻译、摘要、讲故事和遵循指令的能力。
一般过程:
- 优化神经网络的奖励函数,以便与偏好模型下的偏好数据集兼容,如 Bradley-Terry 模型[5],
- 然后使用强化学习算法(通常是 REINFORCE 、近端策略优化(PPO;)或变体)微调语言模型,以最大化给定的奖励。
- 其他研究:
- 利用经过人类反馈微调的 LLMs 来生成针对安全性或无害性等特定属性的额外合成偏好数据,仅使用人类提供的文本评估作为 LLM 注释的弱监督
总结:
总共有两个方向:
- 一个是关于使用强化学习训练语言模型以实现多种目标的研究工作
- 另一个是关于从人类偏好中学习的一般方法的研究工作
本文:
- 尽管使用相对人类偏好的方法具有吸引力,但使用强化学习对大型语言模型进行微调仍然是一个主要的实际挑战;
- 本项工作提供了一种在没有强化学习的情况下优化相对偏好的理论上合理的方法。
偏好学习(不在 NLP 中的)
情境对决赌博机 (Contextual Dueling Bandits)
首先,使用偏好或动作排名而非奖励的情境赌博机学习被称为情境对决赌博机(Contextual Dueling Bandit,CDB)。在没有绝对奖励的情况下,CDB 的理论分析用冯·诺伊曼胜者(von Neumann winner) 的概念取代了最优策略。
冯·诺伊曼胜者是指其对任何其他策略的预期胜率至少为 50%的策略。
通常,在有明确奖励的环境中,我们可以定义一个最优策略,它能最大化预期奖励。
然而,在CDB中,没有绝对的奖励信号,只有策略之间的偏好或胜率信息。因此,冯·诺伊曼胜者被定义为:对于任何其他策略,其预期胜率至少为50%的策略。也就是说,这个策略在与任何其他策略对比时,至少不会输,可能会赢。这一概念适用于无法直接量化奖励的情况下,用相对胜率来评估策略的优劣。
然而,在 CDB 的设置中,偏好标签是在线获得的;而在从人类偏好中学习时,我们通常从一批离线的、带有偏好标注的动作对中学习。
类似地,基于偏好的强化学习(Preference-based RL,PbRL) 从由未知的“评分”函数生成的二元偏好中学习,而不是直接从奖励中学习。已有多种 PbRL 算法,包括可以重用离线偏好数据的方法,但通常需要先显式估计潜在的评分函数(即奖励模型),然后再对其进行优化。
与这些方法不同,作者提出了一种单阶段的策略学习方法,可以直接优化策略以满足偏好,而无需先估计奖励模型。
预备知识
RLHF 的 pipeline
1) supervised fine-tuning (SFT); 2) preference sampling and reward learning 3) RL optimization.
SFT
RLHF 通常通过对预训练语言模型进行微调,以监督学习的方式在高质量数据上进行,针对感兴趣的下游任务(对话、摘要等),以获得模型 $\pi ^{SFT}$。
奖励模型阶段
- 奖励建模的基本任务:
-
在奖励建模阶段,模型(SFT 模型,指的是预先监督微调的模型 $\pi^{\text{SFT}}(y x)$)接收一个输入提示 $x$,并生成一组候选答案对 $(y_1, y_2)$。 - 这些候选答案对会交给人类标注者进行评估,标注者会基于偏好选择其中一个答案。例如,人类可能更喜欢答案 $y_w$ 而不是 $y_l$。
- $y_w$ 表示人类标注中“偏好”的答案,而 $y_l$ 表示“不偏好”的答案。
-
- 引入奖励模型:
- 假设人类偏好的分布是由一个潜在奖励模型 $r^*(y, x)$ 生成的。
- 奖励模型 $r^*(y, x)$:它是一个无法直接获取的函数,用于衡量在特定输入 $x$ 下,答案 $y$ 的质量或偏好。
- 如何使用奖励模型对偏好建模:
- 文中指出,Bradley-Terry 模型是用于偏好建模的常见方法之一。该模型假设: \(P^*(y_1 \succ y_2 \mid x) = \frac{\exp (r^*(x, y_1))}{\exp (r^*(x, y_1)) + \exp (r^*(x, y_2))}.\)
- 这个公式描述了答案 $y_1$ 相比 $y_2$ 被人类偏好的概率。概率值由各自的奖励值 $r^*(x, y)$ 决定,奖励值越高的答案更有可能被选择。
[!TIP] 为什么公式是这样的:
- 想要 $r(x,y)$ 打分越高越偏向于 $y$,所以使用了指数函数
- 分母是为了归一化,使得概率和为 1,使其成为一个有效的概率分布
- 当两数差异较大是,使用指数函数会扩大差异,使得概率更加明显
- 也可换一种理解方式,这个公式可以从 sigmod 简化而来,
- 而为什么使用 sigmod 呢?因为我们可以用模型推导出的偏好与不偏好的差值来判断是否偏好,如果是偏好的分数大于不偏好的分数,所以为正值,正值越大 sigmod 的函数值越接近 1,反之越接近 0,所以使用 sigmod 函数来表示偏好。
- 由偏好公式推到这个损失函数 [priority:: highest] [created:: 2024-11-18] [scheduled:: 2024-11-18] [completion:: 2024-11-19]
- 如何训练奖励模型 $D$:
- 数据集:
- 作者假设可以访问一个静态的偏好数据集 $D = {(x^{(i)}, y_w^{(i)}, y_l^{(i)})}$,其中包含输入 $x^{(i)}$ 及其对应的偏好答案对。
- 目标是通过这些数据学习一个参数化的奖励模型 $r_\phi (x, y)$,该模型的参数 $\phi$ 可以通过最大似然估计(MLE)优化。 - 将问题建模为二分类任务:
- 偏好学习的任务被建模为一个二元分类问题,目的是预测在一对答案中哪一个更符合人类的偏好。
- 负对数似然损失(Negative Log-Likelihood Loss)定义如下: \(\mathcal{L}_R (r_\phi, D) = - \mathbb{E}_{(x, y_w, y_l) \sim D} \left[ \log \sigma (r_\phi (x, y_w) - r_\phi (x, y_l)) \right].\)
- $\sigma$ 是 sigmod 函数,用来二分类,表示 $\sigma (z) = \frac{1}{1 + \exp (-z)}$。
[!NOTE] 损失函数推导过程 偏好的定义: \(P^*(y_1 \succ y_2 \mid x) = \frac{\exp (r^*(x, y_1))}{\exp (r^*(x, y_1)) + \exp (r^*(x, y_2))}\) 然后根据最大似然的思想,我们要最大化这个概率,为了最大化这个概率方便我们对他取对数 \(\log P^*(y_1 \succ y_2 \mid x) = \log \left ( \frac{\exp (r^*(x, y_1))}{\exp (r^*(x, y_1)) + \exp (r^*(x, y_2))} \right)\) 然后因此,我们将模型的评分函数 $r_\phi (x, y_1)$ 和 $r_\phi (x, y_2)$ 代入上式,得到: \(\log P^*(y_w \succ y_l \mid x) = \log \left ( \frac{1}{1 + \exp (r^*(x, y_l) - r^*(x, y_w))} \right)\) 代入 sigmod 函数简化 \(\sigma (z) = \frac{1}{1 + \exp (-z)}\) 得: \(\log P^*(y_w \succ y_l \mid x) = \log \sigma (r_\phi (x, y_w) - r_\phi (x, y_l))\) 我们要求的是在样本上的期望,所以损失函数就是这个 \(\mathbb{E}_{(x, y_w, y_l) \sim D} \left[ \log \sigma (r_\phi (x, y_w) - r_\phi (x, y_l)) \right]\) 因为 loss 是最小化,所以加个负号 \(\mathcal{L}_{R}(r_{\phi},\mathcal{D})=-\mathbb{E}_{(x,y_{w},y_{l})\sim\mathcal{D}}\big[\log\sigma(r_{\phi}(x,y_{w})-r_{\phi}(x,y_{l}))\big]\)
- 奖励模型的实现:
-
在语言模型(LM)的上下文中,奖励模型 $r_\phi (x, y)$ 是在现有的 SFT 模型 $\pi^{\text{SFT}}(y x)$ 基础上构建的: - 在现有的 SFT 模型顶部添加一个线性层,以生成一个单一的标量预测值作为奖励值。
- 为了防止奖励模型的方差过高,通常会对奖励值进行归一化(如设置所有样本的奖励值期望为 0)。
-
强化学习阶段
\[\max_{\pi_\theta}\mathbb{E}_{x\sim\mathcal{D},y\sim\pi_\theta(y\mid x)}\begin{bmatrix}r_\phi(x,y)\end{bmatrix}-\beta\mathbb{D}_{\mathbf{KL}}\begin{bmatrix}\pi_\theta(y\mid x)\parallel\pi_{\mathbf{ref}}(y\mid x)\end{bmatrix}\]最大化奖励函数,同时最小化策略分布与参考分布的 KL 散度。
- 第一项 $\mathbb{E}[r_\phi (x, y)]$:
- 这是奖励函数 $r_\phi (x, y)$ 的期望,表示模型生成输出 $y$ 的质量。
- 模型的目标是生成能获得高奖励的输出。
- 第二项 $\beta D_{\text{KL}}[\pi_\theta | \pi_{\text{ref}}]$:
- 这是一个 KL 散度(Kullback-Leibler divergence)项,用来衡量当前策略 $\pi_\theta$ 偏离参考策略 $\pi_{\text{ref}}$ 的程度。
- $\beta$ 是一个超参数,用来控制当前策略 $\pi_\theta$ 和参考策略 $\pi_{\text{ref}}$ 偏离的强度。
- 添加这个约束的目的是防止模型在追求高奖励时生成过度偏离参考策略的内容(例如避免模式崩溃,即模型只输出单一高奖励答案)。
-
$\pi_{\text{ref}}(y x)$ 是参考策略,一般初始化为已经通过监督微调(Supervised Fine-Tuning, SFT)得到的模型 $\pi^{\text{SFT}}$。 - 重要性:使用参考策略是为了确保生成的内容在奖励函数精度高的分布范围内,同时保持生成的多样性,防止模式崩塌(mode collapse)。
但是,由于语言生成是离散的(输出是离散的单词序列),这个优化目标函数不可直接微分,无法用常规的梯度下降法进行优化。
标准的方法: \(R (x, y) = r_\phi (x, y) - \beta \left ( \log \pi_\theta (y|x) - \log \pi_{\text{ref}}(y|x) \right)\) 然后说使用 PPO 最大化。
- 复习一下梯度下降,思考一下这个为什么不可微就不能用梯度下降 [created:: 2024-11-19] [due:: 2024-11-19] [completion:: 2024-11-20]
- 学习 PPO 的论文 [created:: 2024-11-19]
DPO 算法
DPO 目标函数的推导
思路:从原本的 RLHF 的 loss 函数推导到 DPO 的 loss 函数
- 优化目标
我们的目标是找到策略 $\pi_\theta (y|x)$,使以下目标函数最大化:
\(\mathcal{L}(\pi_\theta) = \int \pi_\theta (y|x) r (x, y) \, dy - \beta \int \pi_\theta (y|x) \log \frac{\pi_\theta (y|x)}{\pi_{\text{ref}}(y|x)} \, dy.\)
其中:
-
第一项 $\int \pi_\theta (y x) r (x, y) dy$ 表示奖励函数 $r (x, y)$ 在策略 $\pi_\theta (y x)$ 下的期望。 -
第二项 $\beta \int \pi_\theta (y x) \log \frac{\pi_\theta (y x)}{\pi_{\text{ref}}(y x)} \, dy$ 是 KL 散度,用来约束策略 $\pi_\theta (y x)$ 不偏离参考策略 $\pi_{\text{ref}}(y x)$。 - $\beta > 0$ 是权衡奖励和约束的超参数。
-
此外,策略 $\pi_\theta (y | x)$ 需要满足概率分布的归一化条件: |
$$\int \pi_\theta (y | x) \, dy = 1.$$ |
- 引入拉格朗日乘子 为了在优化目标中引入概率分布的归一化约束,我们定义拉格朗日函数,加入一个归一化约束项 $\lambda (x)$: \(\mathcal{L}(\pi_\theta, \lambda) = \int \pi_\theta (y|x) r (x, y) \, dy - \beta \int \pi_\theta (y|x) \log \frac{\pi_\theta (y|x)}{\pi_{\text{ref}}(y|x)} \, dy + \lambda (x) \left ( 1 - \int \pi_\theta (y|x) \, dy \right ).\)
这里:
-
$\lambda (x)$ 是与输入 $x$ 相关的拉格朗日乘子,用来确保 $\pi_\theta (y x)$ 满足归一化条件。
-
**对 $\pi_\theta (y x)$ 求偏导** 对拉格朗日函数 $\mathcal{L}(\pi_\theta, \lambda)$ 关于 $\pi_\theta (y x)$ 求导,得到优化条件。具体计算如下:
(1) 奖励项的偏导 奖励项是: \(\int \pi_\theta (y|x) r (x, y) \, dy.\) 对 $\pi_\theta (y|x)$ 求偏导,得到: \(\frac{\partial}{\partial \pi_\theta (y|x)} \left[ \pi_\theta (y|x) r (x, y) \right] = r (x, y).\)
(2) KL 散度项的偏导 KL 散度项是: \(\int \pi_\theta (y|x) \log \frac{\pi_\theta (y|x)}{\pi_{\text{ref}}(y|x)} \, dy.\) 对 $\pi_\theta (y|x)$ 求偏导:
- 首先展开 KL 散度: \(\pi_\theta (y|x) \log \frac{\pi_\theta (y|x)}{\pi_{\text{ref}}(y|x)} = \pi_\theta (y|x) \log \pi_\theta (y|x) - \pi_\theta (y|x) \log \pi_{\text{ref}}(y|x).\)
- 求导时:
-
对 $\pi_\theta (y x) \log \pi_\theta (y x)$ 求导,得到: $$\log \pi_\theta (y x) + 1.$$ -
对 $\pi_\theta (y x) \log \pi_{\text{ref}}(y x)$ 求导,得到: $$\log \pi_{\text{ref}}(y x).$$
-
因此,KL 散度项的偏导为: \(\frac{\partial}{\partial \pi_\theta (y|x)} \left[ -\beta \int \pi_\theta (y|x) \log \frac{\pi_\theta (y|x)}{\pi_{\text{ref}}(y|x)} \, dy \right] = -\beta \left[ \log \pi_\theta (y|x) - \log \pi_{\text{ref}}(y|x) + 1 \right].\)
(3) 归一化约束项的偏导 归一化约束项是: \(\lambda (x) \left ( 1 - \int \pi_\theta (y|x) \, dy \right).\) 对 $\pi_\theta (y|x)$ 求导,得到: \(\frac{\partial}{\partial \pi_\theta (y|x)} \left[ \lambda (x) \left ( 1 - \int \pi_\theta (y|x) \, dy \right) \right] = -\lambda (x).\)
- 合并偏导并设为 0 将三部分的结果合并,得到: \(\frac{\partial \mathcal{L}}{\partial \pi_\theta (y|x)} = r (x, y) - \beta \left[ \log \pi_\theta (y|x) - \log \pi_{\text{ref}}(y|x) + 1 \right] - \lambda (x).\) 设偏导为 0: \(R (x, y) - \beta \left[ \log \pi_\theta (y|x) - \log \pi_{\text{ref}}(y|x) + 1 \right] - \lambda (x) = 0.\)
整理得到: \(\beta \log \pi_\theta (y|x) = \beta \log \pi_{\text{ref}}(y|x) + r (x, y) - \beta - \lambda (x).\)
- 解出 $\pi_\theta (y|x)$ 两边除以 $\beta$,得到: \(\log \pi_\theta (y|x) = \log \pi_{\text{ref}}(y|x) + \frac{1}{\beta} r (x, y) - \frac{1}{\beta} (\beta + \lambda (x)).\) 对两边取指数,得到: \(\pi_\theta (y|x) = \pi_{\text{ref}}(y|x) \cdot \exp\left (\frac{1}{\beta} r (x, y)\right) \cdot \exp\left (-\frac{1}{\beta} (\beta + \lambda (x))\right).\)
定义 $Z (x) = \exp\left (\frac{\lambda (x) + \beta}{\beta}\right)$ 为归一化常数,最终得到: \(\pi_\theta (y|x) = \frac{1}{Z (x)} \pi_{\text{ref}}(y|x) \cdot \exp\left (\frac{1}{\beta} r (x, y)\right).\)
-
分区函数 $Z (x)$ 的确定 为了保证 $\pi_\theta (y|x)$ 是一个合法的概率分布,满足: \(\int \pi_\theta (y|x) \, dy = 1.\) 将 $\pi_\theta (y|x)$ 的表达式代入: \(\int \frac{1}{Z (x)} \pi_{\text{ref}}(y|x) \cdot \exp\left (\frac{1}{\beta} r (x, y)\right) \, dy = 1.\) 因此: \(Z (x) = \int \pi_{\text{ref}}(y|x) \cdot \exp\left (\frac{1}{\beta} r (x, y)\right) \, dy.\) —
-
解出 $r(x,y)$ 由上述 $\pi_\theta (y|x)$ 的表达式,可以解出 $r(x,y)$:
- 代入偏好模型
- 求得 Loss 根据最大似然估计,我们可以得到损失函数:
DPO相当于拟合一个重新参数化的 Bradley-Terry 模型
\[r(y)=\beta\log\frac{\pi_\theta(y|x)}{\pi_\mathrm{ref}(y|x)},\]作者不直接定义一个显式的 r(y),而是通过语言模型策略 $\pi_\theta(y | x)$ 和参考策略 $\pi_\mathrm{ref}(y | x)$ 的比率间接定义。 |
DPO 梯度更新过程
我们从 DPO 损失函数的定义出发,通过逐步推导梯度公式,来说明公式的来源。以下是具体推导过程。
- DPO 的损失函数 DPO 的目标是最小化以下损失函数: \(\mathcal{L}_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[\log \sigma \left (\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)} \right) \right],\)
- 对损失函数的梯度求导 我们希望计算损失函数对策略参数 $\theta$ 的梯度: \(\nabla_\theta \mathcal{L}_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}).\) 2.1 将梯度作用到期望外 损失函数是一个期望形式,因此可以将梯度直接作用到期望内部: \(\nabla_\theta \mathcal{L}_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[ \nabla_\theta \log \sigma \left (\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)} \right) \right].\)
2.2 对 sigmoid 内部项求导 对 $\log \sigma (z)$ 的梯度为: \(\nabla_\theta \log \sigma (z) = \sigma (-z) \cdot \nabla_\theta z.\) 其中 $\sigma (-z) = 1 - \sigma (z)$。这一步的作用是将梯度转移到 $z$ 上。
令: \(Z = \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)}.\)
则: \(\nabla_\theta \log \sigma (z) = \sigma (-z) \cdot \nabla_\theta z.\)
2.3 计算 $z$ 对 $\theta$ 的梯度 将 $z$ 展开为: \(Z = \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)}.\)
计算 $z$ 对 $\theta$ 的梯度: \(\nabla_\theta z = \beta \left ( \nabla_\theta \log \pi_\theta (y_w|x) - \nabla_\theta \log \pi_\theta (y_l|x) \right).\)
将 $\nabla_\theta z$ 和 $\sigma (-z)$ 带入梯度公式: \(\nabla_\theta \mathcal{L}_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}) = -\mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[ \sigma (-z) \cdot \beta \left ( \nabla_\theta \log \pi_\theta (y_w|x) - \nabla_\theta \log \pi_\theta (y_l|x) \right) \right].\)
2.4 简化权重项 注意到 $\sigma (-z) = 1 - \sigma (z)$。对于 DPO 的优化,权重用 $\sigma (z)$ 即可,因此最终梯度为: \(\nabla_\theta \mathcal{L}_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}) = -\beta \mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[ \sigma \left ( \beta \log \frac{\pi_\theta (y_l|x)}{\pi_{\text{ref}}(y_l|x)} - \beta \log \frac{\pi_\theta (y_w|x)}{\pi_{\text{ref}}(y_w|x)} \right) \cdot \left ( \nabla_\theta \log \pi_\theta (y_w|x) - \nabla_\theta \log \pi_\theta (y_l|x) \right) \right].\)
- 最终公式 令隐式奖励函数为: \(\hat{r}_\theta (x, y) = \beta \log \frac{\pi_\theta (y|x)}{\pi_{\text{ref}}(y|x)}.\) 则公式进一步简化为: \(\nabla_\theta \mathcal{L}_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}) = -\beta \mathbb{E}_{(x, y_w, y_l) \sim \mathcal{D}} \left[ \sigma \left ( \hat{r}_\theta (x, y_l) - \hat{r}_\theta (x, y_w) \right) \cdot \left ( \nabla_\theta \log \pi_\theta (y_w|x) - \nabla_\theta \log \pi_\theta (y_l|x) \right) \right].\)
梯度更新的解释
- 调整偏好答案和非偏好答案的概率:
-
梯度的第一项 $\nabla_\theta \log \pi_\theta(y_w x)$ 增加偏好答案 $y_w$ 的生成概率。 -
第二项 $\nabla_\theta \log \pi_\theta(y_l x)$ 减少非偏好答案 $y_l$ 的生成概率。 - 更新的大小由 sigmoid 加权,重点修正模型排序错误较大的样本。
- 权重反映偏好评分的偏差:
-
权重 $\sigma(\hat{r}\theta(x, y_l) - \hat{r}\theta(x, y_w))$ 直接取决于偏好排序的正确性。
-
如果模型对偏好和非偏好的排序与人类一致,则权重较小;否则,权重较大,修正力度更强。
- 综合目标:
- DPO 的更新机制本质上是在策略 $\pi_\theta$ 和人类偏好之间不断调整,使 $\pi_\theta$ 生成的结果逐渐接近人类期望。
DPO 的流程
这段话描述了 DPO 方法的具体工作流程,包括如何构建数据集、初始化模型以及优化策略的过程。以下是详细解析:
- DPO 的工作流程
(1) 数据集构建
-
样本生成:首先,对每个提示 $x$(例如一个问题或任务)生成两个候选答案 $y_1$ 和 $y_2$,它们是从参考策略 $\pi_{\text{ref}}(\cdot x)$ 中采样得到的。 - 人类偏好标注:然后,通过人类标注的方式,根据偏好选择 $y_1$ 和 $y_2$ 中的优先答案(例如,哪一个更符合人类预期)。标注后的数据集可以表示为: \(D = \{(x^{(i)}, y_w^{(i)}, y_l^{(i)})\}_{i=1}^N,\) 其中 $y_w$ 是偏好答案(”winner”),$y_l$ 是不偏好答案(”loser”)。
-
(2) 优化语言模型
- 在构造好的偏好数据集 $D$ 和给定的参考策略 $\pi_{\text{ref}}$ 下,优化目标是最小化 DPO 损失函数: \(\mathcal{L}_{\text{DPO}} = -\mathbb{E}_{(x, y_w, y_l) \sim D} \left[\log \sigma\left (\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)}\right)\right].\)
- 通过优化 $\pi_\theta$,使得模型逐渐调整为生成更符合人类偏好的答案。
- 实际应用中的简化
- 在实际操作中,可以直接复用现有的公开偏好数据集,而无需重复生成候选答案并进行人类标注。这种做法大大减少了数据构建的成本。
- 参考策略 $\pi_{\text{ref}}$ 的初始化
(1) 如果 $\pi^{\text{SFT}}$ 可用:
- 通常,参考策略 $\pi_{\text{ref}}$ 是从监督微调模型 $\pi^{\text{SFT}}$ 初始化的。
- $\pi^{\text{SFT}}$: 通过监督学习方法训练的模型,它是一个能够生成合理答案的基础模型。
- 当 $\pi^{\text{SFT}}$ 可用时,直接设置 $\pi_{\text{ref}} = \pi^{\text{SFT}}$。
(2) 如果 $\pi^{\text{SFT}}$ 不可用:
- 如果没有现成的监督微调模型 $\pi^{\text{SFT}}$,可以通过最大化偏好答案的似然初始化参考策略: \(\pi_{\text{ref}} = \arg\max_{\pi} \mathbb{E}_{(x, y_w) \sim D} [\log \pi (y_w|x)].\)
- 这意味着 $\pi_{\text{ref}}$ 的训练目标是提升偏好答案 $y_w$ 的生成概率,从而构造一个合理的参考策略。
- 通过 $\pi^{\text{SFT}}$ 或最大化偏好答案似然的方法,可以缓解模型分布与真实参考分布(即人类偏好生成的答案分布不可用)之间的偏移问题。
DPO 理论分析
证明 1:你的模型包含奖励模型
证明,DPO 的训出来的模型
\(r^*(x,y)=\beta\log\frac{\pi_\theta^*(y|x)}{\pi_{\mathrm{ref}}(y|x)}\) 等价于一般的奖励模型(Bradley-Terry 模型)
下面为了证明证明 1 ,给出了一些定义和引理。
定义 1:偏好奖励模型等价
两个偏好奖励模型等价当且仅当 \(r(x,y)-r^{\prime}(x,y)=f(x)\)
证明:
在定义中,$f (x)$ 是与 $x$ 有关的函数,而不是一个常数。这是等价性定义中的关键点。
定义中提到,两个奖励函数 $r (x, y)$ 和 $r’ (x, y)$ 被认为是等价的,如果它们的差异可以表示为: \(R (x, y) - r' (x, y) = f (x),\) 其中 $f (x)$ 是仅与输入 $x$ 相关的函数,和候选答案 $y$ 无关。
为什么 $f (x)$ 与 $x$ 相关?
- $f (x)$ 可能表示不同输入 $x$ 的整体偏移量。这个偏移量对候选项 $y$ 是一致的,但会因 $x$ 而变化。
- $f (x)$ 的存在表明,不同输入 $x$ 下,奖励函数的绝对值可以有不同的基线或偏移,但这些偏移不影响候选项 $y$ 之间的相对评分。
等价性定义
两个奖励函数 $r (x, y)$ 和 $r’ (x, y)$ 被认为是等价的,若它们的差异为: \(R (x, y) - r' (x, y) = f (x),\)
- 这里 $f (x)$ 是仅与输入 $x$ 有关的函数,而不是一个常数。
- 换句话说,$r (x, y)$ 和 $r’ (x, y)$ 对任意给定的输入 $x$,它们的评分差异在候选项 $y$ 上是恒定的。
为什么允许 $f (x)$ 的存在?
在偏好分布(如 Bradley-Terry 或 Plackett-Luce 模型)中,偏好仅取决于奖励函数的相对差异,而不是奖励函数的绝对值。因此:
- $f (x)$ 的存在相当于为输入 $x$ 下的所有候选项 $y$ 添加了一个全局偏移。
- 这个偏移不影响候选项之间的相对评分,因此不会改变偏好分布或最优策略。
具体解释:$f (x)$ 的作用
- 举例
假设对于输入 $x$,两个奖励函数是:
\(R (x, y) = \text{quality}(y) + 10 x, \quad r' (x, y) = \text{quality}(y),\)
其中 $\text{quality}(y)$ 表示候选项 $y$ 的质量,而 $10 x$ 是一个仅与 $x$ 相关的偏移。
- 这里 $r (x, y) - r’ (x, y) = 10 x = f (x)$。
- 虽然 $f (x) = 10 x$ 会影响奖励函数的绝对值,但它对 $y$ 的相对排序没有影响,因此 $r (x, y)$ 和 $r’ (x, y)$ 是等价的。
- 对偏好分布的影响 在 Bradley-Terry 模型中,偏好分布是由相对评分决定的,例如: \(P (y_1 \succ y_2 \mid x) = \frac{\exp (r (x, y_1))}{\exp (r (x, y_1)) + \exp (r (x, y_2))}.\) 如果 $r (x, y)$ 和 $r’ (x, y)$ 相差 $f (x)$,则: \(P (y_1 \succ y_2 \mid x) = \frac{\exp (r' (x, y_1) + f (x))}{\exp (r' (x, y_1) + f (x)) + \exp (r' (x, y_2) + f (x))}.\) 因为 $f (x)$ 是对所有候选项的全局偏移,它在分布计算中被约掉,不影响最终的概率值。
### 结论 :等价类和最优策略
引理 2
同一等价类中的奖励函数会导致相同的最优策略。
为什么?
- 在强化学习(RL)中,最优策略由奖励函数的相对差异决定,而非绝对值。
- 由于同一等价类中的奖励函数在候选答案之间的相对排序相同,因此它们会诱导相同的最优策略。
结论:与 Plackett-Luce 或 Bradley-Terry 模型一致的奖励函数等价类,都可以通过重新参数化的形式来表示。
证明略
传统强化学习方法的不稳定性
这段内容从理论和实验两个角度解释了 DPO(Direct Preference Optimization) 方法的稳定性优势,并将其与基于强化学习(如 PPO)的方法进行了对比,指出了 DPO 的理论优势以及在实际应用中的鲁棒性表现。
以下是逐步解析:
(1) 强化学习中的优化目标
文中提到的优化目标是: \(\max_{\pi_\theta} \mathbb{E}_{\pi_\theta} \left[ r_\phi (x, y) - \beta \log \sum_y \pi_{\text{ref}}(y|x) \exp \left ( \frac{1}{\beta} r_\phi (x, y) \right) - \beta \log \frac{\pi_\theta (y|x)}{\pi_{\text{ref}}(y|x)} \right].\)
- 主要内容:
- $r_\phi (x, y)$:由奖励函数定义的分数。
- 第二项是一个归一化项,对应分区函数的对数值。
- 最后一项是策略 $\pi_\theta$ 和参考策略 $\pi_{\text{ref}}$ 之间的 KL 散度,用于限制策略偏离参考策略的程度。
(2) 强化学习的不稳定性来源
- 传统强化学习(例如 PPO)使用Actor-Critic 框架优化类似的目标,然而:
- 归一化项(normalization term):
-
分区函数的计算(即 $\sum_y \pi_{\text{ref}}(y x) \exp \left ( \frac{1}{\beta} r_\phi (x, y) \right)$)是高维的积分,可能导致优化过程的不稳定。 - 如果不精确估计归一化项,梯度的方差会增大,优化变得困难。
-
- 高方差的梯度:
- 在传统 RL 中,归一化项通常通过 Monte Carlo 采样估计,这可能导致梯度估计的高方差,进而影响收敛。
- 归一化项(normalization term):
(3) DPO 的解决方案
DPO 的重新参数化解决了上述问题:
- 不需要显式估计归一化项:
- DPO 的重新参数化将归一化项隐含地包含在优化过程中,不需要像 PPO 那样使用 Monte Carlo 或复杂的基线函数来估计分区函数。
- 更稳定的梯度更新:
- 通过直接优化策略(而非依赖价值函数或采样基线),DPO 避免了梯度的高方差问题,使得训练过程更加稳定。
实验
略