已经接近 3 年没有更新博客了。今天立下一个 flag,开始准备 LLM 面试知识,主要是八股文为主,想到哪写到哪。第一篇没想到写啥,觉得对 PPO 和 DPO 比较了解,就先直接写这个吧。
引言
在大语言模型(LLM)的训练过程中,RLHF(Reinforcement Learning from Human Feedback)是一个重要的技术,它通过人类反馈来优化模型的行为。在RLHF中,PPO(Proximal Policy Optimization)和DPO(Direct Preference Optimization)是两种主流的算法。本文将详细介绍这两种算法的工作原理、数学推导以及它们之间的区别。
PPO(Proximal Policy Optimization)
PPO 基本原理
PPO 是一种基于策略梯度的强化学习算法,它的核心思想是通过限制策略更新的步长来保证训练的稳定性。在RLHF中,PPO被用来优化语言模型,使其生成更符合人类偏好的回答。
PPO 的数学推导
1. 策略梯度定理
首先,我们回顾一下策略梯度定理。对于策略 $\pi_\theta$,目标函数为:
其中 $\tau$ 是轨迹,$R(\tau)$ 是轨迹的奖励。
策略梯度定理是强化学习中的一个核心定理,它告诉我们如何直接优化策略参数 $\theta$ 来最大化期望奖励。这个定理的重要性在于:
- 直接优化策略:不像价值函数方法需要先学习价值函数再推导策略,策略梯度方法直接优化策略参数
- 理论基础:为所有基于策略的强化学习算法提供了数学基础
- 适用性广:适用于连续动作空间和离散动作空间
策略梯度定理告诉我们:
这个公式的含义是:
- 左侧:目标函数 $J(\theta)$ 关于参数 $\theta$ 的梯度
- 右侧:策略对数概率的梯度与奖励的乘积的期望
直观理解:
- 如果某个轨迹 $\tau$ 的奖励 $R(\tau)$ 很高,我们就增加这个轨迹的概率
- 如果某个轨迹 $\tau$ 的奖励 $R(\tau)$ 很低,我们就减少这个轨迹的概率
- $\nabla_\theta \log \pi_\theta(\tau)$ 告诉我们在参数空间中应该朝哪个方向移动
实际应用中的问题:
- 高方差:直接使用这个公式会导致训练不稳定
- 样本效率低:需要大量样本来估计期望
- 更新步长难以控制:可能导致策略更新过大或过小
这就是为什么需要 PPO 等改进算法的原因。
2. PPO 的目标函数
PPO 通过引入一个比率项来限制策略更新的幅度:
比率项的含义:
- $\pi_{\theta_{old}}(a_t|s_t)$ 是旧策略(更新前)在状态 $s_t$ 下选择动作 $a_t$ 的概率
- $\pi_\theta(a_t|s_t)$ 是新策略(更新后)在状态 $s_t$ 下选择动作 $a_t$ 的概率
- 比率 $r_t(\theta)$ 衡量了新策略相对于旧策略的变化程度
为什么需要限制策略更新幅度:
- 防止策略崩溃:如果策略更新过大,可能导致某些动作的概率变为0,失去探索能力
- 保证训练稳定性:过大的更新步长会导致训练不稳定,甚至发散
- 避免灾难性遗忘:防止新策略完全偏离旧策略,丢失之前学到的有用知识
PPO 的目标函数为:
这个公式的核心思想是:
- 如果 $A_t > 0$(好的动作),我们希望增加这个动作的概率,但最多只能增加到 $(1+\epsilon)$ 倍
- 如果 $A_t < 0$(坏的动作),我们希望减少这个动作的概率,但最多只能减少到 $(1-\epsilon)$ 倍
- $\epsilon$ 通常设置为 0.2,意味着策略更新幅度被限制在 ±20% 以内
其中:
- $A_t$ 是优势函数(Advantage function)
- $\epsilon$ 是裁剪参数,通常设置为 0.2
- $\text{clip}(x, a, b)$ 函数将 $x$ 限制在 $[a, b]$ 范围内
3. 优势函数
优势函数衡量了某个动作相对于平均水平的优势:
其中 $Q(s_t, a_t)$ 是动作价值函数,$V(s_t)$ 是状态价值函数。
价值函数的基本概念:
在强化学习中,价值函数用于评估状态或状态-动作对的价值,帮助我们做出更好的决策。
状态价值函数 $V(s_t)$:
- 定义:在状态 $s_t$ 下,遵循策略 $\pi$ 的期望累积奖励
- 数学表达式:
- 含义:表示从状态 $s_t$ 开始,按照策略 $\pi$ 行动,能够获得的期望总奖励
- 特点:只依赖于状态,不依赖于具体动作
动作价值函数 $Q(s_t, a_t)$:
- 定义:在状态 $s_t$ 下采取动作 $a_t$,然后遵循策略 $\pi$ 的期望累积奖励
- 数学表达式:
- 含义:表示在状态 $s_t$ 下采取动作 $a_t$,然后按照策略 $\pi$ 行动,能够获得的期望总奖励
- 特点:依赖于状态和动作的组合
优势函数 $A_t$ 的作用:
- 相对评估:优势函数衡量了某个动作相对于该状态下所有动作平均水平的优势
- 决策指导:
- 如果 $A_t > 0$,说明动作 $a_t$ 比平均水平好,应该增加其概率
- 如果 $A_t < 0$,说明动作 $a_t$ 比平均水平差,应该减少其概率
- 如果 $A_t = 0$,说明动作 $a_t$ 处于平均水平
在PPO中的重要性:
- 减少方差:相比直接使用奖励,优势函数提供了更稳定的学习信号
- 基线作用:状态价值函数作为基线,减少了策略梯度的方差
- 相对比较:通过相对比较而不是绝对奖励,使得训练更加稳定
实际计算中的挑战:
- 真实的价值函数通常是未知的,需要通过神经网络来估计
- 这就是为什么PPO需要Critic模型来估计状态价值函数
- 优势函数通常通过时序差分(TD)方法或其他技术来估计
PPO 在 RLHF 中的应用
在RLHF中,PPO需要四个模型:
- Actor Model:被训练的策略模型
- Critic Model:价值函数模型,用于估计状态价值
- Reward Model:奖励模型,用于计算即时奖励
- Reference Model:参考模型,用于防止策略偏离太远
关于这 4 个模型,可以参考我之前的文章:大模型RLHF训练中的PPO算法细节
四个模型的作用和特点:
Actor Model(策略模型):
- 这是我们要训练的主要模型,最终用于实际应用
- 接收prompt,生成response
- 在训练过程中,其参数会不断更新以优化策略
Critic Model(价值函数模型):
- 用于估计状态价值函数 $V(s_t)$
- 通常用Reward Model初始化,架构与Actor相似
- 在最后一层增加Value Head,输出单一的价值估计
- 需要更新参数,因为价值估计能力需要不断提升
Reward Model(奖励模型):
- 计算即时奖励 $R_t$,评估当前response的好坏
- 参数固定不更新,作为客观的评估标准
- 只关心当前response的质量,不考虑长期影响
Reference Model(参考模型):
- 通常用SFT模型初始化,参数冻结
- 主要作用是防止Actor”训歪”,避免过拟合到高分但无意义的回答
- 通过KL散度约束,确保新策略与参考策略的输出分布相似
为什么需要四个模型:
- Actor:学习生成符合人类偏好的回答
- Critic:评估整体价值,减少训练方差
- Reward:提供客观的即时评估标准
- Reference:防止策略偏离太远,保持语言能力
PPO 的损失函数包括三个部分:
其中:
- $L^{CLIP}$ 是 PPO 的主要损失,通过裁剪机制限制策略更新
- $L^{KL}$ 是 KL 散度损失,用于限制与参考模型的差异
- $L^{VF}$ 是价值函数损失,用于训练Critic模型
- $\alpha$ 和 $\beta$ 是权重参数,平衡不同损失项的重要性
训练流程:
- Actor接收prompt,生成response
- Reward Model计算即时奖励
- Critic Model估计状态价值
- 计算优势函数 $A_t = R_t - V_t$
- 使用PPO损失函数更新Actor和Critic参数
- 通过KL散度约束确保与Reference Model的相似性
DPO(Direct Preference Optimization)
DPO 基本原理
DPO 是一种更直接的方法,它不需要显式的奖励模型,而是直接通过人类偏好数据来优化策略。DPO 的核心思想是将偏好学习问题转化为一个分类问题。
DPO的核心创新:
- 消除奖励模型:不需要单独训练奖励模型,简化了训练流程
- 直接偏好学习:直接从人类偏好数据中学习,避免了奖励建模的误差
- 理论等价性:证明了DPO与基于奖励模型的RLHF在理论上是等价的
DPO 的数学推导
1. 偏好学习问题
给定一个提示 $x$ 和两个回答 $y_w$(获胜)和 $y_l$(失败),我们的目标是学习一个策略 $\pi_\theta$,使得:
偏好数据的含义:
- $y_w \succ y_l$ 表示在提示 $x$ 下,回答 $y_w$ 比 $y_l$ 更受人类偏好
- 这种偏好关系反映了人类的价值判断,是RLHF的核心数据
2. Bradley-Terry 模型
DPO 使用 Bradley-Terry 模型来建模偏好。这个模型假设偏好概率与奖励函数之间存在以下关系:
其中 $r_\theta(x, y)$ 是奖励函数。
Bradley-Terry模型的特点:
- 单调性:奖励越高,被偏好的概率越大
- 对称性:$P(y_w \succ y_l | x) + P(y_l \succ y_w | x) = 1$
- 温度控制:可以通过调整指数函数的温度参数来控制偏好强度
3. 从奖励函数到策略的映射
DPO的关键洞察是:我们可以将奖励函数表示为策略与参考策略的比值:
其中:
- $\pi_{ref}$ 是参考策略(通常是SFT模型)
- $\beta$ 是温度参数,控制奖励的强度
这个映射的物理意义:
- 如果 $\pi_\theta(y|x) > \pi_{ref}(y|x)$,说明新策略更倾向于生成回答 $y$,奖励为正
- 如果 $\pi_\theta(y|x) < \pi_{ref}(y|x)$,说明新策略不太倾向于生成回答 $y$,奖励为负
- $\beta$ 控制奖励的敏感度,值越大,策略差异对奖励的影响越明显
4. DPO 的目标函数
将奖励函数代入Bradley-Terry模型,得到DPO的目标函数:
其中:
- $\sigma$ 是 sigmoid 函数:$\sigma(x) = \frac{1}{1 + e^{-x}}$
- $\beta$ 是温度参数,通常设置为0.1-0.5
- $\pi_{ref}$ 是参考策略(通常是 SFT 模型)
目标函数的直观理解:
- 我们希望最大化偏好数据的对数似然
- 对于偏好对 $(y_w, y_l)$,我们希望 $P(y_w \succ y_l | x)$ 尽可能大
- 这等价于让 $\beta \log \frac{\pi_\theta(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)}$ 尽可能大
- 即让获胜回答相对于参考策略的提升幅度大于失败回答
5. 奖励函数的推导
通过 DPO 的训练,我们可以推导出隐含的奖励函数:
这个公式表明,DPO 实际上是在学习一个相对于参考策略的奖励函数。
奖励函数的性质:
- 相对性:奖励是相对于参考策略定义的,不是绝对奖励
- 可解释性:奖励直接反映了策略相对于参考策略的偏好程度
- 一致性:与人类偏好数据保持一致
DPO 的训练过程
训练步骤:
- 数据准备:收集人类偏好数据 $(x, y_w, y_l)$
- 策略初始化:用SFT模型初始化 $\pi_\theta$ 和 $\pi_{ref}$
- 前向传播:计算 $\pi_\theta(y_w|x)$ 和 $\pi_\theta(y_l|x)$
- 损失计算:使用DPO损失函数计算梯度
- 参数更新:只更新 $\pi_\theta$,保持 $\pi_{ref}$ 固定
关键超参数:
- $\beta$(温度参数):控制策略更新的强度,值越大更新越激进
- 学习率:控制参数更新的步长
- 批次大小:影响训练的稳定性和效率
DPO 的优势和局限性
优势:
- 训练简单:只需要两个模型,训练流程简单
- 数据效率高:直接使用偏好数据,避免了奖励建模的误差
- 理论保证:在理论上与基于奖励的RLHF等价
- 计算效率高:单轮训练,不需要复杂的优势估计
局限性:
- 依赖参考策略:奖励函数是相对于参考策略定义的
- 偏好数据质量:对偏好数据的质量要求较高
- 探索能力有限:可能无法探索到远离参考策略的新策略
- 温度参数敏感:$\beta$ 的选择对性能影响较大
DPO 与 PPO 的理论联系
等价性的核心前提:
DPO与PPO等价的核心前提是:奖励函数必须满足特定的形式。具体来说,奖励函数必须能够表示为:
这个前提条件意味着:
- 奖励函数与策略的耦合:奖励函数不能是任意的,必须与当前策略 $\pi_\theta$ 和参考策略 $\pi_{ref}$ 相关
- 相对性:奖励是相对于参考策略定义的,不是绝对奖励
- 策略依赖性:奖励函数会随着策略的更新而变化
为什么这个前提很重要:
在实际的RLHF中,奖励函数通常是独立训练的,其形式为 $r(x, y) = f_\phi(x, y)$,其中 $f_\phi$ 是一个独立的神经网络。这种形式的奖励函数与DPO假设的形式完全不同。
等价性的假设前提:
DPO与PPO的等价性是在以下关键假设下成立的:
- 奖励函数假设:奖励函数必须满足 $r(x, y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)}$ 的形式
- 优势函数简化:忽略价值函数,直接使用奖励作为优势函数,即 $A_t = r_t$
- 策略约束方式:使用KL散度约束而不是PPO的裁剪约束
- 单步优化:假设每次更新都是单步的,不考虑多步交互
理论背景:
这个等价性来自于奖励函数与策略之间的对偶关系。在强化学习中,存在一个重要的理论结果:对于任何奖励函数 $r(x, y)$,都存在一个最优策略 $\pi^*(y|x)$,使得:
这个关系表明,奖励函数和策略之间存在一一对应的关系。DPO的关键洞察是:如果我们直接学习策略,就可以隐式地学习到对应的奖励函数。
等价性证明的局限性:
需要注意的是,这种等价性有以下局限性:
- 奖励函数形式限制:只有在特定形式的奖励函数下才成立
- 忽略价值函数:实际PPO中价值函数的作用被简化了
- 约束方式不同:PPO的裁剪约束和DPO的KL散度约束在理论上不等价
- 训练稳定性:虽然理论等价,但实际训练中的稳定性可能不同
实际应用中的差异:
尽管在理论上存在等价性,但在实际应用中:
- PPO:通过显式奖励模型提供更直接的监督信号
- DPO:通过偏好数据提供相对比较信号
- 训练稳定性:PPO的裁剪机制可能提供更好的训练稳定性
- 探索能力:PPO可能具有更好的探索能力
等价性证明:
DPO可以看作是PPO在特定条件下的简化版本。当PPO中的:
- 奖励模型 $r(x, y) = \beta \log \frac{\pi_\theta(y|x)}{\pi_{ref}(y|x)}$
- 优势函数 $A_t = r_t$(忽略价值函数)
- 策略约束通过KL散度实现
此时,PPO的损失函数就退化为DPO的形式。
主要区别:
- 奖励建模:PPO需要显式奖励模型,DPO隐含在策略中
- 优势估计:PPO需要复杂的优势估计,DPO直接使用奖励
- 约束方式:PPO使用裁剪约束,DPO使用KL散度约束
PPO 和 DPO 的区别
1. 训练复杂度
- PPO:需要四个模型(Actor、Critic、Reward、Reference),训练过程复杂
- DPO:只需要两个模型(策略模型和参考模型),训练过程简单
2. 数据需求
- PPO:需要显式的奖励信号或奖励模型
- DPO:只需要偏好数据(哪个更好),不需要显式奖励
3. 计算效率
- PPO:需要多轮交互和复杂的优势估计
- DPO:单轮训练,计算效率更高
4. 稳定性
- PPO:通过裁剪机制保证训练稳定性
- DPO:通过 KL 散度约束保证稳定性
5. 适用场景
- PPO:适用于有明确奖励信号或可以训练奖励模型的场景
- DPO:适用于只有人类偏好数据的场景
总结
PPO 和 DPO 都是 RLHF 中的重要算法,它们各有优缺点:
- PPO 更加成熟和稳定,但训练复杂度高
- DPO 更加简单和高效,但可能在某些场景下效果不如 PPO
选择哪种算法主要取决于具体的应用场景和可用的数据。在实际应用中,可以根据需求选择合适的算法,或者将两种算法结合使用。
参考文献
- Schulman, J., et al. “Proximal policy optimization algorithms.” arXiv preprint arXiv:1707.06347 (2017).
- Rafailov, R., et al. “Direct preference optimization: Your language model is secretly a reward model.” arXiv preprint arXiv:2305.18290 (2023).