简化对齐:从 RLHF 到直接偏好优化 (DPO)

社区文章 发布于 2025 年 1 月 19 日

大型语言模型 (LLM) 每天都在变得更智能,但如何教会它们做**我们**想做的事,使它们与人类偏好对齐,仍然是一个难题。作为深度学习从业者,我们知道如果想让模型学习某样东西,就需要给它数据,对吧?那么,为什么不收集一些我们喜欢的东西的例子,然后让模型学习这些偏好呢?

这就是带人类反馈的强化学习 (RLHF) 的用武之地。它是一种通过使用反馈数据来教会 LLM 遵循人类偏好的巧妙方法。但 RLHF 可能有点麻烦——它引入了强化学习,优化很快变得棘手。

直接偏好优化 (DPO) 应运而生。DPO 跳过了 RL 部分,但仍然能够教会模型遵循偏好。它更简单、更清晰,而且说实话,谁不喜欢简单呢?

在这篇博客中,我们将踏上从 RLHF 到 DPO 的旅程,分解其中的数学(别担心,我们会保持轻松),并探讨为什么 DPO 可能是一个更智能、更简单的前进方向。

带人类反馈的强化学习 (RLHF)

RLHF 是一个通过结构化的三阶段过程,使语言模型与人类偏好对齐的框架。每个阶段都建立在前一个阶段的基础上,不断完善模型,使其更好地理解和生成符合人类期望的回复。让我们来详细分解一下。

1. 监督微调 (SFT)

我们首先使用高质量的、特定任务的数据对预训练语言模型进行微调。这个过程生成一个基础策略 πSFT(yx) \pi_{\text{SFT}}(y \mid x) ,它表示模型在给定输入 x x 的情况下生成输出 y y 的概率。

这个基础策略是一个强大的起点,它捕捉了与任务相关的通用行为,但仍需要进一步细化以与人类偏好对齐。

2. 偏好采样与奖励学习

此阶段侧重于收集有关人类偏好的数据并构建一个**奖励模型**以数字方式表示这些偏好。

偏好采样

其工作原理如下:

  1. 监督微调模型为给定输入或提示 x x 生成**回复对** (y1,y2) (y_1, y_2)
  2. 人类标注者比较这些回复,并选择他们偏好的回复 yw y_w (“赢家”),而不是不那么偏好的回复 yl y_l (“输家”)。

这些人类偏好将作为下一步的训练数据。

奖励建模

我们希望创建一个**奖励模型** rϕ(x,y) r_\phi(x, y) ,它为给定提示 x x 的每个回复 y y 分配一个数值分数(奖励)。这个分数反映了回复与人类偏好的一致程度。

偏好对建模

为了训练这个奖励模型,我们依赖于回复 yw y_w (赢家)和 yl y_l (输家)的**偏好对比较**。偏好使用**Bradley-Terry 框架**进行建模,该框架为偏好分配一个概率。

  1. yw y_w 优于 yl y_l 的概率为: pϕ(yw>ylx)=exprϕ(x,yw)exprϕ(x,yw)+exprϕ(x,yl). p_\phi(y_w > y_l \mid x) = \frac{\exp r_\phi(x, y_w)}{\exp r_\phi(x, y_w) + \exp r_\phi(x, y_l)}.

    • rϕ(x,yw) r_\phi(x, y_w) rϕ(x,yl) r_\phi(x, y_l) :分别分配给赢家和输家的奖励(分数)。
    • 分子 exprϕ(x,yw) \exp r_\phi(x, y_w) :表示赢家是偏好选择的可能性。
    • 分母通过包含两个选项来确保概率总和为 1: exprϕ(x,yw)+exprϕ(x,yl) \exp r_\phi(x, y_w) + \exp r_\phi(x, y_l)
  2. 重新整理后,我们将概率写成奖励差的形式: pϕ(yw>ylx)=11+exp[rϕ(x,yl)rϕ(x,yw)]. p_\phi(y_w > y_l \mid x) = \frac{1}{1 + \exp \left[ r_\phi(x, y_l) - r_\phi(x, y_w) \right]}.

    • rϕ(x,yl)rϕ(x,yw) r_\phi(x, y_l) - r_\phi(x, y_w) :输家和赢家分数之间的差值。
    • exp() \exp(\cdot) :将此差值转换为概率的缩放因子。
  3. 使用**sigmoid 函数** σ(z)=11+ez \sigma(z) = \frac{1}{1 + e^{-z}} ,方程变为: pϕ(yw>ylx)=σ(rϕ(x,yw)rϕ(x,yl)). p_\phi(y_w > y_l \mid x) = \sigma(r_\phi(x, y_w) - r_\phi(x, y_l)).

    • rϕ(x,yw)rϕ(x,yl) r_\phi(x, y_w) - r_\phi(x, y_l) :如果赢家的分数远高于输家,则概率接近 1(赢家被强烈偏好)。
