跳至主要内容

什么是 GRPO?详解群体相对策略优化

了解什么是 GRPO、其工作原理、实现所需的关键组件,以及在何种情况下最适合使用。
Andrea Valenzuela
Andrea Valenzuela

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

群体相对策略优化(GRPO)是一种前沿的强化学习(RL)技术,驱动了最新大型语言模型(LLM)的卓越表现。尽管它在DeepSeek-R1发布后广受关注,GRPO 最早是在DeepSeekMath中提出的——这是一款为高级数学推理微调的 LLM。GRPO 最初旨在提升微调效率,事实证明它是一种具备高性价比且通用的方法,已被社区广泛采用。

在本文中,我们将深入探讨 GRPO:它是什么、如何工作、实现所需的核心组件,以及何时最适合使用。本指南旨在带您理解 GRPO 背后的关键洞见,从而解释其日益流行的原因。

如果您渴望进一步了解 DeepSeek,欢迎查看我们的课程《在 Python 中使用 DeepSeek》。

强化学习简介

正如我们在LLM 微调指南中所述,监督式微调(SFT)是一种传统训练技术,即使用带标签的数据训练模型。也就是说,使用为给定输入示范期望补全或输出的样例。

SFT 的一个局限在于高度依赖大型标注数据集,而这类数据的产出往往成本高昂且耗时。此外,通过 SFT 训练的模型存在过拟合训练样例的风险,即在已见数据上表现良好,却难以泛化到新的或意外的情形。

SFT 的一种替代方式是强化学习,它不同于从固定样例中学习,而是让智能体通过与环境交互并尝试不同动作来完成任务。每次动作后,智能体都会以奖励或惩罚的形式收到反馈。目标是在时间维度上最大化累计奖励,进而发现最有效的策略。

一个简单的 RL 工作流可以如下表示:

Diagram of a simple RL workflow.

简单 RL 工作流示意图。

如果您希望用 Python 上手 RL,教程《强化学习:Python 入门示例》将非常适合您!

浅显理解强化学习

为了说明强化学习的概念,想象一下您在教您的表妹骑自行车。起初,她在蹬车和保持平衡方面很吃力,经常摇晃甚至摔倒。

每次她能骑得更远一点,您都会为她加油。这种正向反馈会激励她继续尝试。但当她试图从楼梯上骑下去时,您会立刻阻止并解释风险。这就起到了负向信号的作用,抑制此类行为。

类似地,强化学习允许模型探索不同的动作。正向奖励会强化理想结果,而负向奖励会抑制不当行为。随着时间推移,模型会通过这种反馈学会做出更好的决策。

强化学习的方法

将强化学习应用于模型有多种技术。具体而言,GRPO 被视为近端策略优化(PPO)与直接策略优化(DPO)的演进。

您之前听说过 PPO 和 DPO 吗?

近端策略优化

PPO 是一种广泛使用的 RL 算法,旨在通过使用独立的奖励模型来最大化奖励,从而优化模型行为。PPO 的一个典型应用是 OpenAI 的基于人类反馈的强化学习(RLHF)。在 RLHF 中,首先收集人类对模型输出的反馈,然后用这些数据训练奖励模型以预测反馈。有了奖励模型,就能在无需人工参与的情况下扩展人类反馈。

最后,PPO 会在训练期间使用奖励模型来调整模型参数,鼓励其生成更符合人类偏好的回应。下图展示了 PPO 的工作流程:

Diagram of the PPO workflow.

PPO 工作流程示意图。

如果您想在 Python 中实现 PPO 工作流,可以参考教程《使用 PyTorch 与 Gymnasium 的近端策略优化》。

直接策略优化

训练一个独立的奖励模型可能复杂且资源密集。为简化流程,DPO 应运而生,它改变了收集人类反馈的方式。

与其让人类用数值评分打分,DPO 依赖偏好比较。标注者会看到两个回应,并从中选择更偏好的一个。由此得到一个偏好与较不偏好的样例数据集。

随后,模型直接在这些偏好配对上进行微调,而无需依赖奖励模型。通过这种方式,模型学习到提升生成偏好回应的概率,并降低生成较不偏好回应的概率。

这种方法使模型无需独立奖励模型也能对齐人类偏好。让我们看看这一新流程:

Diagram of the DPO workflow.

DPO 工作流程示意图。

教程《OpenAI 偏好微调:指南与示例》将帮助您在实践中实现 DPO。

PPO 与 DPO 的挑战

与 PPO 相比,DPO 带来了诸多优势。就数据而言,PPO 需要先收集数据来训练奖励模型,然后再实际训练这个辅助模型(伴随训练新模型的诸多技术挑战),甚至在开始训练目标模型之前就要完成这些。DPO 通过去除独立奖励模型的需求简化了流程。尽管如此,这种方法仍然需要大量的偏好数据。

