
从PPO到GRPO:算力减半的大模型推理能力训练革命 原创 精华
编者按: 还在为训练推理模型烧光算力预算而发愁?当开源小模型遇上数学题就“智商掉线”,如何低成本突破性能瓶颈?
传统 RLHF 动辄百万级算力投入,让多少团队在强化学习门前望而却步;格式混乱、逻辑断层、答案偏差——这些模型推理的顽疾是否也在阻碍你的 AI 产品落地?
本文深入解析 DeepSeek 团队突破性的 GRPO(群组相对策略优化)技术,这项创新将强化学习所需计算资源几乎减半,甚至可以结合 LoRA 在普通消费级 GPU 上进行模型训练。作者通过亲身实践,成功在仅需 16GB 显存的环境下将 1B 参数的 Llama 3.2 转化为推理模型(后续文章会分享相关细节),完全颠覆了传统强化学习的资源需求认知。
作者 | Greg Schoeninger
编译 | 岳扬
不久前,我们深入研究了 DeepSeek-R1 背后的技术原理,但是没有详细介绍其训练流程中采用的一项名为"群组相对策略优化"(Group Relative Policy Optimization, GRPO)的关键技术。
GRPO 本质上是一种旨在提升模型推理能力的强化学习算法。该技术最早发表于其研究论文《DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models》[1],随后也被应用于 DeepSeek-R1 的后训练阶段。
在《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》这一论文[2]中,研究团队详细阐述了从基础预训练语言模型到最终推理模型的完整构建路径。虽然之前我们未深入探讨 GRPO 的数学原理和代码实现,但今天这篇文章将全面解析 GRPO 的技术细节,助力各位读者掌握这项技术的核心要义并应用于实际工作。
01 要点回顾:DeepSeek-R1如何运用GRPO技术
为帮助理解,我们首先梳理从基础模型到推理模型的完整训练流程。该流程通过监督式微调(SFT)与群组相对策略优化(GRPO)的交替迭代实现模型能力跃升:
1.监督式微调(SFT)阶段
a.冷启动训练:采用数千条人工标注的高质量数据微调模型
b.数据验证:所有样本均通过人工审核确保可靠性
2.GRPO 强化学习阶段
a.推理轨迹训练:引导模型生成结构化推理过程(具有标签的推理轨迹)
b.三重确定性奖励:基于格式规范性、逻辑一致性、答案正确性设计奖励机制
3.增强型 SFT 阶段
a.合成数据生成:创建 80 万条合成训练样本并进行筛选
b.模型自检过滤:通过"LLM As A Judge"机制剔除错误响应
4.最终 GRPO 对齐阶段
a.价值观校准:确保模型输出兼具实用性与安全性
在这篇文章中,我们将深入探讨 GRPO 的细节,助您掌握这项推动大模型推理能力突破的关键技术。笔者已开展基于 GRPO 的小模型训练实验,后续将发布完整代码与工程实践细节,通过可复现案例串联理论知识与实际应用。
02 为什么 GRPO 很重要?
TLDR ~ 大幅降低了计算需求且简化了强化学习流程。与 ChatGPT(PPO)使用的基于人类反馈的强化学习(RLHF)相比,所需的计算资源几乎减半。当你结合 LoRA 使用时,即使“GPU poor”(译者注:GPU 的性能不足)也能进行强化学习训练。我试过了,确实有效。我成功地将 1B 参数的 Llama 3.2 模型改造成了仅需 16GB 显存的推理模型。后续文章会分享代码和硬件要求细节。
我们只需在云 GPU 服务上花不到 100 美元,就能从自家车库训练推理模型。如果用自己的硬件跑小模型,基本上算是"免费"。其底层原理是什么呢?下一节将讨论从 PPO 到 GRPO 的演变过程。
03 从 PPO 到 GRPO
传闻 ChatGPT 背后的强化学习(RL)技术是 PPO(Proximal Policy Optimization,近端策略优化)。该流程在 InstructGPT 论文[3]中被提出,用于创建能够遵循指令而不仅仅是简单预测下一个单词的模型。
训练过程需要收集大量标注数据。对于给定的用户查询,模型需生成多个候选响应,然后由人类或 AI 在循环中对输出进行标注并按质量从优到劣排序。这些数据可用于训练“奖励模型”,其职责是为新接收的提示词计算“奖励值”。该奖励值应体现给定用户查询下模型响应的优劣程度。
收集完所有这些经过排序和标注的数据后,即可启动 PPO 来训练大语言模型(LLM)。
问题在于 PPO 的训练成本可能非常高昂。 GRPO 论文[1]中的相关图表展示了 PPO 和 GRPO 过程中涉及的不同 LLM。下方蓝色和黄色方框中共有 4 个不同的 LLM。
为了帮助大家理解上图的一些术语,我在这里给出了一些简单的定义:
- 策略模型(Policy Model)- 对当前正在训练的 LLM 的别称
- 参考模型(Reference Model)- 被训练原始 LLM 的冻结版本
- 奖励模型(Reward Model)- 基于人类偏好训练的模型(来自上文提到的 InstructGPT 技术)
- 价值模型(Value Model)- 试图估算特定动作长期奖励的模型
04 通过 GRPO 减少内存使用量
在 PPO 算法中,策略模型和价值模型都包含需要通过反向传播进行优化的可训练参数。反向传播过程需要消耗大量内存资源。 从上面的架构图可以看出,GRPO 算法移除了价值模型模块。
PPO 算法中混合使用了 4 个大语言模型(LLMs),这些模型都需要消耗大量的内存和计算资源。其中价值模型和奖励模型的参数量通常与正在训练的目标语言模型相当。参考模型通常是训练初期的语言模型的冻结副本。
这种实现方法不仅带来高昂的计算成本,还存在诸多需要协调的动态组件,而且还有多个模型需要优化。组件数量越多,通常意味着优化难度越大。GRPO 通过精简架构有效降低了系统复杂度。
出于兴趣,我在 H100 上测试了不同参数规模的模型,观察使用 GRPO 进行微调的难易程度。
如果想了解具体技术细节,可以查阅相关文档:
https://www.oxen.ai/blog/grpo-vram-requirements-for-the-gpu-poor
若您理解了所有系统需求的来源,就可以开始参与开源项目贡献,或像我最近看到的 trl 仓库的这个 PR 那样,动手优化自己的机器学习库:
05 群组相对优势(Group Relative Advantages)
在强化学习过程中,我们从语言模型(LLMs)中获取的主要信号是代表"优势"(Advantage)的"A"。这个信号为更新原始语言模型的权重提供了方向指导:当优势值较高时,我们需要鼓励模型重复当前行为;当优势值较低时,则需要引导模型尝试不同的行为。
在 PPO 算法中,传统价值模型的核心任务是评估生成内容的质量,或者说预测这些内容获得高奖励值(high reward)的可能性。为了完成这项评估工作,需要训练大语言模型作为价值判断模块。那么 GRPO 是如何摆脱对价值模型的依赖的呢?
第一个技巧是:GRPO 不再针对单个查询生成单一输出,而是开始生成多个候选回答。
具体来说,如果问题是一道数学题,模型可能会尝试几种不同的解题方法。以下面这个数学问题为例:
Mr. Curtis has 325 chickens on his farm where 28 are roosters and the rest are hens. Twenty hens do not lay eggs while the rest of the hens do. How many egg-laying hens does Mr. Curtis have on his farm?
Curtis 先生的农场有 325 只鸡,其中 28 只是公鸡,其余是母鸡。其中有 20 只母鸡不下蛋,问有多少只产蛋母鸡?
模型可能会尝试多种解题思路,有的正确(答案为 227),有的不正确(答案为 305)。
正确推理路径:
First, let's find out how many hens there are. The total number of chickens is 325, and 28 are roosters. So, the number of hens is 325 - 28 = 297. Of these 297 hens, 20 do not lay eggs, so the number of egg-laying hens is 297 - 20 = 277.
277
首先,我们来看看有多少只母鸡。鸡的总数是 325 只,公鸡有 28 只。因此,母鸡的数量是 325 - 28 = 297。在这 297 只母鸡中,有 20 只不下蛋,所以下蛋母鸡的数量是 297 - 20 = 277。
277
错误推理路径:
You need to subtract the 20 hens that do not lay eggs from the total number of hens to find the number of egg-laying hens. So, the number of egg-laying hens is 325 - 20 = 305.
305
您需要从母鸡总数中减去不下蛋的 20 只母鸡,才能求出下蛋母鸡的数量。因此,产蛋鸡的数量为 325 - 20 = 305。
305
然后我们对每个输出根据其回答质量计算"奖励值"(reward)。可能存在多个评估不同响应属性的奖励函数。我们暂时将奖励函数视为黑盒,但知道它们会返回数值型结果——如果响应质量较好则数值较高,较差则较低,例如:
- Formatting(格式规范度)=1.0
- Answer(答案正确性)=0.0
- Consistency(逻辑一致性)=0.5
当获得所有输出的奖励值 (r) 后,GRPO 通过计算奖励值的均值 μ 和标准差 σ,生成群组相对优势 A。具体公式为:
这个公式在机器学习特征工程中非常实用,它可以将任意数值归一化为更易学习的正负信号。 其直观含义是:“这个数据点偏离平均值多少个标准差?”
让我们来看几个例子。
若用原生 numpy 代码表示可能如下:
再试另一组数值:
通过归一化,将奖励值转换为以均值为中心(0.0)的相对优势值。正值表示优于平均水平,负值表示劣于平均水平。这为我们建立了一套基准:“给定当前提示词,平均响应的质量如何?”在训练过程中,强化表现好的输出(提高其概率),抑制表现差的输出(降低其概率),从而引导模型优化方向。
这与传统价值模型的目标相似:预测给定响应的奖励值。由于我们现在训练的是语言模型,只需调整 temperature 参数即可生成多个候选回答,所有生成回答的平均奖励值即可作为衡量当前模型表现的良好信号,以及决定是否需要强化该行为。
06 KL 散度
这个方程的最后一项是 KL 散度项。
无需深入数学细节,这就是我们在训练过程中始终保留"参考模型"的原因。我们不希望新模型偏离原始模型太远,对于每个词元(token),都要确保新模型的预测结果不会与原始模型的预测结果产生过大偏差。
强制执行 KL 散度的直接原因是:初始模型已经具备生成连贯语句和遵循指令的能力。我们不希望新模型通过"奖励欺骗"(reward hack)或利用奖励信号中某些与原始模型不匹配的特性来取巧。例如,如果模型发现使用"pamplemousse"(葡萄柚的法语,发音有趣且较罕见)这个词能获得高奖励,但该词在预训练阶段并不常用,我们就要阻止模型过度依赖这种用词行为。
将这些要素整合,就得到了完整的最终方程!
或者就像我们值得信赖的"牛人 Eric"说的那样… 这个数学公式看起来比实际复杂…
07 奖励信号机制
DeepSeek-R1-Zero 研究的突破性在于,他们通过完全弃用"神经奖励模型"进一步大幅降低了内存消耗。
这意味着什么?简而言之,他们直接使用正则表达式(regex)和字符串匹配技术生成奖励信号。研究团队认为,这种方法既能规避"奖励欺骗"(reward hacking)问题,又能简化整个训练流程。
如果将前文提到的“准确性奖励(Accuracy Rewards)”和“格式奖励(Format Rewards)”规则转化为代码,其代码实现可能如下所示:
reference:
https://gist.github.com/willccbb/4676755236bb08cab5f4e54a0475d6fb
训练过程中完全无需引入额外的奖励模型 LLM,仅需保留策略模型和参考模型作为主要内存占用源。将所需 LLM 数量从 4 个削减至 2 个,显著降低了 GPU 资源需求。
若你的直觉此时感到不对劲,质疑“这种奖励函数是否具备泛化能力?”,那么你是对的。这类奖励机制仅在预设的特定任务(如数学推理和格式规范)上表现良好,但无法扩展到其他实用场景。 例如,模型可能擅长生成格式的数学解题过程,却无法完成开放式对话或创意写作。
我的预测是"苦涩的教训"(The Bitter Lesson)[4]将在此重现:当计算资源和数据量足够时,模型更倾向于自主学习。我们越是减少人工编码规则,让模型自主探索,其表现就越优异。当前 GRPO 的奖励机制仍显人工干预痕迹 —— 为何不让模型自行学习奖励信号的权重呢?
尽管如此,尝试不同的奖励机制其实挺有意思的。GRPO 的亮点在于: 只要能用代码定义奖励函数(输入响应、输出数值),即可基于此进行优化。甚至可以通过外部 API 调用其他 LLM 生成奖励信号。 我预感未来几周/月内,因为 GRPO 训练门槛的降低,开发者将开始探索各种创意奖励机制的设计。
Thanks for reading!
Hope you have enjoyed and learned new things from this blog!
END
本期互动内容 🍻
❓对于文中提到的“不到100美元训练推理模型”,你有何看法?欢迎在评论区畅所欲言。
🔗文中链接🔗
[1]https://arxiv.org/abs/2402.03300
[2]https://arxiv.org/abs/2501.12948
[3]https://arxiv.org/abs/2203.02155
[4]http://www.incompleteideas.net/IncIdeas/BitterLesson.html
原文链接:
https://ghost.oxen.ai/why-grpo-is-important-and-how-it-works/