训练奖励模型

为了训练 rϕ r_\phi ,我们对其进行优化,使其尽可能与人类偏好匹配。这通过**最大似然估计 (MLE)** 完成。

  • 奖励模型的损失函数为:LR(rϕ,D)=E(x,yw,yl)D[logσ(rϕ(x,yw)rϕ(x,yl))]. \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].

    • D \mathcal{D} : 人类偏好数据集(每个提示 x x 的配对 yw,yl y_w, y_l )。
    • logσ() \log \sigma(\cdot) : 惩罚将低概率分配给实际人类偏好的预测。
    • 目标是最小化负对数似然,确保奖励模型将其预测与收集到的人类反馈对齐。

3. 强化学习(RL)优化

最后一步涉及使用强化学习微调策略 πϕ(yx) \pi_\phi(y \mid x) 以最大化奖励。然而,直接最大化奖励可能导致与基本策略 πSFT \pi_{\text{SFT}} 出现过度偏差,导致不自然或过度优化的行为。为了解决这个问题,我们添加一个惩罚来约束策略

强化学习目标

优化目标是:maxπϕ ExD,yπϕ(yx)[rϕ(x,y)]βDKL[πϕ(yx)πref(yx)]. \max_{\pi_\phi} \ \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi_\phi(y \mid x)} \big[ r_\phi(x, y) \big] - \beta \text{D}_{\text{KL}} \big[ \pi_\phi(y \mid x) \Vert \pi_{\text{ref}}(y \mid x) \big].

  • 第一项: E[rϕ(x,y)] \mathbb{E}[r_\phi(x, y)]

    • 鼓励策略生成具有更高奖励的响应。
  • 第二项: DKL \text{D}_{\text{KL}}

    • DKL(PQ) \text{D}_{\text{KL}}(P \Vert Q) : Kullback-Leibler (KL) 散度,衡量 P P Q Q 差异的度量。
    • 惩罚策略 πϕ \pi_\phi 偏离参考策略 πref \pi_{\text{ref}} (通常是 πSFT \pi_{\text{SFT}} )过远。
  • β \beta : 权重因子,控制最大化奖励与保持接近参考策略之间的平衡。

这个过程完成了 RLHF 流程,其中强化学习确保模型生成响应,最大化与人类偏好的对齐,同时保持自然和与任务相关的行为。

RLHF 的挑战

  1. 语言输出的不可微性:
    语言生成涉及采样离散的标记,这在优化过程中会中断梯度流。这使得直接使用基于梯度的方法(深度学习的支柱)来调整模型变得棘手。

  2. 奖励模型难以泛化:
    奖励模型学习预测人类偏好,但很难捕捉人类真正偏好的细微差别和多样性。如果奖励模型未能泛化,可能导致不对齐或有偏见的优化。

  3. 计算和实现开销:
    强化学习显著增加了流程的复杂性。从设计奖励函数到调整超参数(如 KL 惩罚),它需要专业的知识,并且比简单的微调方法需要更多的计算能力。

从 RLHF 到直接偏好优化(DPO)

在本节中,我们将重新构建 RLHF 目标并引入关键变量变换。这种重新构建将为理解直接偏好优化(DPO)的工作原理以及为什么它是 RLHF 更简单、更高效的替代方案铺平道路。

RLHF 目标重构

RLHF 目标最初为

maxπ ExD,yπ(yx)[r(x,y)]βDKL[π(yx)πref(yx)]. \max_{\pi} \ \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi(y \mid x)} \big[ r(x, y) \big] - \beta \text{D}_{\text{KL}} \big[ \pi(y \mid x) \Vert \pi_{\text{ref}}(y \mid x) \big].

