【基础知识】DPO(Direct Preference Optimization)的原理以及公式是怎样的?
DPO方法的关键在于直接利用人类偏好数据来优化语言模型,从而避免了RLHF流程中奖励模型拟合和RL优化的复杂性和不稳定性。这种方法简化了偏好学习的过程,降低了实现的复杂性,并有可能提高模型根据人类偏好生成输出的效率和准确性。
论文:Direct Preference Optimization: Your Language Model is Secretly a Reward Model
1.基本原理
DPO(Direct Preference Optimization)的核心思想是直接优化语言模型(LM)以符合人类偏好,而不是首先拟合一个奖励模型然后使用强化学习(RL)进行优化。这是通过对偏好学习问题进行重新参数化来实现的,其中使用了一个简单的二元交叉熵目标函数来直接从人类偏好中训练LM。下面是DPO方法的数学推导核心步骤:
1.1 基本概念
首先,假设我们有一个预训练的语言模型 π ref \pi_{\text{ref}} πref和一组人类对模型生成结果的偏好数据。我们的目标是训练一个新的策略模型 π \pi π,使其生成的输出更符合人类的偏好。
1.2 引入奖励模型
在传统的RLHF(Reinforcement Learning from Human Feedback)框架中,人类的偏好被用来训练一个奖励模型 r r r,该模型预测人类对于给定输入和输出对的偏好强度。然后,使用RL算法优化语言模型以最大化这个预测的奖励。
1.3 直接偏好优化(DPO)
DPO的关键创新是避免显式训练奖励模型,而是直接根据人类的偏好来优化语言模型。为了实现这一点,我们首先定义一个基于偏好的目标函数,直接将人类的偏好转化为模型训练的损失函数。
具体来说,如果人类偏好偏向于两个潜在输出中的一个
y
1
y_1
y1相对于
y
2
y_2
y2,我们可以使用以下的二元交叉熵损失函数来直接优化语言模型
π
\pi
π:
L
(
π
)
=
−
∑
(
x
,
y
1
,
y
2
)
∈
D
[
p
(
y
1
≻
y
2
∣
x
)
log
π
(
y
1
∣
x
)
+
(
1
−
p
(
y
1
≻
y
2
∣
x
)
)
log
(
1
−
π
(
y
1
∣
x
)
)
]
L(\pi) = - \sum_{(x, y_1, y_2) \in D} \left[ p(y_1 \succ y_2 | x) \log \pi(y_1 | x) + (1 - p(y_1 \succ y_2 | x)) \log (1 - \pi(y_1 | x)) \right]
L(π)=−(x,y1,y2)∈D∑[p(y1≻y2∣x)logπ(y1∣x)+(1−p(y1≻y2∣x))log(1−π(y1∣x))]
其中,
p
(
y
1
≻
y
2
∣
x
)
p(y_1 \succ y_2 | x)
p(y1≻y2∣x)表示在给定输入
x
x
x的情况下,人类偏好
y
1
y_1
y1胜过
y
2
y_2
y2的概率,
D
D
D是包含输入和偏好对的数据集。
通过最小化这个损失函数,模型学习直接从人类偏好中产生更受偏好的输出,而无需间接地通过奖励模型。
1.4 实现细节
在实践中, π \pi π可以通过对预训练的语言模型进行微调来实现。微调的过程中,调整模型参数以最小化上述损失函数,使模型输出与人类偏好更加一致。
1.5 总结
DPO方法的关键在于直接利用人类偏好数据来优化语言模型,从而避免了RLHF流程中奖励模型拟合和RL优化的复杂性和不稳定性。这种方法简化了偏好学习的过程,降低了实现的复杂性,并有可能提高模型根据人类偏好生成输出的效率和准确性。
2. 详细公式
论文中的Direct Preference Optimization (DPO)公式推导涉及几个重要步骤,主要是从基于偏好的学习问题到直接优化策略的转变。以下是关键公式推导的详细步骤:
2.1 强化学习目标与KL约束
在强化学习中,常见的目标是最大化期望奖励,同时可能希望优化后的策略不要与原始策略偏离太远。这可以通过KL散度(Kullback-Leibler divergence)来约束,形成如下优化问题:
max π E x ∼ D , y ∼ π ( ⋅ ∣ x ) [ r ( x , y ) ] − β D K L ( π ( ⋅ ∣ x ) ∣ ∣ π ref ( ⋅ ∣ x ) ) \max_{\pi} \mathbb{E}_{x \sim D, y \sim \pi(\cdot|x)} [r(x, y)] - \beta D_{KL}(\pi(\cdot|x) || \pi_{\text{ref}}(\cdot|x)) πmaxEx∼D,y∼π(⋅∣x)[r(x,y)]−βDKL(π(⋅∣x)∣∣πref(⋅∣x))
其中, r ( x , y ) r(x, y) r(x,y)是奖励函数, π ( ⋅ ∣ x ) \pi(\cdot|x) π(⋅∣x)是策略, π ref ( ⋅ ∣ x ) \pi_{\text{ref}}(\cdot|x) πref(⋅∣x)是参考策略(例如预训练的语言模型), β \beta β是一个权衡因子。
2.2 从奖励函数到优化策略的转变
文章提出了一种方法,通过改变变量将奖励优化问题直接转化为策略优化问题。核心思想是将奖励函数 r ( x , y ) r(x, y) r(x,y)与策略 π ( ⋅ ∣ x ) \pi(\cdot|x) π(⋅∣x)之间建立一个显式的函数关系。假设存在这样的映射,使得优化后的策略 π ∗ \pi^* π∗可以直接从奖励函数中获得,即:
π ∗ ( y ∣ x ) = π ref ( y ∣ x ) exp ( 1 β r ( x , y ) ) Z ( x ) \pi^*(y|x) = \frac{\pi_{\text{ref}}(y|x) \exp(\frac{1}{\beta} r(x, y))}{Z(x)} π∗(y∣x)=Z(x)πref(y∣x)exp(β1r(x,y))
- π ref ( y ∣ x ) \pi_{\text{ref}}(y|x) πref(y∣x)代表参考策略,通常是预训练的语言模型提供的策略。
- β \beta β是一个控制策略偏离参考策略程度的参数。
- Z ( x ) Z(x) Z(x)是归一化常数,确保 π ∗ ( y ∣ x ) \pi^*(y|x) π∗(y∣x)为概率分布。
其中, Z ( x ) Z(x) Z(x)是归一化因子,确保 π ∗ ( y ∣ x ) \pi^*(y|x) π∗(y∣x)是一个有效的概率分布。
Z ( x ) Z(x) Z(x)具体是什么?
在DPO方法中, Z ( x ) Z(x) Z(x)是一个归一化常数,也称为配分函数(partition function)。它确保了由奖励函数 r ( x , y ) r(x, y) r(x,y)和参考策略 π ref ( y ∣ x ) \pi_{\text{ref}}(y|x) πref(y∣x)转换得到的最优策略 π ∗ ( y ∣ x ) \pi^*(y|x) π∗(y∣x)是一个有效的概率分布。具体来说, Z ( x ) Z(x) Z(x)的表达式为:
Z ( x ) = ∑ y π ref ( y ∣ x ) exp ( 1 β r ( x , y ) ) Z(x) = \sum_{y} \pi_{\text{ref}}(y|x) \exp\left(\frac{1}{\beta} r(x, y)\right) Z(x)=y∑πref(y∣x)exp(β1r(x,y))
其中:
- x x x是给定的输入(如文本、状态等)。
- y y y遍历所有可能的输出(如文本的可能续写、动作的可能选择等)。
- π ref ( y ∣ x ) \pi_{\text{ref}}(y|x) πref(y∣x)是参考策略(如预训练语言模型)在给定输入 x x x时输出 y y y的概率。
- r ( x , y ) r(x, y) r(x,y)是对输入 x x x和输出 y y y的奖励函数,反映了这对输入输出的偏好程度或质量。
- β \beta β是一个正则化参数,控制策略偏离参考策略的程度。
Z ( x ) Z(x) Z(x)的作用
Z ( x ) Z(x) Z(x)的作用主要有两点:
- 归一化:通过除以 Z ( x ) Z(x) Z(x),确保了 π ∗ ( y ∣ x ) \pi^*(y|x) π∗(y∣x)的所有可能输出 y y y的概率之和为1,满足概率分布的基本要求。
- 调整权重:通过与 exp ( 1 β r ( x , y ) ) \exp\left(\frac{1}{\beta} r(x, y)\right) exp(β1r(x,y))的乘积形式,将奖励函数 r ( x , y ) r(x, y) r(x,y)转换为概率的权重,再通过归一化调整这些权重,使得高奖励的输出在新的策略 π ∗ ( y ∣ x ) \pi^*(y|x) π∗(y∣x)中获得更高的概率。
Z ( x ) Z(x) Z(x)的物理意义
在物理学中,配分函数在统计力学中扮演核心角色,用于描述系统在不同状态下的概率分布。在机器学习和特别是强化学习中,配分函数的概念被借鉴来确保策略或概率模型的归一化,并在某种程度上反映了系统状态的“能量”分布。
通过这样的转换和归一化过程,DPO方法能够将奖励函数直接映射到策略优化上,有效地利用人类的偏好数据来指导模型的训练,无需经过复杂的奖励模型学习和强化学习优化步骤。
这一转变的关键
这一步的关键在于将奖励函数 r ( x , y ) r(x, y) r(x,y)与策略 π ∗ ( y ∣ x ) \pi^*(y|x) π∗(y∣x)之间建立直接的关系,从而可以直接对策略进行优化。DPO方法利用偏好数据和一个简单的分类损失函数来优化策略 π ∗ ( y ∣ x ) \pi^*(y|x) π∗(y∣x),而不是通过估计奖励函数和随后的RL过程。
这种转变的优势在于:
- 简化了学习流程:避免了学习一个中间的奖励模型和使用复杂的强化学习算法。
- 效率和稳定性:直接优化策略更高效,避免了RL中的不稳定性和收敛问题。
- 理论上的优雅:提供了从人类偏好直接提取策略的理论依据,使得这一过程更加直接和理论上可解释。
通过这种方法,DPO能够在不牺牲性能的情况下,简化偏好学习的流程,提高学习效率和稳定性。
2.3 直接优化策略
在确定了 π ∗ ( y ∣ x ) \pi^*(y|x) π∗(y∣x)和 r ( x , y ) r(x, y) r(x,y)之间的关系后,可以直接通过最大化偏好数据上的似然来优化策略,而不需要显式地拟合一个奖励函数。具体地,给定人类偏好数据 D = { ( x i , y i , 1 , y i , 2 ) } i D = \{(x_i, y_{i,1}, y_{i,2})\}_i D={(xi,yi,1,yi,2)}i,其中 y i , 1 y_{i,1} yi,1是偏好于 y i , 2 y_{i,2} yi,2的回答,我们可以最大化如下目标:
max π ∑ i log σ ( 1 β log π ( y i , 1 ∣ x i ) π ( y i , 2 ∣ x i ) ) \max_{\pi} \sum_i \log \sigma \left( \frac{1}{\beta} \log \frac{\pi(y_{i,1}|x_i)}{\pi(y_{i,2}|x_i)} \right) πmaxi∑logσ(β1logπ(yi,2∣xi)π(yi,1∣xi))
这里, σ ( ⋅ ) \sigma(\cdot) σ(⋅)是逻辑Sigmoid函数,该目标直接优化策略 π \pi π以便在给定偏好数据上表现更好。
结论
通过这样的推导,DPO方法能够绕过显式的奖励模型学习和复杂的强化学习过程,直接通过简单的分类损失来优化语言模型的策略,使其更好地符合人类的偏好。这种方法不仅简化了偏好学习的流程,还在实验中显示出与现有方法相当或更优的性能。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)