转自:https://mp.weixin.qq.com/s/OMpD6ITqNi4jX95nSRC2Ig
在人工智能的浪潮之巅,大型语言模型(LLM)的进化速度令人瞩目。然而,如何让这些模型不仅“能说”,更能“会道”,使其回答更符合人类的价值观、偏好和期望,成为了业界的核心挑战。为了实现这一目标,一系列精巧的算法应运而生,它们如同“驯兽师”,引导着模型的行为,使其更好地为人类服务。
在众多对齐(Alignment)技术中,强化学习扮演了至关重要的角色。其中,近端策略优化(Proximal Policy Optimization, PPO)、直接偏好优化(Direct Preference Optimization, DPO)以及最近备受关注的组别相对策略优化(Group Relative Policy Optimization, GRPO)是三颗璀璨的明星。它们代表了从“间接”到“直接”,从“个体”到“群体”的不同优化思路,深刻影响着当今大模型的训练范式。
本文将以万字篇幅,深入浅出地为您剖析这三种算法的核心思想、数学原理、实现细节以及它们之间的异同与联系。无论您是初涉该领域的学生,还是经验丰富的从业者,相信都能从中获得有价值的见解。
在深入探讨具体算法之前,我们有必要先理解它们所要解决的根本问题:如何让模型变得“更好”?
传统的监督微调(Supervised Fine-Tuning, SFT)是训练大模型的第一步。我们用大量高质量的“指令-回答”对来教模型模仿人类的说话方式。然而,SFT有其局限性。首先,高质量的 SFT 数据集构建成本高昂;其次,人类的偏好是复杂且主观的,很难用唯一的“正确答案”来概括。例如,对于“请写一首关于秋天的诗”这个指令,存在无数种优秀的回答,S_T 很难覆盖所有可能性,也无法告诉模型哪种风格的诗更受欢迎。
为了解决这个问题,研究者们引入了**从人类反馈中进行强化学习(Reinforcement Learning from Human Feedback, RLHF)**的框架。RLHF 的核心思想是,不再直接告诉模型“正确答案是什么”,而是让模型生成一些回答,然后由人类来评判这些回答的好坏(例如,对多个回答进行排序),再利用这些偏好数据来“奖励”或“惩罚”模型,从而引导其生成更符合人类偏好的内容。
这个过程通常分为三个阶段:
在这个框架中,PPO 长期以来都是第三阶段的绝对主力。然而,随着技术的发展,DPO 和 GRPO 提供了新的、可能更高效的路径。现在,让我们正式进入这三种算法的探索之旅。
PPO 是 OpenAI 在 2017 年提出的一种强化学习算法,其设计的初衷是为了解决传统策略梯度算法(Policy Gradient)中训练不稳定、更新步长难以确定的问题。在 RLHF 的背景下,PPO 的稳定性和可靠性使其成为优化语言模型的首选。
想象一下你在教一个孩子玩一个游戏。如果孩子每次尝试后,你都给予他非常剧烈的反馈(要么是极高的赞扬,要么是严厉的批评),他可能会感到困惑和不知所措,甚至放弃学习。一个更好的方法是,在他当前行为的基础上,温和地引导他向更好的方向改进,每次只做小小的调整。
PPO 的核心思想与此类似。它认为,在更新模型的策略(即模型生成文本的方式)时,更新的步伐不应该太大。如果新策略与旧策略相差过大,可能会导致模型性能的急剧下降,即“掉下悬崖”。PPO 通过一个巧妙的机制,将策略更新限制在一个“近端”的、可信赖的区域内,从而保证了学习过程的稳定。
PPO 的魔法在于其目标函数的设计。标准的策略梯度算法的目标是最大化期望回报。PPO 在此基础上引入了两个关键概念:概率比(Probability Ratio)和优势函数(Advantage Function)。
PPO 的目标函数(简化版)如下:
让我们来解读这个公式:
通过这种方式,PPO 像一个温和而有耐心的老师,确保模型在每次学习后都能稳定进步,而不会因为某次剧烈的更新而崩溃。
在 RLHF 流程中,PPO 的工作流程如下:
同时,为了防止模型在优化过程中“忘记”SFT 阶段学到的知识,或者为了防止模型生成一些虽然奖励高但内容乱七八糟的文本,PPO 的损失函数中通常还会加入一个 KL 散度惩罚项。这个惩罚项用来衡量当前策略与初始 SFT 策略的差异,差异越大,惩罚越重,确保模型在追求高奖励的同时,不会偏离其原始的语言能力。
下面的 Python 代码使用 PyTorch 风格展示了 PPO 损失函数的核心计算逻辑,旨在帮助理解,而非一个可直接运行的完整训练脚本。
尽管 PPO 非常成功,但 RLHF 中的 PPO 流程相当复杂。它需要同时维护和训练多个模型(策略模型、价值模型、奖励模型、SFT 参考模型),这使得训练过程非常消耗计算资源和内存,且超参数调整也颇具挑战。正是这些挑战,催生了更简洁的替代方案——DPO。
DPO 由斯坦福大学的研究者于 2023 年提出,它以一种惊人的简洁性,对传统的 RLHF 流程发起了挑战。DPO 的核心洞见是:我们完全可以绕过奖励模型建模这一中间步骤,直接利用人类的偏好数据来优化语言模型。
传统 RLHF 是一个“两步走”的过程:先用偏好数据(A 比 B 好)训练一个能给绝对分数(A 得 90 分,B 得 60 分)的奖励模型,然后再用这个分数去指导强化学习。
DPO 的提出者反思道:我们最终的目标不就是让模型知道“A 比 B 好”吗?为什么非要先把它变成“A=90分,B=60分”,再回头去学习这个偏好呢?这个中间的奖励建模步骤不仅复杂,还可能引入误差。我们能不能直接建立一个从“偏好”到“策略更新”的数学桥梁?
DPO 做到了这一点。它巧妙地将偏好数据和语言模型的策略联系起来,推导出了一个简单的、可以用分类损失函数直接优化的目标。
DPO 的理论推导略显复杂,但其最终的损失函数却异常优雅。它始于一个名为 Bradley-Terry 的模型,该模型常用于根据成对比较来估计事物的排名。DPO 假设人类的偏好概率 可以用一个潜在的奖励模型 来建模:
这里, 是被偏好的回答(winner), 是不被偏好的回答(loser), 是指令。 是一个控制敏感度的常数。这个公式本质上是一个 Sigmoid 函数,表示 的奖励比 高得越多,人类偏好 的概率就越大。
接下来是 DPO 最关键的一步。它通过一系列精妙的数学变换,证明了优化语言模型 以最大化这个奖励,等价于最小化以下损失函数:
让我们来解读这个“天书般”的公式:
相比 PPO,DPO 的流程大大简化:
整个过程不需要训练一个独立的奖励模型,也不需要复杂的采样和优势计算,更没有价值模型。这使得 DPO 在实现上更简单,训练更稳定,也更节省计算资源。
Hugging Face 的 trl 库提供了 DPOTrainer,使得 DPO 的实现变得非常简单。以下是一个概念性的代码片段,展示了其核心逻辑。
DPO 虽然简洁高效,但也有其适用场景和潜在的局限。DPO 强依赖于高质量的成对偏好数据。如果偏好数据的质量不高,或者标注不一致,DPO 的效果可能会受到影响。此外,由于其直接优化的特性,它对于数据分布的变化可能比 PPO 更敏感。在某些需要精细控制奖励函数的复杂场景下,PPO 的灵活性可能依然具有优势。
就在 PPO 和 DPO 的讨论如火如荼之时,DeepSeek-AI 在其模型(如 DeepSeekMath 和 DeepSeek-R1)的训练中,提出并使用了一种名为 GRPO 的新方法,为 RLHF 带来了新的视角。GRPO 可以看作是 PPO 的一个变种,它通过一种新颖的方式来估计优势函数,从而省去了 PPO 中昂贵的价值模型(Critic Model)。
PPO 的核心是优势函数 ,它需要一个奖励模型 来提供奖励,还需要一个价值模型 来提供基线(Baseline),即在状态 下的平均期望回报。训练和维护这个价值模型是 PPO 流程中主要的复杂性和成本来源之一。
GRPO 的提出者思考:我们能不能找到一种更简单的方式来估计这个“平均水平”呢?
他们的答案是:利用群体智慧。对于同一个指令,我们不只生成一个回答,而是生成一组(Group)回答。然后,我们假设这组回答的平均奖励,就可以近似地作为当前策略下的“平均水平”,也就是价值 的一个估计。
这个想法非常直观。想象一下,要评价一个学生这次考试的成绩(某个回答的奖励)是好是坏(优势),我们不需要知道他历史上的平均分(价值模型的输出),我们可以直接看他这次在班级里(一组回答中)的排名。如果他的分数远高于班级平均分,那么他的优势就是正的,反之亦然。
GRPO 的核心是对 PPO 中优势函数的计算方式进行了修改。其步骤如下:
组采样 (Group Sampling):对于一个给定的指令 ,使用当前的策略模型 生成一个包含 个回答的组 。
组评估 (Group Evaluation):使用一个奖励函数(可以是一个训练好的奖励模型,也可以是某种可计算的启发式规则,例如代码的执行结果、数学题的答案是否正确等)为组内的每一个回答 打分,得到奖励 。
组内优势计算 (Group-Relative Advantage Estimation):计算组内所有回答的平均奖励 和标准差 。对于组内的每一个回答 ,其优势被定义为其归一化后的奖励:
这种方法被称为组内奖励归一化(Group-wise Reward Normalization)。它直接用组内的统计量(均值和标准差)来替代了 PPO 中需要专门训练的价值模型所扮演的角色。
策略更新:一旦计算出了每个样本的优势 ,接下来的步骤就和 PPO 非常相似了。GRPO 同样使用 Clipped Surrogate Objective 来更新策略模型。
其中 是概率比, 是上面计算出的组内相对优势。
下面的代码片段展示了 GRPO 中计算组内相对优势的核心逻辑。
GRPO 特别适用于以下场景:
经过前面的详细介绍,我们现在可以从多个维度对这三种算法进行一个全面的比较,以帮助您在实际应用中做出更合适的选择。
从 PPO 的稳定可靠,到 DPO 的简洁直接,再到 GRPO 的高效灵活,我们看到了大模型对齐技术在“效果”、“效率”和“成本”这个不可能三角中的不断探索与演进。
这三种算法并非简单的替代关系,而更可能是一种共存与融合的关系。未来的研究可能会探索:
毫无疑问,PPO、DPO 和 GRPO 的发展,只是人类探索如何与超强人工智能和谐共舞的序章。理解它们的原理,掌握它们的应用,不仅是每一位 AI 从业者的必备技能,也是我们洞察未来技术走向的一扇重要窗口。希望这篇万字长文,能为您在这条探索之路上,点亮一盏清晰的明灯。