此目标平衡两个目标

  1. 最大化奖励:鼓励模型 π(yx) \pi(y \mid x) 生成与人类偏好对齐的输出 y y ,如奖励 r(x,y) r(x, y) 所捕捉。
  2. 约束偏差:防止模型偏离参考策略 πref(yx) \pi_{\text{ref}}(y \mid x) (通常是监督微调模型)过远,这确保了稳定性和避免了过于激进的更改。

展开 KL 散度项

KL 散度衡量当前策略 π(yx) \pi(y \mid x) 与参考策略 πref(yx) \pi_{\text{ref}}(y \mid x) 之间的“距离”。展开后得到

DKL[π(yx)πref(yx)]=Eyπ(yx)[logπ(yx)logπref(yx)]. \text{D}_{\text{KL}}\big[\pi(y \mid x) \Vert \pi_{\text{ref}}(y \mid x)\big] = \mathbb{E}_{y \sim \pi(y \mid x)} \big[ \log \pi(y \mid x) - \log \pi_{\text{ref}}(y \mid x) \big].

此项惩罚 π \pi 偏离 πref \pi_{\text{ref}} 。将其代回原始目标得到

maxπ ExD,yπ(yx)[r(x,y)βlogπ(yx)+βlogπref(yx)]. \max_{\pi} \ \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi(y \mid x)} \big[ r(x, y) - \beta \log \pi(y \mid x) + \beta \log \pi_{\text{ref}}(y \mid x) \big].

转换为最小化形式

为简单起见,我们将目标重写为最小化问题(最大化目标的负数最小化)

minπ ExD,yπ(yx)[logπ(yx)logπref(yx)r(x,y)β]. \min_{\pi} \ \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi(y \mid x)} \big[ \log \pi(y \mid x) - \log \pi_{\text{ref}}(y \mid x) - \frac{r(x, y)}{\beta} \big].

这突出了权衡

  • logπ(yx) \log \pi(y \mid x) 项鼓励策略关注可能的输出。
  • logπref(yx) -\log \pi_{\text{ref}}(y \mid x) 项确保输出与参考模型保持接近。
  • r(x,y)β \frac{-r(x, y)}{\beta} 项使策略偏向高奖励响应。

引入配分函数

我们引入一个函数 Z(x) Z(x)

Z(x)=yπref(yx)exp[r(x,y)β]. Z(x) = \sum_y \pi_{\text{ref}}(y \mid x) \exp\big[ \frac{r(x, y)}{\beta} \big].

使用 Z(x) Z(x) ,我们可以将 π(yx) \pi(y \mid x) 表示为

π(yx)=1Z(x)πref(yx)exp[r(x,y)β]. \pi(y \mid x) = \frac{1}{Z(x)} \pi_{\text{ref}}(y \mid x) \exp\big[ \frac{r(x, y)}{\beta} \big].

这是直觉

  • πref(yx) \pi_{\text{ref}}(y \mid x) : 作为基线分布(我们的起点)。
  • exp[r(x,y)β] \exp\big[\frac{r(x, y)}{\beta}\big] : 根据其奖励缩放输出 y y ,使高奖励输出更可能。
  • Z(x) Z(x) : 归一化分布,使概率之和为 1。

这种公式使我们能够通过结合奖励模型中编码的偏好来重新加权参考策略,而无需直接强化学习。

DPO 损失的推导

直接偏好优化(DPO)的关键技巧是关注成对偏好,这简化了优化。让我们分解一下

成对偏好

对于两个完成项 y1 y_1 (胜者)和 y2 y_2 (败者),我们关心人类偏好 y1 y_1 胜过 y2 y_2 的概率。使用 Bradley-Terry 模型,该概率为

p(y1>y2x)=σ(βlogπ(y1x)πref(y1x)βlogπ(y2x)πref(y2x)), p(y_1 > y_2 \mid x) = \sigma\big(\beta \log \frac{\pi(y_1 \mid x)}{\pi_{\text{ref}}(y_1 \mid x)} - \beta \log \frac{\pi(y_2 \mid x)}{\pi_{\text{ref}}(y_2 \mid x)}\big),