此时,您是否能预见一种消除这些限制的方式?

如果我们不依赖外部反馈,能否找到一种自动方式来验证并评分模型回应?

这正是 GRPO 的价值所在!

什么是 GRPO?

群体相对策略优化是一种不需要带标签数据的 RL 技术,它只需要一种“验证”正确性的手段,并据此对回应进行排序。验证通常通过可编程的奖励函数来实现,例如,能将模型回应作为输入并就某一方面输出评分的函数。

某些 GRPO 做法会使用“LLM 评审”来验证并评分回应,但在诸如软件开发等领域,无需外部模型也可利用 GRPO 的核心思想,因为生成代码的不同方面可以由外部工具进行验证。例如,

  • 代码能否编译?这里我们只需使用编译器。
  • 是否存在运行时错误?这里我们只需运行代码。
  • 是否通过了单元测试?这里我们只需要单元测试。
  • 代码 Linter 的输出是否干净?这里我们只需一个 Linter。

如您所见,不需要人类或偏好数据!

奖励函数

在DeepSeek-Math的原始论文中,奖励函数被设计用来评估数学解答的正确性与格式。如果您曾要求 LLM 输出结构化结果,您会发现模型在大多数补全中可能遵循了期望的输出格式,但总有个别边角情况会把您的流水线搞崩,对吧?

在DeepSeek-Math的案例中,奖励函数聚焦于正确性与格式:

  • 准确性奖励用于评估模型最终答案是否正确。对于确定性的数学问题,要求模型按指定格式(如用方框括起)呈现最终答案,以便与真值进行自动比对。
  • 格式奖励确保模型回应遵循预定义结构。具体而言,鼓励模型将其推理过程包裹在指定标签内(例如 <think> 与 </think>)。这种格式有助于提取与分析模型的思考过程,提升输出的清晰度与一致性。

GRPO 工作流程

此时,您也许会问:GRPO 在模型训练流程中处于什么位置?

让我们逐步回顾这一过程!

  1. 向 LLM 发送提示,并采样多个候选回应。
  2. 编写一个或多个可编程函数,接收提示与回应对,并为每个对打分。
  3. 使用这些分数更新 LLM 权重,提高生成高于平均分回应的概率,降低生成低于平均分回应的概率。

通过这一循环,GRPO 直接依据奖励函数的输出对模型进行微调,而无需收集偏好数据。

Diagram of the GRPO workflow with score rewards computed by an external actor.

由外部执行体计算评分奖励的 GRPO 工作流程示意图。

最后,值得注意的是,GRPO 还能带来教授模型新任务的好处,而不仅仅像 PPO 或 DPO 那样将学习引导至某种偏好。

GRPO 的优势

从上图可见,GRPO 的最大优势在于不需要带标签数据,只需要一种“验证”正确性的手段,这可通过可编程的奖励函数实现。

另一个优势是所需样例远少于微调,使其成为一种高性价比的替代方案。

此外,模型从反馈中主动学习,而非固定的带标签样例,从而降低过拟合风险。 使用 GRPO 训练的模型能够有机地发现更优策略,并改进其思维链路。

GRPO 的应用场景

如前所述,当您没有带标签数据但能够验证输出的正确性时,GRPO 的主要用例就出现了。当您拥有的带标签数据有限、但不足以进行传统监督式微调时,它同样非常有效。这使得 GRPO 在标注成本高或不切实际的场景中特别有价值。

GRPO 已展现显著优势的一些领域包括:

  • 数学能力:例如,在DeepSeek-Math 模型中,GRPO 在无需大量标注数据集的情况下,有效提升了模型解决复杂数学问题的能力。
  • 代码生成:GRPO 通过让系统自我验证输出并迭代改进,帮助提升生成代码的准确性与可靠性。
  • 多步推理:GRPO 已被证明能提升模型在需要序列化推理与整合多步逻辑的任务中的表现。

进阶 GRPO

在实践中实现 GRPO 时,有一些进阶技巧值得您关注。

进阶奖励函数

奖励函数为模型提供其目标达成情况的反馈。该过程中的关键要素包括:

  • 回应的多样性:生成广泛的候选输出能增加发现更高质量解法或策略的机会。
  • 奖励的多样性:设计能区分不同成功水平或部分达成情况的奖励函数,而非仅二元的通过/失败信号。这被称为部分得分奖励,它通过为回应的不同方面给予部分分来提供更细腻的反馈。示例包括:至少验证输出格式正确、生成的代码成功编译,或代码通过了部分单元测试。这类分级奖励会鼓励模型逐步改进,即便回应尚未完全正确。

