强化学习算法(GRPO)
相对策略优化算法(GRPO)
0 阅读指引与要点
- 🔑 目标:说明 GRPO 如何通过移除价值网络、使用组内相对基线,在 LLM 强化学习中实现资源高效且稳定的策略优化。
- 🧩 核心机制:组内相对基线(替代价值网络)、裁剪替代目标(类似 PPO)、独立 KL 正则化、多轮小批量更新。
- 🔍 比较视角:与 PPO(需要价值网络)、TRPO(KL 约束)在资源消耗、实现复杂度、适用场景上的取舍。
- 🧭 阅读路径:1 引言 → 2 背景(PPO)→ 3 组相对策略优化 → 4 结果/过程监督 → 5 算法 → 6 实验。
摘要
提出一种用于大型语言模型(LLM)强化学习的高效策略优化方法:组相对策略优化(GRPO)。GRPO 是近端策略优化(PPO)的变体,通过移除价值网络、使用组内平均奖励作为基线,显著降低了训练资源需求(显存和计算成本降低约 50%)。GRPO 的核心创新在于:1) 组内相对基线:对同一问题采样多个输出,使用组内平均奖励作为基线,与奖励模型的比较属性天然匹配;2) 独立 KL 正则化:将 KL 惩罚从奖励中分离,作为独立正则项,调参更直观;3) 裁剪替代目标:使用类似 PPO 的裁剪机制,限制策略更新幅度。在数学推理任务上,GRPO 在性能强劲的指令微调模型基础上取得了显著提升(GSM8K:82.9%→88.2%,MATH:46.8%→51.7%),同时显著降低了训练资源消耗。核心创新在于 组内相对基线 使 LLM 强化学习无需价值网络即可获得稳定的策略改进。🚀
1 引言
近年来,强化学习(RL)已被证明在监督微调(SFT)阶段之后,能进一步提升大型语言模型的数学推理能力(Luo等人,2023;Wang等人,2023b)。近端策略优化(PPO)(Schulman等人,2017)是一种演员-评论家RL算法,广泛应用于大型语言模型的RL微调阶段(Ouyang等人,2022)。然而,PPO 在 LLM 强化学习中存在一些问题:1) 价值网络负担:价值函数通常是与策略模型规模相当的另一个模型,带来巨大的内存和计算负担;2) 价值函数训练困难:在LLM场景中,奖励模型通常仅对最后一个token分配奖励分数,这可能会使在每个token上都保持准确的价值函数训练变得复杂;3) KL 惩罚混杂:KL 惩罚在奖励中,与优势计算混杂,调参不直观。
本文旨在通过引入一种无需价值网络即可达到PPO稳定性和性能的算法来改善现状。我们提出了组相对策略优化(GRPO),这是一种基于PPO的强化学习变体算法。GRPO 的核心创新在于:1) 移除价值网络:使用组内平均奖励作为基线,无需额外的价值网络;2) 组相对优势:对同一问题采样多个输出,使用组内相对比较计算优势;3) 独立 KL 正则化:将 KL 惩罚从奖励中分离,作为独立正则项。这些改进使得 GRPO 在保持 PPO 稳定性的同时,显著降低了资源消耗(显存和计算成本降低约 50%),更适合 LLM 强化学习场景。
我们的实验表明,GRPO 在数学推理任务上取得了显著提升。在性能强劲的指令微调模型基础上,GRPO 在域内数学任务(GSM8K:82.9%→88.2%,MATH:46.8%→51.7%)和域外数学任务(如 CMATH:84.6%→88.8%)上都取得了显著提升,同时显著降低了训练资源消耗。
1.1. 贡献
我们的贡献:大规模数学预训练 + 高效RL(GRPO),覆盖数据、算法与分析三条主线。🧩
大规模数学预训练
-
我们的研究提供了有力证据,表明公开可访问的 Common Crawl 数据包含有价值的数学信息。通过实施精心设计的数据选择 pipeline,我们成功构建了 DeepSeekMath 语料库——一个包含 1200 亿 tokens 的高质量数学内容网页数据集,其规模几乎是 Minerva(Lewkowycz et al., 2022a)所用数学网页的 7 倍,是最近发布的 OpenWebMath(Paster et al. 2023)的 9 倍。
-
我们预训练的基础模型 DeepSeekMath-Base 7B 达到了与 Minerva 540B(Lewkowycz et al., 2022a)相当的性能,表明参数数量并非数学推理能力的唯一关键因素。在高质量数据上预训练的小模型也能实现强大性能。
-
我们分享了数学训练实验的发现。数学训练前进行代码训练,无论是否使用工具,都能提高模型解决数学问题的能力。这为“代码训练是否提升推理能力”这一长期问题提供了部分答案。我们认为答案是肯定的,至少在数学推理方面是如此。
-
尽管训练 arXiv 论文(尤其是在许多数学相关论文中)很常见,但这并未在本文采用的所有数学基准上带来显著提升。
强化学习的探索与分析
-
我们提出了组相对策略优化(GRPO),一种高效且有效的强化学习算法。GRPO 摒弃了评论家模型,转而通过组分数估计基线,与近邻策略优化(PPO)相比显著降低了训练资源需求。
-
我们证明,仅使用指令微调数据,GRPO 就能显著提升指令微调模型 DeepSeekMath-Instruct 的性能。此外,我们观察到在强化学习过程中域外性能也有所增强。
-
我们提供了一个统一范式来理解 RFT、DPO、PPO 和 GRPO 等不同方法。我们还进行了大量实验,如在线与离线训练、结果与过程监督、单轮与迭代强化学习等,以深入探究该范式的基本要素。
-
基于我们的统一范式,我们探究了强化学习有效性背后的原因,并总结了实现更有效的LLM强化学习的几个潜在方向。
2. 数学预训练
在本节中,我们将概述从Common Crawl构建DeepSeekMath语料库的过程。如图2所示,我们提出了一个迭代流程,展示了如何从种子语料库(例如一个小型但高质量的数学相关数据集集合)开始,系统地从Common Crawl收集大规模数学语料库。值得注意的是,这种方法也适用于其他领域,如编码。
首先,我们选择OpenWebMath(Paster等人,2023)——一个高质量数学网络文本集合——作为初始种子语料库。利用该语料库,我们训练了一个fastText模型(Joulin等人,2016)来召回更多类OpenWebMath的数学网页。具体而言,我们从种子语料库中随机选择50万个数据点作为正训练样本,并从Common Crawl中选取另外50万个网页作为负样本。我们使用开源库进行训练,配置向量维度为256,学习率为0.1,单词n-gram的最大长度为3,单词出现的最小次数为3,训练轮数为3。为了减小原始Common Crawl的规模,我们采用基于URL的去重和近去重技术,得到400亿个HTML网页。然后,我们使用fastText模型从去重后的Common Crawl中召回数学网页。为了过滤低质量数学内容,我们根据fastText模型预测的分数对收集到的页面进行排序,只保留排名靠前的页面。保留的数据量通过对前400亿、800亿、1200亿和1600亿个token进行预训练实验来评估。在第一次迭代中,我们选择保留前400亿个token。
在第一次数据收集迭代后,仍有大量数学网页未被收集,主要原因是fastText模型是在缺乏足够多样性的正样本集上训练的。因此,我们确定了额外的数学网络来源来丰富种子语料库,以便优化fastText模型。具体而言,我们首先将整个Common Crawl组织成不相交的域;域定义为共享相同基础URL的网页。对于每个域,我们计算在第一次迭代中被收集的网页百分比。超过10%的网页被收集的域被归类为数学相关域(例如mathoverflow.net)。随后,我们手动标注这些已识别域中与数学内容相关的URL(例如mathoverflow.net/questions)。与这些URL链接但未被收集的网页将被添加到种子语料库中。这种方法使我们能够收集更多正样本,从而训练出改进的fastText模型,该模型能够在后续迭代中召回更多数学数据。经过四次数据收集迭代,我们最终获得了3550万个数学网页,总计1200亿个token。在第四次迭代中,我们注意到近98%的数据已在第三次迭代中收集,因此决定停止数据收集。
为避免基准污染,我们遵循Guo等人(2024)的方法,过滤掉包含来自英语数学基准(如GSM8K(Cobbe等人,2021)和MATH(Hendrycks等人,2021))以及中文基准(如CMATH(Wei等人,2023)和AGIEval(Zhong等人,2023))的问题或答案的网页。过滤标准如下:任何包含与评估基准中任意子字符串完全匹配的10-gram字符串的文本片段,均从我们的数学训练语料库中移除。对于长度短于10-gram但至少有3-gram的基准文本,我们采用精确匹配来过滤受污染的网页。
4. 强化学习
2 背景:从 PPO 到 GRPO
符号说明:
- LLM 强化学习符号:
- qqq:问题(Question),从问题分布 P(Q)P(Q)P(Q) 中采样
- ooo:输出(Output),语言模型生成的文本序列
- ∣o∣|o|∣o∣:输出的长度(token 数量)
- oto_tot:输出中第 ttt 个 token
- o<to_{<t}o<t:输出中第 ttt 个 token 之前的所有 token(前缀)
- o≤to_{\leq t}o≤t:输出中前 ttt 个 token(包括第 ttt 个 token)
- {oi}i=1G\{o_i\}_{i=1}^G{oi}i=1G:一组输出(Group of Outputs),对同一问题 qqq 采样 GGG 个输出
- GGG:组大小(Group Size),通常为 4-8
- oi,to_{i,t}oi,t:第 iii 个输出中第 ttt 个 token
- oi,<to_{i,<t}oi,<t:第 iii 个输出中第 ttt 个 token 之前的所有 token
- 策略符号:
- πθ(ot∣q,o<t)\pi_\theta(o_t | q, o_{<t})πθ(ot∣q,o<t):参数化策略(语言模型),在给定问题 qqq 和前缀 o<to_{<t}o<t 下生成 token oto_tot 的概率
- θ\thetaθ:策略模型(语言模型)的参数
- θold\theta_{\text{old}}θold:旧策略的参数(更新前的策略参数)
- πref\pi_{\text{ref}}πref:参考策略(Reference Policy),通常为初始 SFT 模型
- 奖励和优势符号:
- rφ(q,o≤t)r_\varphi(q, o_{\leq t})rφ(q,o≤t):奖励模型(Reward Model)对问题 qqq 和输出前缀 o≤to_{\leq t}o≤t 的评分
- φ\varphiφ:奖励模型的参数
- rtr_trt:时刻 ttt 的奖励(Reward),在 PPO 中包含 KL 惩罚
- AtA_tAt:优势函数(Advantage Function),在 PPO 中使用 GAE 计算
- A^i,t\hat{A}_{i,t}A^i,t:组内相对优势(Group Relative Advantage),在 GRPO 中基于组内相对奖励计算
- Vψ(st)V_\psi(s_t)Vψ(st):价值函数(Value Function),在 PPO 中用于计算优势,ψ\psiψ 为价值网络参数
- GRPO 特定符号:
- rˉ\bar{r}rˉ:组内平均奖励(Group Average Reward),rˉ=1G∑i=1Gri\bar{r} = \frac{1}{G}\sum_{i=1}^G r_irˉ=G1∑i=1Gri
- ε\varepsilonε:裁剪范围超参数(Clipping Range),通常为 0.1 到 0.3
- β\betaβ:KL 正则化系数(KL Regularization Coefficient),独立于优势计算
- DKL[πθ∥πref]\mathbb{D}_{KL}[\pi_\theta \parallel \pi_{\text{ref}}]DKL[πθ∥πref]:KL 散度(Kullback-Leibler Divergence),衡量策略差异
- E[⋅]\mathbb{E}[\cdot]E[⋅]:期望算子
2.1 近端策略优化(PPO)回顾
近端策略优化(PPO)(Schulman等人,2017)是一种演员-评论家RL算法,广泛应用于大型语言模型的RL微调阶段(Ouyang等人,2022)。PPO 的核心是裁剪替代目标函数:
JPPO(θ)=E[q∼P(Q),o∼πθold(O∣q)]1∣o∣∑t=1∣o∣min[πθ(ot∣q,o<t)πθold(ot∣q,o<t)At,clip(πθ(ot∣q,o<t)πθold(ot∣q,o<t),1−ε,1+ε)At],(1) {\mathcal{J}}_{PPO}\left( \theta \right) = \mathbb{E}\left\lbrack {q \sim P\left( Q\right) ,o \sim {\pi }_{{\theta }_{old}}\left( {O \mid q}\right) }\right\rbrack \frac{1}{\left| o\right| }\mathop{\sum }\limits_{{t = 1}}^{\left| o\right| }\min \left\lbrack {\frac{{\pi }_{\theta }\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }{{\pi }_{{\theta }_{old}}\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }{A}_{t},\operatorname{clip}\left( {\frac{{\pi }_{\theta }\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }{{\pi }_{{\theta }_{old}}\left( {{o}_{t} \mid q,{o}_{ < t}}\right) },1 - \varepsilon ,1 + \varepsilon }\right) {A}_{t}}\right\rbrack , \tag{1} JPPO(θ)=E[q∼P(Q),o∼πθold(O∣q)]∣o∣1t=1∑∣o∣min[πθold(ot∣q,o<t)πθ(ot∣q,o<t)At,clip(πθold(ot∣q,o<t)πθ(ot∣q,o<t),1−ε,1+ε)At],(1)
PPO 目标函数(LLM 场景)公式 (1) 详解:
- 变量含义:
- JPPO(θ)\mathcal{J}_{PPO}(\theta)JPPO(θ):PPO 的目标函数(在 LLM 强化学习场景中)
- θ\thetaθ:策略模型(语言模型)的参数
- qqq:问题(Question),从问题分布 P(Q)P(Q)P(Q) 中采样
- ooo:输出(Output),从旧策略 πθold(O∣q)\pi_{\theta_{old}}(O | q)πθold(O∣q) 中采样
- ∣o∣|o|∣o∣:输出的长度(token 数量)
- oto_tot:输出中第 ttt 个 token
- o<to_{<t}o<t:输出中第 ttt 个 token 之前的所有 token(前缀)
- πθ(ot∣q,o<t)\pi_\theta(o_t | q, o_{<t})πθ(ot∣q,o<t):当前策略在给定问题 qqq 和前缀 o<to_{<t}o<t 下生成 token oto_tot 的概率
- πθold(ot∣q,o<t)\pi_{\theta_{old}}(o_t | q, o_{<t})πθold(ot∣q,o<t):旧策略在给定问题 qqq 和前缀 o<to_{<t}o<t 下生成 token oto_tot 的概率
- πθ(ot∣q,o<t)πθold(ot∣q,o<t)\frac{\pi_\theta(o_t | q, o_{<t})}{\pi_{\theta_{old}}(o_t | q, o_{<t})}πθold(ot∣q,o<t)πθ(ot∣q,o<t):概率比(Importance Sampling Ratio)
- AtA_tAt:时刻 ttt 的优势函数(Advantage Function),通过 GAE 计算得到
- ε\varepsilonε:裁剪范围超参数(Clipping Range),通常为 0.1 到 0.3
- clip(⋅,1−ε,1+ε)\text{clip}(\cdot, 1-\varepsilon, 1+\varepsilon)clip(⋅,1−ε,1+ε):裁剪函数,将概率比限制在 [1−ε,1+ε][1-\varepsilon, 1+\varepsilon][1−ε,1+ε] 范围内
- min(⋅,⋅)\min(\cdot, \cdot)min(⋅,⋅):取最小值操作
- E[⋅]\mathbb{E}[\cdot]E[⋅]:期望算子
- 物理意义:
- 这是 PPO 在 LLM 强化学习场景中的目标函数
- 对每个 token 计算裁剪目标,然后对所有 token 取平均
- 使用 GAE 计算优势函数,需要价值网络 Vψ{V}_{\psi}Vψ
- 关键特点:
- 需要价值网络 Vψ{V}_{\psi}Vψ 估计优势,带来巨大的内存和计算负担
- 价值网络通常与策略模型规模相当,显存和计算成本约占总成本的 50%
其中At{A}_{t}At是优势函数,通过应用广义优势估计(GAE)(Schulman等人,2015)计算得到,基于奖励{r≥t}\left\{ {r}_{ \geq t}\right\}{r≥t}和学习到的价值函数Vψ{V}_{\psi }Vψ。因此,在PPO中,价值函数需要与策略模型一起训练,这会带来巨大的内存和计算负担。
此外,为了减轻奖励模型的过度优化,标准方法是在每个token的奖励中添加来自参考模型的逐token KL惩罚(Ouyang等人,2022),即
rt=rφ(q,o≤t)−βlogπθ(ot∣q,o<t)π ref (ot∣q,o<t),(2) {r}_{t} = {r}_{\varphi }\left( {q,{o}_{ \leq t}}\right) - \beta \log \frac{{\pi }_{\theta }\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }{{\pi }_{\text{ ref }}\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }, \tag{2} rt=rφ(q,o≤t)−βlogπ ref (ot∣q,o<t)πθ(ot∣q,o<t),(2)
PPO 奖励函数(带 KL 惩罚)公式 (2) 详解:
- 变量含义:
- rtr_trt:时刻 ttt 的奖励(Reward),用于计算优势函数
- rφ(q,o≤t)r_\varphi(q, o_{\leq t})rφ(q,o≤t):奖励模型(Reward Model)对问题 qqq 和输出前缀 o≤to_{\leq t}o≤t 的评分
- φ\varphiφ:奖励模型的参数
- o≤to_{\leq t}o≤t:输出中前 ttt 个 token(包括第 ttt 个 token)
- β\betaβ:KL 惩罚系数(KL Penalty Coefficient),控制 KL 惩罚的强度
- logπθ(ot∣q,o<t)πref(ot∣q,o<t)\log \frac{\pi_\theta(o_t | q, o_{<t})}{\pi_{\text{ref}}(o_t | q, o_{<t})}logπref(ot∣q,o<t)πθ(ot∣q,o<t):KL 散度的对数形式(逐 token)
- πθ(ot∣q,o<t)\pi_\theta(o_t | q, o_{<t})πθ(ot∣q,o<t):当前策略生成 token oto_tot 的概率
- πref(ot∣q,o<t)\pi_{\text{ref}}(o_t | q, o_{<t})πref(ot∣q,o<t):参考策略(Reference Policy,通常为初始 SFT 模型)生成 token oto_tot 的概率
- πref\pi_{\text{ref}}πref:参考策略,通常为初始 SFT 模型,用于防止策略偏离太远
- 物理意义:
- 奖励 = 奖励模型评分 - KL 惩罚项
- KL 惩罚项防止策略偏离参考策略太远,减轻奖励模型的过度优化
- 这是 PPO 在 LLM 强化学习中的标准做法
- 问题:
- KL 惩罚在奖励中,与优势计算混杂,调参不直观
- 需要平衡奖励模型评分和 KL 惩罚的权重
- GRPO 将 KL 惩罚独立为正则项,调参更直观
其中rφ{r}_{\varphi }rφ是奖励模型,π ref {\pi }_{\text{ ref }}π ref 是参考模型(通常为初始SFT模型),β\betaβ是KL惩罚系数。
PPO 在 LLM 强化学习中的问题:
- 价值网络负担:价值函数通常是与策略模型规模相当的另一个模型,带来巨大的内存和计算负担
- 价值函数训练困难:在LLM场景中,奖励模型通常仅对最后一个token分配奖励分数,这可能会使在每个token上都保持准确的价值函数训练变得复杂
- KL 惩罚混杂:KL 惩罚在奖励中,与优势计算混杂,调参不直观
- GRPO 的解决方案:移除价值网络,使用组内平均奖励作为基线,将 KL 惩罚独立为正则项
2.2 组相对策略优化的动机
为解决 PPO 在 LLM 强化学习中的问题,我们提出了组相对策略优化(GRPO)。GRPO 的核心思想是:
- 移除价值网络:使用组内平均奖励作为基线,无需额外的价值网络
- 组相对优势:对同一问题采样多个输出,使用组内相对比较计算优势
- 独立 KL 正则化:将 KL 惩罚从奖励中分离,作为独立正则项
这种设计使得 GRPO 在保持 PPO 稳定性的同时,显著降低了资源消耗,更适合 LLM 强化学习场景。
3 组相对策略优化
3.1 GRPO 目标函数
对于每个问题qqq,GRPO从旧策略πθ old {\pi }_{{\theta }_{\text{ old }}}πθ old 中采样一组输出{o1,o2,⋯ ,oG}\left\{ {{o}_{1},{o}_{2},\cdots ,{o}_{G}}\right\}{o1,o2,⋯,oG},然后通过最大化以下目标来优化策略模型:
JPPO(θ)=E[q∼P(Q),o∼πθold(O∣q)]1∣o∣∑t=1∣o∣min[πθ(ot∣q,o<t)πθold(ot∣q,o<t)At,clip(πθ(ot∣q,o<t)πθold(ot∣q,o<t),1−ε,1+ε)At],(1) {\mathcal{J}}_{PPO}\left( \theta \right) = \mathbb{E}\left\lbrack {q \sim P\left( Q\right) ,o \sim {\pi }_{{\theta }_{old}}\left( {O \mid q}\right) }\right\rbrack \frac{1}{\left| o\right| }\mathop{\sum }\limits_{{t = 1}}^{\left| o\right| }\min \left\lbrack {\frac{{\pi }_{\theta }\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }{{\pi }_{{\theta }_{old}}\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }{A}_{t},\operatorname{clip}\left( {\frac{{\pi }_{\theta }\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }{{\pi }_{{\theta }_{old}}\left( {{o}_{t} \mid q,{o}_{ < t}}\right) },1 - \varepsilon ,1 + \varepsilon }\right) {A}_{t}}\right\rbrack , \tag{1} JPPO(θ)=E[q∼P(Q),o∼πθold(O∣q)]∣o∣1t=1∑∣o∣min[πθold(ot∣q,o<t)πθ(ot∣q,o<t)At,clip(πθold(ot∣q,o<t)πθ(ot∣q,o<t),1−ε,1+ε)At],(1)
其中πθ{\pi }_{\theta }πθ和πθ old {\pi }_{{\theta }_{\text{ old }}}πθ old 分别是当前策略模型和旧策略模型,q,oq,oq,o是从问题数据集和旧策略πθ old {\pi }_{{\theta }_{\text{ old }}}πθ old 中采样的问题和输出。ε\varepsilonε是PPO中引入的与裁剪相关的超参数,用于稳定训练。At{A}_{t}At是优势函数,通过应用广义优势估计(GAE)(Schulman等人,2015)计算得到,基于奖励{r≥t}\left\{ {r}_{ \geq t}\right\}{r≥t}和学习到的价值函数Vψ{V}_{\psi }Vψ。因此,在PPO中,价值函数需要与策略模型一起训练,并且为了减轻奖励模型的过度优化,标准方法是在每个token的奖励中添加来自参考模型的逐token KL惩罚(Ouyang等人,2022),即
rt=rφ(q,o≤t)−βlogπθ(ot∣q,o<t)π ref (ot∣q,o<t),(2) {r}_{t} = {r}_{\varphi }\left( {q,{o}_{ \leq t}}\right) - \beta \log \frac{{\pi }_{\theta }\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }{{\pi }_{\text{ ref }}\left( {{o}_{t} \mid q,{o}_{ < t}}\right) }, \tag{2} rt=rφ(q,o≤t)−βlogπ ref (ot∣q,o<t)πθ(ot∣q,o<t),(2)
其中rφ{r}_{\varphi }rφ是奖励模型,π ref {\pi }_{\text{ ref }}π ref 是参考模型(通常为初始SFT模型),β\betaβ是KL惩罚系数。
由于PPO中使用的价值函数通常是与策略模型规模相当的另一个模型,因此会带来巨大的内存和计算负担。此外,在RL训练过程中,价值函数被用作优势计算的基线以减少方差。而在LLM场景中,奖励模型通常仅对最后一个token分配奖励分数,这可能会使在每个token上都保持准确的价值函数训练变得复杂。为解决此问题,如图4所示,我们提出了组相对策略优化(GRPO),它无需像PPO那样进行额外的价值函数近似,而是使用针对同一问题生成的多个采样输出的平均奖励作为基线。具体而言,对于每个问题qqq,GRPO从旧策略πθ old {\pi }_{{\theta }_{\text{ old }}}πθ old 中采样一组输出{o1,o2,⋯ ,oG}\left\{ {{o}_{1},{o}_{2},\cdots ,{o}_{G}}\right\}{o1,o2,⋯,oG},然后通过最大化以下目标来优化策略模型:
JGRPO(θ)=E[q∼P(Q),{oi}i=1G∼πθold(O∣q)] {\mathcal{J}}_{GRPO}\left( \theta \right) = \mathbb{E}\left\lbrack {q \sim P\left( Q\right) ,{\left\{ {o}_{i}\right\} }_{i = 1}^{G} \sim {\pi }_{{\theta }_{old}}\left( {O \mid q}\right) }\right\rbrack JGRPO(θ)=E[q∼P(Q),{oi}i=1G∼πθold(O∣q)]
1G∑i=1G1∣oi∣∑t=1∣oi∣{min[πθ(oi,t∣q,oi,<t)πθ old (oi,t∣q,oi,<t)A^i,t,clip(πθ(oi,t∣q,oi,<t)πθ old (oi,t∣q,oi,<t),1−ε,1+ε)A^i,t]−βDKL[πθ∥π ref ]},(3) \frac{1}{G}\mathop{\sum }\limits_{{i = 1}}^{G}\frac{1}{\left| {o}_{i}\right| }\mathop{\sum }\limits_{{t = 1}}^{\left| {o}_{i}\right| }\left\{ {\min \left\lbrack {\frac{{\pi }_{\theta }\left( {{o}_{i,t} \mid q,{o}_{i, < t}}\right) }{{\pi }_{{\theta }_{\text{ old }}}\left( {{o}_{i,t} \mid q,{o}_{i, < t}}\right) }{\widehat{A}}_{i,t},\operatorname{clip}\left( {\frac{{\pi }_{\theta }\left( {{o}_{i,t} \mid q,{o}_{i, < t}}\right) }{{\pi }_{{\theta }_{\text{ old }}}\left( {{o}_{i,t} \mid q,{o}_{i, < t}}\right) },1 - \varepsilon ,1 + \varepsilon }\right) {\widehat{A}}_{i,t}}\right\rbrack - \beta {\mathbb{D}}_{KL}\left\lbrack {{\pi }_{\theta }\parallel {\pi }_{\text{ ref }}}\right\rbrack }\right\} , \tag{3} G1i=1∑G∣oi∣1t=1∑∣oi∣{min[πθ old (oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)A i,t,clip(πθ old (oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t),1−ε,1+ε)A i,t]−βDKL[πθ∥π ref ]},(3)
GRPO 目标函数公式 (3) 详解:
- 变量含义:
- JGRPO(θ)\mathcal{J}_{GRPO}(\theta)JGRPO(θ):GRPO 的目标函数
- θ\thetaθ:策略模型(语言模型)的参数
- qqq:问题(Question),从问题分布 P(Q)P(Q)P(Q) 中采样
- {oi}i=1G\{o_i\}_{i=1}^G{oi}i=1G:一组输出(Group of Outputs),从旧策略 πθold(O∣q)\pi_{\theta_{old}}(O | q)πθold(O∣q) 中采样 GGG 个输出
- GGG:组大小(Group Size),通常为 4-8,平衡基线准确性和计算成本
- oio_ioi:第 iii 个输出
- ∣oi∣|o_i|∣oi∣:第 iii 个输出的长度(token 数量)
- oi,to_{i,t}oi,t:第 iii 个输出中第 ttt 个 token
- oi,<to_{i,<t}oi,<t:第 iii 个输出中第 ttt 个 token 之前的所有 token(前缀)
- πθ(oi,t∣q,oi,<t)\pi_\theta(o_{i,t} | q, o_{i,<t})πθ(oi,t∣q,oi,<t):当前策略生成 token oi,to_{i,t}oi,t 的概率
- πθold(oi,t∣q,oi,<t)\pi_{\theta_{\text{old}}}(o_{i,t} | q, o_{i,<t})πθold(oi,t∣q,oi,<t):旧策略生成 token oi,to_{i,t}oi,t 的概率
- πθ(oi,t∣q,oi,<t)πθold(oi,t∣q,oi,<t)\frac{\pi_\theta(o_{i,t} | q, o_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t} | q, o_{i,<t})}πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t):概率比(Importance Sampling Ratio)
- A^i,t\hat{A}_{i,t}A^i,t:组内相对优势(Group Relative Advantage),基于组内相对奖励计算,无需价值网络
- ε\varepsilonε:裁剪范围超参数(Clipping Range),通常为 0.1 到 0.3
- clip(⋅,1−ε,1+ε)\text{clip}(\cdot, 1-\varepsilon, 1+\varepsilon)clip(⋅,1−ε,1+ε):裁剪函数
- min(⋅,⋅)\min(\cdot, \cdot)min(⋅,⋅):取最小值操作
- β\betaβ:KL 正则化系数(KL Regularization Coefficient),独立于优势计算
- DKL[πθ∥πref]\mathbb{D}_{KL}[\pi_\theta \parallel \pi_{\text{ref}}]DKL[πθ∥πref]:KL 散度,衡量当前策略与参考策略的差异
- πref\pi_{\text{ref}}πref:参考策略(Reference Policy),通常为初始 SFT 模型
- E[⋅]\mathbb{E}[\cdot]E[⋅]:期望算子
- 物理意义:
- 第一项:裁剪目标函数(类似 PPO),使用组内相对优势 A^i,t\hat{A}_{i,t}A^i,t
- 第二项:KL 正则化项(独立于优势计算),防止策略偏离参考策略太远
- 对每个输出 iii 的每个 token ttt 计算损失,然后对所有输出和 token 取平均
- 关键特点:
- 无需价值网络:使用组内相对优势,无需额外的价值网络
- KL 独立正则:KL 惩罚独立于优势计算,调参更直观
- 组内相对基线:使用组内平均奖励作为基线,更匹配奖励模型的比较属性
- 资源高效:显存和计算成本降低约 50%
其中ε\varepsilonε和β\betaβ是超参数,A^i,t{\widehat{A}}_{i,t}A i,t是仅基于每组内输出的相对奖励计算的优势,将在以下小节中详细说明。
GRPO 目标函数详解:
- 问题:PPO 需要价值网络估计优势,在 LLM 强化学习中成本高昂
- 价值网络需要额外的显存和计算资源(约占总成本的 50%)
- 在 LLM 场景中,显存是主要瓶颈,限制模型规模
- 奖励模型通常基于比较训练,更适合相对评估而非绝对评估
- 价值网络需要学习绝对价值,与奖励模型的比较性质不匹配
- 解决方案:GRPO 使用组内相对基线替代价值网络
- 核心思想:通过组内相对基线替代价值网络,使用组内平均奖励作为基线
- 组相对优势:A^i,t=ri,t−1G∑j=1Grj,t{\widehat{A}}_{i,t} = r_{i,t} - \frac{1}{G}\sum_{j=1}^G r_{j,t}A i,t=ri,t−G1∑j=1Grj,t,基于组内相对奖励计算
- 公式:优势 = 当前输出奖励 - 组内平均奖励
- 组大小 GGG:通常 4-8,平衡基线准确性和计算成本
- 裁剪机制:
- 类似 PPO,通过裁剪概率比限制策略更新幅度
- 防止策略更新过大,保证训练稳定性
- 裁剪范围:[1−ϵ,1+ϵ][1-\epsilon, 1+\epsilon][1−ϵ,1+ϵ],通常 ϵ=0.2\epsilon = 0.2ϵ=0.2
- KL 独立正则:
- 将 KL 惩罚从奖励中分离,作为独立正则项,调参更直观
- 与 PPO 不同,GRPO 的 KL 惩罚是独立的,不参与优势计算
- KL 系数 β\betaβ 可独立调整,无需考虑与奖励的平衡
- 优势:
- 资源效率:无需价值网络,显存和计算成本降低约 50%
- 理论合理性:组基线更匹配奖励模型的比较属性,理论上更合理
- 调参简单:KL 惩罚独立,调参更直观,无需平衡奖励和 KL 的权重
- 实现简单:无需额外的价值网络,实现更简单
- 与 PPO 的对比:
- PPO:使用价值网络估计优势,需要额外网络,成本高
- GRPO:使用组内相对基线,无需价值网络,成本低
- PPO:优势估计更准确,但需要额外资源
- GRPO:优势估计基于相对比较,更适合奖励模型场景
- 适用场景:
- LLM 强化学习,显存受限的场景
- 奖励模型基于比较训练的场景
- 需要快速迭代和实验的场景
- 项目对应:
src/grpo.py中的GRPOAgent.update()方法实现了此目标函数,使用组内平均奖励作为基线
GRPO利用组相对方式计算优势,这与奖励模型的比较性质非常契合,因为奖励模型通常在同一问题的输出比较数据集上训练。另请注意,GRPO没有在奖励中添加KL惩罚,而是通过直接将训练策略与参考策略之间的KL散度添加到损失中来进行正则化,避免了A^i,t{\widehat{A}}_{i,t}A i,t计算的复杂化。
与 PPO 中使用的 KL 惩罚项不同,我们使用以下无偏估计量估计KL散度(Schulman,2020):
DKL[πθ∥π ref ]=π ref (oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)−logπ ref (oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)−1,(4) {\mathbb{D}}_{KL}\left\lbrack {{\pi }_{\theta }\parallel {\pi }_{\text{ ref }}}\right\rbrack = \frac{{\pi }_{\text{ ref }}\left( {{o}_{i,t} \mid q,{o}_{i, < t}}\right) }{{\pi }_{\theta }\left( {{o}_{i,t} \mid q,{o}_{i, < t}}\right) } - \log \frac{{\pi }_{\text{ ref }}\left( {{o}_{i,t} \mid q,{o}_{i, < t}}\right) }{{\pi }_{\theta }\left( {{o}_{i,t} \mid q,{o}_{i, < t}}\right) } - 1, \tag{4} DKL[πθ∥π ref ]=πθ(oi,t∣q,oi,<t)π ref (oi,t∣q,oi,<t)−logπθ(oi,t∣q,oi,<t)π ref (oi,t∣q,oi,<t)−1,(4)
KL 散度无偏估计量公式 (4) 详解:
- 变量含义:
- DKL[πθ∥πref]\mathbb{D}_{KL}[\pi_\theta \parallel \pi_{\text{ref}}]DKL[πθ∥πref]:KL 散度(Kullback-Leibler Divergence),衡量当前策略 πθ\pi_\thetaπθ 与参考策略 πref\pi_{\text{ref}}πref 的差异
- πref(oi,t∣q,oi,<t)\pi_{\text{ref}}(o_{i,t} | q, o_{i,<t})πref(oi,t∣q,oi,<t):参考策略在给定问题 qqq 和前缀 oi,<to_{i,<t}oi,<t 下生成 token oi,to_{i,t}oi,t 的概率
- πθ(oi,t∣q,oi,<t)\pi_\theta(o_{i,t} | q, o_{i,<t})πθ(oi,t∣q,oi,<t):当前策略在给定问题 qqq 和前缀 oi,<to_{i,<t}oi,<t 下生成 token oi,to_{i,t}oi,t 的概率
- πref(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)\frac{\pi_{\text{ref}}(o_{i,t} | q, o_{i,<t})}{\pi_\theta(o_{i,t} | q, o_{i,<t})}πθ(oi,t∣q,oi,<t)πref(oi,t∣q,oi,<t):概率比(Reference to Current Policy Ratio)
- logπref(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)\log \frac{\pi_{\text{ref}}(o_{i,t} | q, o_{i,<t})}{\pi_\theta(o_{i,t} | q, o_{i,<t})}logπθ(oi,t∣q,oi,<t)πref(oi,t∣q,oi,<t):对数概率比
- 物理意义:
- 这是 KL 散度的无偏估计量(Unbiased Estimator)
- 标准 KL 散度:KL(πθ∣∣πref)=∑aπθ(a)logπθ(a)πref(a)\text{KL}(\pi_\theta || \pi_{\text{ref}}) = \sum_a \pi_\theta(a) \log \frac{\pi_\theta(a)}{\pi_{\text{ref}}(a)}KL(πθ∣∣πref)=∑aπθ(a)logπref(a)πθ(a)
- 此公式保证 KL 散度估计为正值,避免负值导致训练不稳定
- 关键特点:
- 无偏估计:在期望下等于真实 KL 散度
- 正值保证:保证估计值为正,避免负值问题
- 独立正则:KL 惩罚独立于优势计算,调参更直观
保证其为正值。
3.2 组内相对基线计算
GRPO 的核心创新是使用组内平均奖励作为基线,替代价值网络。对于每个问题qqq,从旧策略πθ old {\pi }_{{\theta }_{\text{ old }}}πθ old 中采样一组输出{o1,o2,⋯ ,oG}\left\{ {{o}_{1},{o}_{2},\cdots ,{o}_{G}}\right\}{o1,o2,⋯,oG},然后使用奖励模型对输出进行评分,得到对应的GGG个奖励r={r1,r2,⋯ ,rG}\mathbf{r} = \left\{ {{r}_{1},{r}_{2},\cdots ,{r}_{G}}\right\}r={r1,r2,⋯,rG}。
组内相对基线:
- 组内平均奖励:rˉ=1G∑i=1Gri\bar{r} = \frac{1}{G}\sum_{i=1}^{G} r_irˉ=G1∑i=1Gri
- 组内相对优势:A^i=ri−rˉ{\widehat{A}}_{i} = r_i - \bar{r}A i=ri−rˉ(结果监督)或 A^i,t=∑j≥tr~i(j){\widehat{A}}_{i,t} = \sum_{j \geq t} \tilde{r}_i^{(j)}A i,t=∑j≥tr~i(j)(过程监督)
- 优势归一化:A^i=A^i−mean(A)std(A){\widehat{A}}_{i} = \frac{{\widehat{A}}_{i} - \text{mean}(\mathbf{A})}{\text{std}(\mathbf{A})}A i=std(A)A i−mean(A)
组内相对基线的优势:
- 无需价值网络:使用组内平均奖励作为基线,无需额外的价值网络
- 匹配奖励模型:奖励模型通常在比较数据集上训练,组基线更匹配
- 相对比较稳定:同一问题的多个输出之间的相对比较更稳定
- 项目对应:
src/grpo.py中的_compute_group_returns_adv()方法实现了组内相对基线计算
3.3 结果监督与过程监督
结果监督(末尾一次性给分):
- 对于每个问题qqq,从旧策略模型πθ old {\pi }_{{\theta }_{\text{ old }}}πθ old 中采样一组输出{o1,o2,⋯ ,oG}\left\{ {{o}_{1},{o}_{2},\cdots ,{o}_{G}}\right\}{o1,o2,⋯,oG}
- 使用奖励模型对输出进行评分,得到对应的GGG个奖励r={r1,r2,⋯ ,rG}\mathbf{r} = \left\{ {{r}_{1},{r}_{2},\cdots ,{r}_{G}}\right\}r={r1,r2,⋯,rG}
- 通过减去组平均值并除以组标准差对这些奖励进行归一化
- 结果监督在每个输出oi{o}_{i}oi的末尾提供归一化奖励,并将输出中所有标记的优势A^i,t{\widehat{A}}_{i,t}A i,t设为该归一化奖励,即A^i,t=r~i=ri−mean(r)std(r){\widehat{A}}_{i,t} = {\widetilde{r}}_{i} = \frac{{r}_{i} - \operatorname{mean}\left( \mathbf{r}\right) }{\operatorname{std}\left( \mathbf{r}\right) }A i,t=r i=std(r)ri−mean(r)
过程监督(逐步给分):
- 过程监督对应"逐步给分",在复杂数学推理中能提供更细粒度信号
- 使用过程奖励模型对输出的每个步骤进行评分,得到相应的奖励:R={{r1index(1),⋯ ,r1index(K1)},⋯ ,{rGindex(1),⋯ ,rGindex(KG)}}\mathbf{R} = \left\{ {\left\{ {{r}_{1}^{\operatorname{index}\left( 1\right) },\cdots ,{r}_{1}^{\operatorname{index}\left( {K}_{1}\right) }}\right\} ,\cdots ,\left\{ {{r}_{G}^{\operatorname{index}\left( 1\right) },\cdots ,{r}_{G}^{\operatorname{index}\left( {K}_{G}\right) }}\right\} }\right\}R={{r1index(1),⋯,r1index(K1)},⋯,{rGindex(1),⋯,rGindex(KG)}}
- 同样使用平均值和标准差对这些奖励进行归一化
- 过程监督将每个标记的优势计算为后续步骤的归一化奖励之和,即A^i,t=∑ index (j)≥tr~i index (j){\widehat{A}}_{i,t} = \mathop{\sum }\limits_{{\text{ index }\left( j\right) \geq t}}{\widetilde{r}}_{i}^{\text{ index }\left( j\right) }A i,t= index (j)≥t∑r i index (j)
结果监督 vs 过程监督:
- 结果监督:简单,适用于大多数任务,但信号较粗粒度
- 过程监督:复杂,需要过程奖励模型,但信号更细粒度,适用于复杂推理任务
- 项目对应:车辆控制任务通常使用结果监督(episode 结束时的总奖励)
4 算法
算法1 组相对策略优化(GRPO)
输入:初始策略模型πθinit{\pi }_{{\theta }_{\text{init}}}πθinit,奖励模型rφ{r}_{\varphi }rφ(可选),任务提示集D\mathcal{D}D,超参数ε,β,μ\varepsilon ,\beta ,\muε,β,μ
输出:更新后的策略模型πθ{\pi }_{\theta }πθ
- 初始化策略模型:πθ←πθinit{\pi }_{\theta } \leftarrow {\pi }_{{\theta }_{\text{init}}}πθ←πθinit。
- 对迭代轮次 1…I1 \ldots I1…I:
- 设参考模型:πref←πθ{\pi }_{\text{ref}} \leftarrow {\pi }_{\theta }πref←πθ。
- 对 step 1…M1 \ldots M1…M:
- 从D\mathcal{D}D采样批次Db{\mathcal{D}}_{b}Db。
- 更新旧策略:πθold←πθ{\pi }_{{\theta }_{\text{old}}} \leftarrow {\pi }_{\theta }πθold←πθ。
- 对每个q∈Dbq \in {\mathcal{D}}_{b}q∈Db采样GGG个输出{oi}i=1G∼πθold(⋅∣q){\left\{ {o}_{i}\right\} }_{i=1}^{G} \sim {\pi }_{{\theta }_{\text{old}}}(\cdot \mid q){oi}i=1G∼πθold(⋅∣q)。
- 用rφ{r}_{\varphi }rφ(或环境)计算每个输出的奖励{ri}i=1G{\left\{ {r}_{i}\right\} }_{i=1}^{G}{ri}i=1G。
- 基于组相对奖励计算每个token的A^i,t{\widehat{A}}_{i,t}A i,t。
- 对GRPO内循环 1…μ1 \ldots \mu1…μ:最大化公式(3)更新πθ{\pi }_{\theta }πθ。
- (可选)使用重放机制持续训练更新rφ{r}_{\varphi }rφ(含10%历史数据)。
GRPO 相对 PPO 的三条核心收益:
- 无价值网络:移除价值模型,显著降低显存/计算占用,流程更轻量
- 组基线优势:同题多样本组均值作基线,优势估计与奖励模型的比较属性天然匹配,稳定性更好
- KL 独立正则:KL惩罚从奖励拆出为独立正则,避免与优势混杂,调参更直接
GRPO vs PPO 详细对比:
特性 PPO GRPO 价值网络 需要(与策略网络规模相当) 不需要 显存占用 高(策略+价值网络) 低(仅策略网络) 计算成本 高(需要训练价值网络) 低(无需价值网络) 基线估计 价值网络 V(s)V(s)V(s) 组内平均奖励 rˉ\bar{r}rˉ 优势计算 GAE(基于价值网络) 组相对奖励(基于组均值) KL 惩罚 在奖励中(逐 token) 独立正则项 适用场景 通用 RL 任务 LLM 强化学习(数学推理等) GRPO 的优势:
- 资源效率:无需价值网络,显存和计算成本降低约 50%
- 匹配奖励模型:奖励模型通常在比较数据集上训练,组基线更匹配
- 实现简单:无需训练价值网络,实现更简单
- 调参容易:KL 惩罚独立,调参更直观
GRPO 的局限性:
- 需要多样本:每个问题需要采样多个输出(通常 G=64G=64G=64),计算成本增加
- 适用场景有限:主要适用于 LLM 强化学习,不适用于通用 RL 任务
- 基线估计:组均值基线可能不如价值网络准确
项目对应:GRPO 主要用于 LLM 强化学习,车辆控制任务更适合使用 PPO 或 TRPO
RL 部分要点回顾(速览)
- 选择GRPO:移除价值网络、组基线优势、KL独立正则,兼顾稳定与资源友好。
- 训练设定:CoT数据约144K题,G=64G=64G=64多样本,KL系数0.04,单轮探索后更新一次。
- 成果:在GSM8K/MATH上显著超越同规模开源模型,并在更大模型上保持竞争力。
9 总结与理解要点
9.1 GRPO 核心思想总结
GRPO 的核心创新:
- 无价值网络:移除价值模型,使用组均值作为基线,降低资源消耗
- 组相对优势:基于同一问题的多个输出计算相对优势,与奖励模型的比较属性匹配
- KL 独立正则:将 KL 惩罚从奖励中分离,作为独立正则项,调参更直观
- 资源高效:相比 PPO,显存和计算成本降低约 50%
为什么 GRPO 能工作:
- 组基线匹配:奖励模型通常在比较数据集上训练,组均值基线更匹配
- 相对优势:同一问题的多个输出之间的相对比较更稳定
- 资源效率:无需价值网络,降低训练成本
- KL 独立:KL 惩罚独立于优势计算,避免相互干扰
9.2 与项目实现的对应关系
算法组件对应:
- 策略网络 →
src/grpo.py中的PolicyNet类(128→64→action_dim,LayerNorm + ReLU) - GRPO 智能体 →
src/grpo.py中的GRPOAgent类(完整的 GRPO 实现) - 组内相对基线 →
GRPOAgent._compute_group_baseline()方法(组内平均回报) - 组内 KL 正则化 →
GRPOAgent.update()方法中的 KL 散度计算 - 多轮更新 →
GRPOAgent.update()方法中的for epoch in range(GRPO_EPOCHS)循环
关键代码位置:
- 组内相对基线计算:
# src/grpo.py 中的 _compute_group_baseline() 方法 # 将轨迹分成组,计算组内平均回报作为基线 group_baseline = returns.mean(dim=0) # 组内平均回报 advantages = returns - group_baseline # 相对优势 - 组内 KL 正则化(公式 3):
# src/grpo.py 中的 update() 方法 # 计算每个组的 KL 散度 kl_divs = torch.distributions.kl.kl_divergence(old_dist, dist).mean(dim=1) # 应用 KL 正则化到策略损失 policy_loss = -(ratio * advantages).mean() + config.GRPO_KL_COEF * kl_divs.mean() - config.GRPO_ENTROPY_COEF * entropy - 裁剪替代目标(类似 PPO):
# src/grpo.py 中的 update() 方法 ratio = torch.exp(log_probs - old_log_probs) surr1 = ratio * advantages surr2 = torch.clamp(ratio, 1.0 - config.PPO_CLIP_EPS, 1.0 + config.PPO_CLIP_EPS) * advantages clipped_surrogate = torch.min(surr1, surr2).mean()
超参数对应:
- 策略学习率 →
config.py中的GRPO_POLICY_LR(默认 3e-4) - 训练轮数 →
config.py中的GRPO_EPOCHS(默认 4 轮) - KL 正则化系数 →
config.py中的GRPO_KL_COEF(默认 0.005) - 熵正则系数 →
config.py中的GRPO_ENTROPY_COEF(默认 1e-3) - 梯度裁剪阈值 →
config.py中的GRPO_MAX_GRAD_NORM(默认 0.5) - 裁剪参数 ϵ\epsilonϵ →
config.py中的PPO_CLIP_EPS(默认 0.2,与 PPO 共享)
项目应用场景:
- 注意:GRPO 主要用于 LLM 强化学习(数学推理、文本生成等),车辆控制任务更适合使用 PPO 或 TRPO
- 车辆路径跟踪任务:虽然项目实现了 GRPO,但更适合使用 PPO/TRPO(通用 RL 任务)
- 状态空间:横向误差、航向误差(2 维归一化状态)
- 奖励函数:基于跟踪误差和控制平滑性(贴线奖励 + 朝向奖励 - 转向惩罚)
- 训练回合数:默认 3000 回合(
config.py中的EPISODES_MAP["grpo"]) - 优势:无需价值网络,资源消耗低,但需要多样本(组采样)
与 PPO 的区别:
- PPO:需要价值网络估计基线,使用 GAE 计算优势
- GRPO:无需价值网络,使用组内平均回报作为基线,组相对优势
- 资源消耗:GRPO 显存和计算成本降低约 50%(无需价值网络)
- 适用场景:GRPO 主要用于 LLM RL,PPO 用于通用 RL 任务
9.3 关键设计决策的理解
为什么移除价值网络?
- LLM 强化学习中,奖励模型通常只对最后一个 token 分配奖励
- 在每个 token 上训练准确的价值函数很困难
- 组均值基线更简单且有效,与奖励模型的比较属性匹配
为什么使用组相对优势?
- 奖励模型通常在比较数据集上训练,更适合相对比较
- 同一问题的多个输出之间的相对比较更稳定
- 组均值作为基线,减少方差,提高稳定性
为什么 KL 惩罚要独立?
- PPO 中 KL 惩罚在奖励中,与优势计算混杂
- GRPO 将 KL 惩罚作为独立正则项,调参更直观
- 避免 KL 惩罚影响优势计算的准确性
9.4 GRPO vs PPO vs TRPO 对比
| 特性 | GRPO | PPO | TRPO |
|---|---|---|---|
| 价值网络 | 不需要 | 需要 | 需要 |
| 资源消耗 | 低 | 高 | 高 |
| 适用场景 | LLM RL | 通用 RL | 通用 RL |
| 基线估计 | 组均值 | 价值网络 | 价值网络 |
| 优势计算 | 组相对 | GAE | GAE |
| KL 处理 | 独立正则 | 在奖励中 | 约束 |
| 实现复杂度 | 中等 | 简单 | 复杂 |
9.5 常见问题与解答
Q1: GRPO 与 PPO 的主要区别是什么?
- PPO:需要价值网络,使用 GAE 计算优势
- GRPO:无需价值网络,使用组均值作为基线,组相对优势
- 资源消耗:GRPO 显存和计算成本降低约 50%
Q2: 采样数量 GGG 如何选择?
- 通常 G=32G=32G=32 到 128128128,G=64G=64G=64 是最常用的值
- GGG 越大,基线估计越准确,但计算成本越高
- GGG 越小,计算成本越低,但基线估计可能不准确
- 建议从 G=64G=64G=64 开始,根据资源情况调整
Q3: GRPO 适用于哪些任务?
- 适用:LLM 强化学习(数学推理、文本生成、对话系统等)
- 不适用:通用 RL 任务(游戏、机器人控制等)
- 原因:GRPO 依赖奖励模型的比较属性,需要多样本
Q4: 为什么 GRPO 在数学推理任务上表现好?
- 数学推理任务中,奖励模型通常只对最终答案评分
- 组相对优势更适合这种场景
- 组均值基线更简单且有效
Q5: GRPO 的训练成本如何?
- 显存:相比 PPO 降低约 50%(无需价值网络)
- 计算:虽然需要多样本,但总体成本仍低于 PPO
- 时间:训练时间取决于采样数量 GGG 和批次大小
9.6 实践建议
训练技巧:
- 采样数量:从 G=64G=64G=64 开始,根据资源情况调整
- KL 系数:从 β=0.04\beta=0.04β=0.04 开始,如果策略变化过大则增大
- 批次大小:通常 512-2048,取决于显存
- 学习率:通常 10−610^{-6}10−6 到 10−510^{-5}10−5,从默认值开始
调参建议:
- 采样数量 GGG:越大越好,但受资源限制
- KL 系数 β\betaβ:如果策略变化过大则增大,如果训练缓慢则减小
- 裁剪参数 ϵ\epsilonϵ:通常 0.1-0.3,默认 0.2
- 学习率:从 10−610^{-6}10−6 开始,根据训练情况调整
常见问题:
- 训练不稳定:减小学习率、增大 KL 系数、减小采样数量
- 不收敛:检查奖励模型、增加采样数量、调整网络结构
- 资源不足:减小采样数量、减小批次大小、使用梯度累积
9.7 算法选择指南
何时选择 GRPO?
- ✅ 适用场景:
- LLM 强化学习(数学推理、文本生成、对话系统)
- 需要资源高效的场景(无需价值网络)
- 奖励模型基于比较的场景
- 需要多样本评估的场景
- ❌ 不适用场景:
- 通用 RL 任务(应使用 PPO/TRPO)
- 需要价值网络的场景(GRPO 无价值网络)
- 单样本评估的场景(GRPO 需要多样本)
- 项目对应:车辆路径跟踪任务不适合 GRPO,应使用 PPO 或 TRPO
- 注意:虽然项目实现了 GRPO(
src/grpo.py),但 GRPO 主要用于 LLM 强化学习 - 车辆控制任务更适合使用 PPO 或 TRPO(通用 RL 任务)
- 动作空间:17 个预定义转向角(
config.py中的ACTION_SPACE_DEG) - 状态空间:横向误差、航向误差(2 维归一化状态)
- 奖励函数:基于跟踪误差和控制平滑性
- 训练流程:
main.py中的train()函数,每 100 回合打印一次平均奖励 - 模型保存:
model/grpo_autodrive.pth(仅 policy 网络权重,无价值网络) - 建议:对于车辆控制任务,优先使用 PPO 或 TRPO,GRPO 主要用于 LLM RL 场景
- 注意:虽然项目实现了 GRPO(
与其他算法的选择建议:
- GRPO vs PPO:LLM RL 用 GRPO,通用 RL 用 PPO
- GRPO vs TRPO:LLM RL 用 GRPO,通用 RL 用 TRPO
- GRPO vs DQN/DDPG:LLM RL 用 GRPO,游戏/机器人控制用 DQN/DDPG
- GRPO vs 标准策略梯度:需要稳定训练用 GRPO,简单任务用标准策略梯度
9.8 性能优化技巧
提高训练速度:
- 减少采样数量:在资源允许的情况下减少 GGG
- 批量大小:增大批量大小可以提高 GPU 利用率
- 并行采样:使用多线程或异步采样输出
- 梯度累积:使用梯度累积减少显存占用
提高样本效率:
- 增加采样数量:更大的 GGG 提供更准确的基线
- 优化奖励模型:提高奖励模型的准确性
- 网络容量:适当增加网络容量,提高表达能力
- 迭代训练:使用迭代强化学习持续改进
提高稳定性:
- KL 系数:确保 KL 系数 β\betaβ 合适
- 裁剪参数:确保裁剪参数 ϵ\epsilonϵ 合适
- 学习率:使用较小的学习率(通常 10−610^{-6}10−6)
- 网络初始化:使用合适的初始化方法
减少资源消耗:
- 采样数量:在性能和资源之间平衡 GGG
- 批次大小:减小批次大小减少显存占用
- 梯度累积:使用梯度累积模拟大批次
- 混合精度:使用 FP16 减少显存占用
其中A^i,t{\widehat{A}}_{i,t}A i,t基于群体奖励分数计算。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)