RLHF:从策略梯度到 PPO、GAE 和 DPO
一、在线强化学习与离线强化学习
两类LLMs 中的主流 RLHF 方法:
- 在线方法(以 PPO 为例)
- 离线方法(以 DPO 为例)
但究竟是什么将在线策略(On-Policy)与离线策略(Off-Policy)区分开来呢?这里有一个简单的经验法则:
- 在线策略(On-Policy):在训练过程中,模型主动生成自己的数据样本。
- 离线策略(Off-Policy):训练依赖于预先收集的数据(或由其他策略产生的数据),无需实时生成。
一般来说,在线策略方法往往计算需求更高、耗时更长——主要瓶颈在于生成步骤。对于生成任务,模型必须逐个输出token,这一过程极其耗费资源。尽管速度较慢,但在线策略方法提供了更高的理论性能上限,因为它们能根据模型的当前状态持续探索和更新。
1.1 On-Policy 学习的本质
从本质上讲,On-Policy 学习涉及让模型生成自己的响应,然后对这些响应进行评分以指导后续的参数更新。简而言之,关键思想是让模型自己“参与游戏”。
想象一下,你是一个正在学习下棋的模型。存在两种可能的训练场景:
- 方法一:你主动下棋,教练对每一步提供实时反馈。当你吃掉对手的棋子时,教练为你加油;如果你因冲动犯错导致反攻,教练会立即指导你如何改进。
- 方法二:你不用下棋,而是被提供一系列录像——有些是专业比赛,有些是水平不高的比赛——标注了哪些走法有效,哪些无效。你通过模仿好的走法、避免坏的走法来被动学习。
这两种方法的基本区别在于你是否真正“在玩”这个游戏。方法一代表在线策略训练,模型生成自己的动作并从中学习;方法二体现离线策略训练,学习完全基于现有数据。
离线策略方法在训练过程中通常更快,因为它们依赖于现成的数据,无需模型实时生成新样本。然而,它们对预先收集的数据与模型当前能力的一致性非常敏感。如果存在显著的不匹配——无论是数据过于困难还是过于简单——学习过程都可能受到影响。另一方面,在线策略训练规避了这个问题,因为训练样本始终反映模型的当前性能水平。
1.2 在线策略框架中的关键组件
在语言模型的情况下,典型的在线策略算法包含以下组件:
- Actor:生成句子的模型(类似于你下棋)。
- Critic:像教练一样,它为每个生成的输出提供即时反馈,并随着模型能力的提升与行动者一同更新。
- Reward Model:作为裁判,它分配最终分数或偏好评估。这个组件在训练过程中通常保持固定。
- Reference Model:PPO 在大模型中的一个独特元素,它防止行动者偏离原始预训练分布太远,从而减轻诸如奖励攻击等问题。
鉴于这些组件中的每一个都可能非常庞大(通常需要同时加载多个 70B 参数模型),策略内训练通常需要巨大的计算资源。这就是为什么 PPO 经常被描述为“计算成本高昂”。
二、近端策略优化PPO (Proximal Policy Optimization)
2.1 从策略梯度优化开始
想象你是一位刚开始学习下棋的新手棋手。你的目标是通过不断优化你的棋局策略(用
更一般地,强化学习的目标是通过优化策略来最大化预期回报:
形式上,策略的回报被定义在所有可能的轨迹上:
轨迹简单地是一系列状态及其对应动作:
在我们的象棋类比中,状态
因此,轨迹
在强化学习中,我们通常对未来的回报进行折扣——未来的回报永远不如即时回报有价值。因此,轨迹的总回报定义为:
其中
在深度学习中,我们通常通过使用随机梯度下降来最小化损失函数来更新参数。然而,由于我们的目标在这里是最大化回报,我们使用随机梯度上升来更新策略:
这里,
然而,就像在象棋中你必须考虑所有可能的走法和棋盘状态一样,计算精确梯度需要对所有可能的轨迹进行求和或积分。在实践中(除非游戏极其简单),这是计算上不可行的——即使
2.1.1 策略梯度推导
为了推导出实用的策略梯度表达式——就像逐步回顾一局游戏一样——我们从目标函数的梯度开始。将每局游戏视为一个轨迹
第一步:扩展期望
这一步相当于通过将期望扩展为对所有轨迹的积分来考虑所有可能的游戏:
第二步:交换梯度和积分
类似于分解每一步的影响,我们将梯度算子带到积分内部:
第三步:应用对数导数技巧
通过使用一种称为对数导数(或似然比)技巧的数学技巧——就像分解每一步的重要性一样——我们得到了:
第四步:返回期望形式
最后,我们可以将积分重新写为期望形式:
分解
在游戏中,每一步都由你当时的决策决定。如果我们用一个游戏轨迹
那么
注:对手的动作
2.2 最终策略梯度公式
将上述结果代入我们的期望中,我们得到最终的策略梯度公式:
在这个公式中,每一步做出的决策(由
仔细观察你会发现,
2.3 REINFORCE 算法:流程和实现步骤
现在让我们介绍经典的策略梯度方法——REINFORCE 算法,它类似于玩游戏、回顾你的表现并不断优化你的策略:
- 构建策略网络
构建一个神经网络来定义你的棋局策略
- 输入:当前棋盘状态
- 输出:关于下一步的概率分布
- 轨迹采样
使用当前策略玩游戏来采样轨迹
- 你可以设置每局游戏的固定步数(比如,100 步),或者玩到游戏结束。
- 梯度计算
从收集的数据集
- 参数更新
使用随机梯度上升更新你的策略参数——就像你根据游戏评论调整你的玩法一样:
或者等价地:
- 迭代优化
重复“玩——回顾——调整”的循环,直到你的策略收敛,并且能够持续表现出高水平。
2.3.1 核心公式解释
梯度估计公式
- 这里我们使用大量的蒙特卡洛采样来近似完整期望。
- 总奖励
代表整个游戏的结局,作为衡量你决策累积影响的指标。
参数更新规则
2.3.2 算法特性
- 主要优势:该方法完全依赖于您实际的游戏体验,无需任何关于对手策略的先验知识(无模型)。
- 计算需求:它需要大量的游戏样本来降低梯度估计中固有的高方差。
- 可能的改进:后来的方法(如 Actor-Critic 方法)引入了一个价值函数基线来稳定策略更新——类似于在游戏评审过程中获得专业教练反馈,以加速改进。
2.4 策略梯度优化的挑战
策略梯度优化的一个核心假设是我们能够使用所选方法可靠地估计策略梯度。然而,当问题规模扩大时——例如,当每个轨迹
其中:
表示数据集的大小 , 是当前策略(你的棋局策略), 是游戏的总体收益(轨迹 ), 分别表示时间 的动作和状态。
想象你在下棋,试图将整场比赛的结果归因于每一步棋。如果你试图将每一步棋都归功于整场比赛的结果,那么评估就会变得非常不稳定——也就是说,它表现出很高的方差。接下来,我们将探讨减少我们估计中这种方差的方法。
2.5 降低方差:仅关注未来
注意到上述梯度估计中,无论当前步骤
回到我们的棋类例子:如果每一步的得分也考虑了之前的步骤(无论好坏),就会掩盖当前决策的真实价值。在实践中,在评估当前步骤时,你只需要考虑“未来回报”——从这一步到游戏结束所累积的回报。这个概念被称为回报到未来。
从数学上讲,我们这样调整我们的梯度估计:
这里,
通过消除这些冗余的过去奖励,我们的梯度估计的方差自然会减小。
2.6 降低方差:引入基线
为了进一步减少我们的评估波动,我们可以在每一步从未来奖励中减去一个基线值。从数学上讲,这个基线通常表示为
这里,
在使大型语言模型对齐的背景下,通常会在语言模型(即策略
2.7 降低方差:引入 和
我们之前讨论了回报的累积概念,用
用我们的棋类比喻来说,
最终,我们可以将策略梯度表示为:
这个公式概括了每个移动的相对表现(与平均表现相比)如何指导策略的调整。
2.8 解释优势函数
简单来说,优势函数
总之,通过仅关注未来奖励、引入基线以及利用优势函数,我们可以有效降低梯度估计的方差。这种方法类似于通过关注真正改变结果的关键步骤来回顾一场游戏,从而使策略更新更加稳定和精准。
2.9 估计优势项——使用迭代 GAE 策略
估计优势项有多种方法。例如:
这些例子说明,通过跨越多步求和,我们可以平衡偏差和方差:
- 过早停止累积实际奖励会导致高偏差,因为只考虑了很小一部分真实回报和极少的实际奖励。
- 积累过多奖励会导致高方差,因为依赖更多真实样本会使估计不稳定。
为了在这项偏差-方差权衡中取得平衡,我们采用这些项的加权总和,称为广义优势估计Generalized Advantage Estimation (GAE):
- 这是一个递归公式。最终时间步的优势估计可以看作是第一个展开式,每个前序步骤都添加一个由衰减因子
加权的层级。 - 通过迭代累积这些项随时间步的变化,我们平衡了实际奖励的高方差与完全依赖值函数引入的高偏差。
在大型语言模型对齐的背景下,这种方法指导策略(即语言模型)增加选择下一个token的概率,该token在特定提示(状态)下,平均产生的奖励高于基线。换句话说,模型倾向于选择更有可能产生符合我们期望奖励标准的序列的token——从而生成与我们的训练数据分布更一致的输出。
2.10 PPO 损失
在近端策略优化(PPO)中,为了防止策略在更新过程中发生剧烈变化,我们设计了一个由几个关键部分组成的专用损失函数:
策略损失(Policy Loss)
这个组件类似于下棋时不会一次性彻底改变策略。相反,你倾向于逐渐微调你的步骤,这样在改善你位置的同时,避免采取鲁莽的步骤来破坏整体结构。
价值函数损失(Value Function Loss)
这个术语确保对于每个状态,你估计的预期回报(类似于预测游戏可能如何展开)尽可能接近实际获得的回报。
熵损失(Entropy Loss)
熵损失鼓励策略保持一定程度的探索。就像一位熟练的国际象棋玩家,不仅掌握已知模式,还愿意尝试新想法以保持适应性一样,这个项防止策略变得过于确定性。
总体 PPO 损失(Overall PPO Loss)
通过结合这些组件,我们得到总的 PPO 损失。这个损失函数旨在更新策略时提高胜率(或奖励),同时确保策略不会与其原始行为偏离过大——从而促进稳定和高效的学习。
2.11 使用 PPO 的优势
- 稳定性:截断操作确保策略更新适度——正如你不会在游戏中大幅改变打法,每一步都保持一致和谨慎。
- 样本效率:PPO 有效利用收集到的游戏数据,但在大规模模型中,仍需大量样本。
- 内在安全性:通过截断更新和相对于参考策略的 KL 惩罚,PPO 有效防止训练过程中的大幅偏离,确保生成输出与预训练风格保持一致。
总体而言,正如经验丰富的棋手通过下棋、复盘和微调策略不断进步,PPO 通过精确的梯度更新与策略变化的限制,实现了稳健高效的强化学习。
三、理解和推导 GAE(Generalized Advantage Estimation)
想象一下参加一场高风险的国际象棋锦标赛。每一步不仅影响当前的棋盘状态,还可能对整场比赛产生深远的影响。为了确定某一步棋提供了多少优势,你必须同时考虑即时得分及其对未来位置的可能影响。广义优势估计(GAE)正是为解决这一问题而设计的——它有助于评估在给定状态下某个动作比平均水平好多少,就像回顾一场比赛,看看某一步是否显著增加了你获胜的机会。
GAE 创新性地结合了多步估计和时序差分(TD)学习的思想。通过使用一系列过去的误差来预测未来的回报,它在偏差和方差之间取得了最佳平衡。当与 PPO 结合使用时,就像一位不仅拥有稳健战略框架(PPO)的棋手,还利用精确的位置评估(GAE)来不断优化每一步,从而实现更稳定和有效的整体表现。
3.1 引入残差的概念
下棋时,你很少能立即判断一个走法的全部价值;相反,你会根据你对后续走法的预测来估计其影响。这种预测与实际结果之间的差异被称为时序差(TD)残差。
3.1.1 为什么需要残差?
想象一下,你在游戏中处于一个关键节点。根据经验,你认为向左移动可能更有利,但在做出移动后,结果并不像预期的那样有利。你最初的预测与实际结果之间的差异就是残差——它帮助你修正未来的估计,以便在以后做出更好的决策。
3.1.2 残差的数学表达式
对于策略梯度方法,价值函数的梯度可以表示为:
其中,
那么,为了更准确地反映当前行动对未来结果的全局影响,我们引入了 TD
残差。具体来说,对于在状态
就像是你采取行动后立即获得的分数。 和 是你对当前和下一个棋盘位置的预测值——类似于教练的评估。 是折扣因子,表示未来奖励逐渐被弱化。
3.1.3 残差的直观解释
假设你正在下棋,当前棋盘状态是
- 你对当前状态价值的估计,
,代表如果你继续按照当前策略进行游戏时的预期回报。 - 你对下一个状态的估计,
,反映了从那个点开始的预期回报。
理想情况下,你应该有:
也就是说,当前状态的价值应该等于即时奖励加上折现的未来价值。然而现实中,
为了获得更准确的评估——就像你不仅会审视当前一步,还会审视接下来的几步一样——我们将
当
根据残差的定义,这扩展为:
这类似于考虑从当前步到游戏结束的所有得分。显然,包含的步数越多(
3.2 偏差-方差权衡
在实践中,我们并非在固定步数
首先,我们定义 TD 残差为:
然后,我们使用递归公式累积优势:
这里,
- 当
,你考虑整个游戏的全部影响(最小偏差但最大方差)。 - 当
,你完全依赖即时信息(最大偏差但最小方差)。
或者,我们可以将多步优势表示为加权求和。定义:
扩展来说,我们有:
假设我们只对前
当
两边同时乘以
如果我们定义
这种公式清晰地展示了如何通过调整
当
当
总之,
- 一个更大的
意味着考虑了更多未来的观察结果,从而减少了偏差但增加了方差。 - 一个较小的
更依赖于当前估计,导致偏差较高但方差较低。
这种方法类似于一个棋手,他不仅考虑了走棋的即时效果,还审慎地权衡了后续走棋的潜在影响,从而做出了最优决策。
四、使用 PPO 训练 LLMs 的 Token-per-Token 过程
以下是使用 PPO 训练 LLM 时逐个 token 的解释。本节阐明了参数(
4.1 使用 PPO 对 LLM 进行对齐
- 旧策略参数
:这些是用于生成数据(例如,token序列)的模型参数。在每次 PPO 更新之前,你使用这些参数采样token,并记录生成每个token的概率(通常存储为对数概率)。 - 当前策略参数
:这些是在训练过程中被更新的参数。通过 PPO 算法,你根据采样数据调整这些参数,使得生成的 token 更好地与奖励信号对齐。更新后, 将与 不同。
你可以将
4.2 “Token-per-Token” 训练过程
假设你已经有一个参数设置为
- 采样阶段
- 提供Prompt
您将提示输入到 LLM(使用
- 逐一生成Tokens
模型根据当前上下文(状态)生成下一个token(动作)。例如,在生成第
- 当前状态
由提示以及前面的 token组成。 - 模型选择token
作为其动作,并为其分配概率 (通常记录为对数概率)。
- 录制数据
对于每个token,您记录:
- 状态
(上下文) - 动作
(生成的token) - 在旧策略下的生成概率(或对数概率)
- 可选地,任何奖励信息(例如来自奖励模型的分数)和估计的值
。 - 这个集合形成了一个轨迹——一系列token及其相关数据。
- 计算优势函数
在 PPO 中,需要为每个token计算一个优势函数
- 例如,对于第
个 token,你可能需要计算:
其中
- 在实际操作中,由于轨迹是有限的,求和计算仅进行到序列的末尾。
- 更新阶段:从
到
一旦你采样了一批token数据,就使用 PPO 来更新模型参数。逐个token的更新过程如下:
- 以旧策略为参考
您已记录每个token的日志概率,如
- 使用当前策略重新计算概率
使用当前模型参数
- 计算概率比
对于每个token,计算比率:
该比率表示新模型生成该token的可能性相对于旧模型的变化程度。
- 构建 PPO 损失(Per-Token Loss)
PPO
的目标是限制新策略与旧策略的偏差程度。对于每个token,基于优势
直白地说:
- 如果概率比
和优势 的乘积在可接受范围内(即,在 和 之间,则使用该值。
- 如果概率比
- 否则,如果比率过高或过低,则使用剪裁值来防止过大的更新。
- 对所有token进行平均并更新
所有token的损失
- 此时,
开始偏离 ,这意味着新模型比旧模型有所”改进”。
- 此时,
- 更新
完成一次完整的 PPO 更新(通常在相同的一批数据上持续多个
epoch)后,你将
4.3 伪代码
以下是伪代码风格的算法,概述了按 token 逐个的 PPO 更新过程:
1 | |
这段伪代码总结了训练 LLM 时逐个 token 的 PPO 更新过程,说明了旧策略参数和新策略参数如何被使用和迭代更新。
五、 DPO:通过研究棋谱学习下棋
之前,我们讨论了 PPO 类似于在棋盘上有教练——在您下棋时实时指导您并调整策略(即在线学习)。相比之下,DPO 更像是坐在家里研究棋谱(即使用离线数据),您根据现有的胜负比较推断如何改进您的走法。在本节中,我们将推导 DPO(直接偏好优化)背后的数学原理,并解释其与 PPO(或更一般地说,其他 RLHF 方法)相比的优势和局限性。
在开始之前,请记住这三个关键目标函数:
代表奖励模型。 是我们希望训练的对齐模型(策略)。 是参考模型(PPO 和 DPO 都依赖它来防止策略偏离太远)。
这三个目标定义如下:
- Reward Model Loss:
- PPO Loss:
- DPO Loss:
这里,KL 散度定义为:
本质上,PPO 通过 KL 惩罚根据实时反馈调整策略,将新策略与参考策略相连接,而 DPO 则利用预先收集的比较数据(“棋局记录”)直接根据偏好比较来优化策略。这种方法有其自身的优势和挑战,我们将在接下来的章节中探讨。
5.1 直接从优化目标求解最优对齐模型
让我们从 PPO 损失函数开始,进行一系列数学变换。这类似于一位国际象棋教练(奖励模型)在应用 KL 散度惩罚以防止策略偏离参考模型的同时提供实时反馈。
- 替换 KL 散度公式:
- 提取常数
并应用恒等变换:
- Continue the Transformation:
- Obtain:
此时,我们构建了一个新的分布
其中
在这个表达式中,分子代表给定输入对
尽管我们不知道
- 继续进行 PPO 损失的等价转换:
- 简化:
- 忽略
项(因为它独立于 ),得到:
- 以 KL 散度的形式表达:
此时,我们的目标简化为仅关注 KL 散度。由于 KL
散度总是非负的,并且只有在两个分布相同时才等于零,因此最优条件是在
换句话说,如果奖励模型的参数
然而在实践中,用于对齐训练的奖励函数
5.1.1 Summary
- 首先,我们定义了一个用于与人类偏好对齐的总体优化目标。该目标函数假设我们有一个奖励函数,并寻求找到一个最大化该目标的对齐模型。这可以理解为,在一场象棋比赛中,根据教练(奖励函数)的评估,努力采用一种策略(一种玩法),以最大化你的胜率。从数学上讲,该目标可以表示为:
- 接下来,从这一优化目标出发,我们推导出当奖励函数
固定时,对齐模型 的显式解。类似于从历史记录中寻找棋局的最佳走法,这一显式解由下式给出:
其中归一化配分函数
- 最后,在实际训练中,我们通常不会单独训练奖励模型。相反,我们在最优奖励模型
的指导下直接训练对齐模型。换句话说,就像持续练习和教练反馈最终能赢得比赛一样,我们稍微调整上述公式,得到:
这三个步骤展示了整个流程——从定义整体对齐目标,到推导最优策略,最终将奖励模型与对齐模型联系起来。整个程序类似于首先确立赢得游戏的评判标准(优化目标),然后从历史记录中推导出最佳行动(显式策略解决方案),最终通过持续的练习和反馈(奖励模型训练),达到既能正确评估又能有效执行的策略。
5.2 跳过奖励模型的训练
尽管我们已经正式推导出
在实践中,这种显式解难以直接应用,因为:
估计
是具有挑战性的:它需要要么穷举列举要么充分采样给定提示 的所有可能响应 来计算和累积 ,这极其昂贵。我们最初的目标是绕过奖励模型的训练:我们打算一步到位地学习一个对齐的模型,而不是先训练一个奖励函数。然而,
仍然依赖于奖励函数 ,这距离我们理想的直接“学会下好棋”的目标还有一步之遥,没有中间的评分阶段。
这使我们思考其逆问题:如果我们有最优对齐模型
我们可以等价地将其转换为:
这个表达式使我们能够用
5.2.1 本节总结
由于我们可以用最优对齐模型
接下来的挑战则转变为训练奖励模型本身。通常,我们采用偏好排序方法进行数据标注,类似于标注棋局记录来表明哪些走法更优。一般来说,主要有两种方法:
- 仅生成两个响应
对于给定的提示<prompt x, chosen y1, reject y2>人类标注指出哪个走法更好,我们的目标是让奖励模型给选中的走法分配更高的分数,同时给未被选中的走法分配较低的分数。
- 生成 K 个响应(K > 2)
对于相同的提示<prompt x, y1, ..., yK>
。假设人工标注者提供了一个偏好排序y2 > y3 > y1 > ... > yK
)。我们的目标是让奖励模型给真实排序
在一些训练框架(例如 ChatGPT
的实现)中,当生成的响应超过两个时,系统会将它们分解为两两比较,以便目标保持与两响应情况一致。然而,在更一般的情况下,整个偏好排序集被视为一个整体,期望真实排序
5.2.2 BT 模型:仅生成两个响应
想象一下,在玩棋类游戏时,你的教练只向你展示两个候选动作——一个标记为“好”(被选择),另一个标记为“坏”(被拒绝)。在这种情况下,你的目标是让“评分系统”(奖励模型)将好动作评估为明显优于坏动作。为了模拟这种情况,我们可以采用经典的
Bradley-Terry(BT)模型,该模型最初于 1952
年提出,用于分析成对比较,并在体育、市场研究和其他领域得到广泛应用。对于一对项目
其中
我们的目标是最大化
上述最终表达式正是 ChatGPT 等系统所使用的奖励模型优化目标。直观上,这一目标鼓励奖励模型输出分数,使得所选的回复明显优于被拒绝的回复。
假设我们已经找到了形式为
的优化奖励模型,将这个最优奖励函数代入我们之前的目標,得到:
这一结果表明,奖励模型的训练目标已经转变为完全依赖于对齐模型
5.2.3 PT 模型:生成 K(K > 2)个响应
现在想象一下,在一局象棋比赛中,你不仅考虑两个候选走法,而是同时评估多个可能的走法。例如,在关键时刻,你的教练可能会给你 K 个不同的走法,并要求你根据它们的潜在结果进行排序。这个场景对应于 RLHF 设置,其中生成 K 个响应并根据偏好进行排序。
与 BT
模型不同,该模型仅在生成两个响应时关注成对比较,这里我们采用基于
Plackett-Luce 模型的统计方法,可以对多个候选进行排序。用
这里,
接下来,我们将最优奖励函数
那么概率就变成
然后我们将
最后,对于整个数据集,我们希望真实排名
5.3 DPO 的局限性
在推导出 DPO 的数学基础后,我们现在转向其局限性。就像在象棋中,仅仅研究棋局记录而不下棋并不能保证你下棋会得好,DPO 旨在训练模型使用奖励模型来评估响应,而不是直接复制 PPO。这意味着在训练过程中,数据和损失函数与奖励模型完全一致。
这提出了一个关键问题:模型是否有能力同时提升其”评估”和”生成”能力?换句话说,DPO 的训练过程仅专注于教导模型如何”评分”回复,类似于从游戏记录中学习如何评估走法。然而,这并不一定确保模型在实际生成过程中会做出最优决策——它也无法证明评估能力会无缝转化为有效的生成性能。如果这一假设失败,那么 DPO 的训练过程就失去了其意义。正如仅仅通过阅读棋谱并不能成为棋手一样,这一假设的有效性也直接影响着 SPIN 和自我奖励等其他方法背后的合理性。
此外,由于 DPO 优化目标完全依赖于奖励模型的评分,它只关心相对于参考模型的分数变化是否符合预期,而不关心生成的句子是否流畅或吸引人。换句话说,DPO 更侧重于扩大损失间隔,而不是确保模型生成高质量的输出。这可能导致 DPO 训练过程中出现一种尴尬的现象:好与坏的回应的损失可能会同时增加,迫使我们调整超参数或添加额外的约束来稳定训练。
从另一个角度来看,DPO 的局限性可以总结如下:
- 评估与生成之间的脱节
DPO 的训练过程仅教会模型“评估”——像静态的棋局评分系统一样——而没有结合实际对弈所需的在线生成过程。相比之下,PPO 通过在线生成和试错学习,将评估能力转化为生成能力。没有这种在线探索,使用 DPO 训练的模型可能在离线数据上得分很高,但在实际生成时表现不佳。
- 离线训练的局限性
RLHF 本质上是一种在线学习方法,因为它需要持续修正模型现有的知识——就像棋手必须定期练习来磨练技能一样。然而,DPO 完全是离线的;它迫使模型仅依赖于标注者认为“正确”的内容(例如,游戏记录中的最佳走法),并遵循预定的最优路径,几乎没有探索的空间。在实践中,通常使用在首选响应上进行初始监督微调(SFT)或用多样化的输出增强偏好数据等技术,来引入一些在线学习和探索的元素。
- 高数据质量要求
由于 DPO 训练完全依赖于离线偏好数据,其效果高度敏感于这些数据的质量和覆盖范围。如果训练数据不全面或不匹配实际生成分布,模型可能会生成具有正确正负样本相对比例的响应,但绝对概率可能会被稀释,甚至可能出现训练数据中不存在的奇怪输出。例如,在问答场景中,如果正样本是“意大利面应该与番茄肉酱混合”,负样本是“意大利面应该与辣椒油混合”,经过 DPO 优化后的模型可能会输出“意大利面应该与 42 级混凝土混合”。这种偏差突显了数据质量的关键重要性。
总之,DPO 的局限性在于它仅专注于将奖励模型的“评分”能力迁移到对齐模型上,而没有包含实际的在线生成和探索。这类似于仅通过研究棋局记录来学习棋步,而不实际下棋;因此,即使理论上能够准确评估每一步,也不保证在实际对弈中做出最佳决策。因此,尽管 DPO 可以一步直接训练对齐模型,但如果缺乏在线生成和探索的补充,其性能往往与完整的 RLHF 系统(即奖励模型+PPO)相比有所不足。