大模型强化学习后训练详解:PPO、DPO、GRPO 与更多算法

3 阅读

大模型强化学习后训练的核心目标

大语言模型(LLM)在完成监督微调(SFT)后,通常还需通过强化学习(RL)进一步对齐人类偏好。这一阶段的目标很直接:让模型生成的回答获得更高的奖励分数。这里的“奖励”通常由一个独立训练的奖励模型(Reward Model)给出,该模型能判断一段回答是否符合人类价值观、是否准确有用等。

在强化学习框架下,模型本身被视为一个“策略”(Policy),它根据当前上下文(即用户输入和已生成的 token)决定下一个 token 的概率分布。整个对话过程构成一条“轨迹”(Trajectory),奖励模型会对整条轨迹打分。训练的目标就是调整策略参数,使得高分轨迹的出现概率更高。

然而,直接优化这个目标面临巨大挑战。文本生成是离散的、不可微的过程,无法像普通神经网络那样直接计算梯度。为此,研究者们发展出一系列巧妙的算法来解决这个问题。

PPO:稳定可靠的经典之选

近端策略优化(Proximal Policy Optimization, PPO)是目前最广泛使用的 RL 算法之一。它通过三个关键改进解决了早期方法(如 REINFORCE)的不稳定性问题。

优势函数与基线估计

REINFORCE 算法的问题在于,它用整个回答的总分去更新每一个 token 的生成概率。这意味着,即使一个回答大部分内容都很出色,只要结尾处有一点小错误导致总分很低,所有 token 都会被惩罚,这显然不合理。

PPO 引入了“优势函数”(Advantage Function)的概念。优势函数衡量的是,在某个状态下采取某个动作(生成某个 token),比“平均水平”好多少。这里的“平均水平”由一个名为“评论家”(Critic)的辅助网络来预测,它估计从当前状态出发,未来还能获得多少预期奖励。

优势 = 实际获得的未来奖励 - 评论家预测的平均奖励

通过这种方式,PPO 能够更精准地判断哪些 token 的生成真正带来了价值,从而进行更有针对性的更新。

更新限制:CLIP 与 KL 惩罚

另一个关键问题是,如果每次更新步长太大,模型可能会“学过头”,性能突然崩溃。PPO 通过两种方式限制更新幅度:

  1. PPO-CLIP:这是最常用的方法。它计算新旧策略下某个动作的概率比值。如果这个比值超出预设范围(例如 0.8 到 1.2),就将其裁剪到边界上。这样可以防止策略发生剧烈变化。
  2. PPO-KLPEN:这种方法在损失函数中显式地加入一个 KL 散度惩罚项,直接限制新旧策略之间的差异。KL 散度在这里衡量的是两个概率分布的不相似程度。

GRPO:为大模型减负

标准 PPO 需要同时加载四个大型模型:正在训练的策略模型、冻结的参考模型、评论家模型和奖励模型。这对 GPU 显存是巨大的考验。

GRPO(Group Relative Policy Optimization)提出了一种更轻量的替代方案。它完全舍弃了评论家网络,转而采用一种“组内比较”的思路。对于同一个提示,GRPO 让当前模型生成一组(例如 64 个)不同的回答,然后用这组回答的平均分作为基线。每个回答的优势值就是它自己的分数减去这个组平均分,再除以组内标准差进行归一化。

这种方法省去了评论家模型,大大降低了内存开销,同时通过组内归一化也获得了稳定的训练信号。

KL 散度:两种用途,别再混淆

在 LLM 的 RL 训练中,KL 散度经常出现,但它的作用有两种,极易被混淆。

信任区域 KL(Trust Region KL)

这种 KL 惩罚用于稳定训练过程。它限制的是当前策略与上一步策略之间的差异。其目的是确保每次更新都是小幅的、可控的,防止策略在单次更新中发生灾难性偏移。这通常对应于 PPO-KLPEN 中的 KL 项。

漂移 KL(Drift KL)

这种 KL 惩罚更为关键,用于防止奖励模型被“欺骗”。它限制的是当前策略与初始的 SFT 参考模型之间的差异。