另外,为整个群体设定基线在稳定并改进训练过程中也起着重要作用。通过从个体奖励中减去这一基线,模型获得的是相对于整体群体表现的反馈,这能降低奖励估计的方差,并鼓励超越平均水平的渐进式改进。

Temperature

在 LLM 中,temperature 参数控制生成输出时采样过程的随机性。将 temperature 设为 0 会得到确定性采样,即模型总是选择最可能的下一个 token。

虽然这能确保一致性,但往往会反复生成相同的输出,限制了回应的多样性。

相反,提高 temperature 会引入更多随机性,使模型能够探索更广泛的可能性。这种多样性有助于发现不同或出人意料的解法。

然而,更高的 temperature 也带来权衡:每次猜测的个体质量往往较低,因为模型会更频繁地采样低概率 token。因此,整体学习过程可能变慢。

选择合适的 temperature 有时是一门艺术!

奖励攻击

模型很“机灵”,有时会以意想不到的方式利用奖励函数,在未真正达成目标的情况下最大化奖励。

例如,假设模型因针对给定代码片段生成测试而获得奖励。模型可能会提供一个测试函数,但实际上并未测试任何内容,从而绕开“验证代码正确性”的真正目标却仍然拿到奖励。

在编写奖励函数时应意识到这些“投机”方式。例如,在测试生成的场景下,通常要求模型在测试中至少包含一个“assert”语句,否则将受到惩罚。

结语

最后,为了确保所有概念都被充分理解,我想将 GRPO 应用于一个现实场景。

想象您和朋友参加一场健身比赛,奖励依据跑步、俯卧撑和划船的表现发放。最初,健身房只奖励绝对成绩最好的人。 

这样一来,如果 Alice 跑得更远、俯卧撑做得更多,她总是获胜,即使 Ben 已经有了显著进步。

这对 Ben 来说是否有点不公平?

为了解决这个问题,健身房尝试了另一种方法:基于过去表现设定个人目标。

现在,只有当您打破自己的历史纪录时才获得奖励。虽然这看起来更公平,但也带来了新问题。新成员(如 Charlie)没有历史数据可供对比,参与起来很困难。此外,教练还必须持续跟踪每个人的个体进展,效率低下。

最终,健身房提供了更好的方案:GRPO。

在训练开始前,教练启动一个系统,分析参与者特征,并将其按相似条件分组。训练过程中,系统跟踪每位参与者的表现,并在每个组内计算平均分作为基线。之后,奖励依据每个人在当天相对于其所在组平均表现的超越幅度来发放。

因此,如果 Ben 的表现明显优于他所在小组的其他人,他就能获得奖励,即便 Alice 的总体分数仍然最高。这种方法对像 Charlie 这样的新手也公平,因为他们是相对于同场次同侪来评估,而非基于历史记录。

该过程中的一个重要因素是 temperature,它控制对改进的奖励有多“严格”。如果 temperature 过低,只有远高于基线的提升才会被计入;如果 temperature 过高,即使是很小的提升也会被奖励,这会鼓励试验,但可能导致进展不稳定。 

GRPO 旨在找到合适的平衡,确保稳步改进,同时允许探索。

最后,还存在奖励攻击的风险。这意味着参与者在未真正提升的情况下找到“钻系统空子”的方法。例如,Ben 可能只专注于最容易的练习,以较小的努力刷高分数。

为防止这种情况,健身房加入了安全措施,例如要求练习的平衡组合,或对重复、低投入的练习进行惩罚。这些约束确保奖励能反映真实的进步。

如果您想进一步了解 LLM 的工作原理以及如何开发自己的模型,欢迎查看我们的课程《开发大型语言模型》。

GRPO 常见问题

GRPO 需要多少数据?

通常少于 1000 个带标签样例。

GRPO 是否需要跟踪过去表现?

不需要。GRPO 只使用当前训练步骤中的信息。

GRPO 中的“群体”是什么?

“群体”是针对同一提示的模型回应集合。

GRPO 如何防止奖励攻击?

通过引入约束,GRPO 会抑制模型走“捷径”刷高奖励的行为。

GRPO 中如何分配奖励?

每个回应的奖励基于其超过群体基线的幅度,而非绝对奖励。

Andrea Valenzuela

作者

Andrea Valenzuela

Andrea Valenzuela 目前在瑞士日内瓦的欧洲核子研究中心(CERN)粒子加速器的 CMS 实验工作。她在过去六年深耕数据工程与数据分析,主要职责包括数据分析与软件开发。她现正通过 Medium 出版物 ForCode'Sake 推动数据相关技术的学习大众化。

她拥有加泰罗尼亚理工大学工程物理学学士学位,以及庞培法布拉大学智能交互系统硕士学位。她的研究经历包括基于早期 OpenAI 图像生成算法(如 Normalizing Flows)的专业工作。

主题