其中 σ(z)=11+ez \sigma(z) = \frac{1}{1 + e^{-z}} 是 Sigmoid 函数。

简化 π(yx) \pi(y \mid x)

从之前的重构中,代入 π(yx) \pi(y \mid x) ,得到

π(yx)=1Z(x)πref(yx)exp[r(x,y)β]. \pi(y \mid x) = \frac{1}{Z(x)} \pi_{\text{ref}}(y \mid x) \exp\big[ \frac{r(x, y)}{\beta} \big].

当比较两个输出 y1 y_1 y2 y_2 时,分配函数 Z(x) Z(x) 会抵消(因为两者相同),留下:

p(y1>y2x)=σ(r(x,y1)r(x,y2)). p(y_1 > y_2 \mid x) = \sigma\big(r(x, y_1) - r(x, y_2)\big).

这简化了计算,因为我们不再需要显式计算 Z(x) Z(x) 。Sigmoid 函数确保更高的奖励对应更高的概率。

DPO 损失

为了训练 πθ \pi_\theta (参数化策略),我们使用人类偏好的**最大似然估计(MLE)**。DPO 损失变为:

LDPO(πθ,πref)=E(x,yw,yl)D[logσ(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx))]. \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 \mid x)}{\pi_{\text{ref}}(y_w \mid x)} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_{\text{ref}}(y_l \mid x)}\big) \big].

为什么这个技巧有效?

  1. 无需强化学习:
    通过将问题重新定义为成对偏好,并重新加权参考策略,DPO 消除了对复杂强化学习的需求。

  2. 更简单的优化:
    在成对比较中,分配函数 Z(x) Z(x) 会抵消,从而降低了计算开销。训练直接专注于与人类偏好对齐。

  3. 提高稳定性:
    来自 πref(yx) \pi_{\text{ref}}(y \mid x) 的 KL 约束确保 πθ \pi_\theta 保持基础,避免了强化学习中常见的极端行为变化。

  4. 专注于人类偏好:
    通过直接优化成对偏好概率,DPO 将学习过程集中在人类标注数据上,使输出更自然地符合人类预期。

结论

直接偏好优化通过用直接优化框架取代 RLHF 的强化学习阶段,简化了大型语言模型的对齐。通过处理成对偏好并避免强化学习,DPO 在降低计算和实现开销的情况下实现了对齐,使其成为对齐大型模型的有力替代方案。

随着对齐技术的发展,DPO 示例了简化假设如何为人工智能中的现实世界挑战带来实用且有效的解决方案。

社区

解释得太好了!他们能将一个优化问题转化为可微分方程简直是太棒了!
我最近一直在尝试理解 DPO 的内部工作原理,并观看了 这个 @hkproj 制作的视频。干得漂亮!

另外,为像我这样的新手补充一下

  1. 《重新构建 RLHF 目标》中第 3 步的最大化方程
    我们用 −β 来除最大化方程,因为有负号,它就变成了最小化问题。
  2. 在 (介绍分区函数) 中,Z(x) 是一个归一化常数。我无法理解 Z(x) 这个项是如何出现的,以及它是如何被替换的。于是我问了 ChatGPT,得到了这个!
    Screenshot 2025-01-20 095816.png
    这有点道理,但我还没有验证它是否正确。
  3. DPO 论文的“数学推导”部分有一些有用的步骤:https://arxiv.org/pdf/2305.18290

遗憾的是,这个界面不允许我像 ChatGPT 界面那样直接选择文本并用于评论。也许这是一个 UI 功能?:)

文章作者

很高兴你对这个话题感兴趣,并花时间阅读了整篇文章。

我从你的评论中了解到,更详细的推导(附带理由)将使数学更容易理解。我会尝试调整这篇博客文章以符合你的评论(你看到我在这里做了什么吗?😌)

文章作者

@NotShrirang 许多部分都已更新。如果你有时间,可以再看看这篇文章,告诉我你觉得现在怎么样。

·

@ariG23498 嘿,我又读了一遍文章,感觉容易理解多了。为你的快速响应点赞!我知道改变你投入了努力的东西并不容易。

感谢你直接与我的偏好对齐!
损失:📉

注册登录 以发表评论