奖励模型并非完美无缺。如果不对策略做任何约束,模型可能会学会生成一些看似能得高分、实则毫无意义的“乱码”或“关键词堆砌”来欺骗奖励模型。漂移 KL 惩罚通过要求当前模型的输出分布不能偏离原始参考模型太远,从而强制模型保持语言的自然性和连贯性。

值得注意的是,漂移 KL 通常是反向 KL(Reverse KL)。这意味着它对模型生成参考模型认为“不可能”的内容施加极高的惩罚,但对模型“忘记”参考模型中的一些不良模式(如网络上的有毒言论)则持宽容态度。

KL 估计的陷阱

在实际代码中,KL 散度并非直接计算,而是通过采样进行估计。最近的研究发现,不同的估计方法以及将 KL 项放在损失函数还是奖励函数中,会导致截然不同的训练效果。

最佳实践是使用蒙特卡洛(MC)估计器(K1),并将其从奖励中减去(而非放入损失函数求导)。其他常见的估计方法(如 K3)如果处理不当,可能会引入有偏的梯度,导致训练不稳定甚至崩溃。

无需奖励模型的偏好优化

PPO 及其变体都需要一个独立的奖励模型,这增加了训练流程的复杂性。于是,一系列“无需奖励模型”的算法应运而生,它们直接从人类偏好数据中学习。

DPO:从偏好数据中反推奖励

直接偏好优化(Direct Preference Optimization, DPO)是这类方法的代表。它的核心思想非常巧妙:既然我们知道最优策略应该是什么样子(即更倾向于选择人类偏好的回答),那么我们就可以反过来推导出隐含的奖励函数,并直接优化策略去逼近这个最优策略。

DPO 的损失函数直接比较了模型对“优胜回答”和“落败回答”的相对偏好程度,并鼓励模型拉大这个差距。它不需要显式地训练和调用奖励模型,因此更加简单高效。不过,DPO 对训练数据的质量和分布较为敏感,容易在噪声数据上过拟合。

IPO:给偏好差距设个上限

DPO 的 sigmoid 损失会无限地拉大优胜和落败回答之间的差距。但在现实中,落败的回答可能只是稍差一点,并非完全不可接受。身份偏好优化(Identity Preference Optimization, IPO)对此进行了改进。

IPO 使用均方误差(MSE)作为损失函数,并设定了一个目标差距(margin)。一旦模型达到这个差距,损失就会变为零,停止更新。这相当于一种正则化,可以防止模型对数据中的噪声过度反应。

KTO:处理非成对数据

DPO 和 IPO 都需要成对的偏好数据(即同一个问题下的两个回答,并标明哪个更好)。但在很多实际场景中,我们只有单独标记为“好”或“坏”的回答,没有成对比较。

卡尼曼-特沃斯基优化(Kahneman-Tversky Optimization, KTO)解决了这个问题。它受到前景理论的启发,该理论认为人们对损失的厌恶感强于对同等收益的喜悦感。KTO 分别定义了“可取回答”和“不可取回答”的价值函数,并独立地最大化前者、最小化后者,从而摆脱了对成对数据的依赖。

SimPO:连参考模型都不要了

即使是 DPO,也需要加载一个冻结的参考模型来计算 KL 比值,这依然占用了大量显存。简单偏好优化(Simple Preference Optimization, SimPO)走得更远,它认为参考模型也不是必需的。

SimPO 直接使用模型自身对优胜和落败回答的长度归一化对数概率之差作为优化目标,并设定一个目标间隔 γ。这种方法彻底摆脱了对参考模型的依赖,进一步降低了内存开销,使训练过程更加轻便快捷。

总结与展望

从需要多个大模型协同工作的 PPO,到只需偏好数据的 DPO,再到连参考模型都省掉的 SimPO,大模型的强化学习后训练技术正朝着更高效、更易用的方向快速发展。每种算法都有其适用场景:PPO 稳定可靠但资源消耗大;DPO 简洁高效但对数据敏感;GRPO 和 SimPO 则在显存受限时提供了优秀的替代方案。

选择哪种算法,需要根据具体的任务需求、数据情况和硬件条件来权衡。理解这些算法背后的核心思想和设计权衡,是有效应用它们的关键。