相对策略优化算法(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}ot:输出中前 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})πθ(otq,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,ot):奖励模型(Reward Model)对问题 qqq 和输出前缀 o≤to_{\leq t}ot 的评分
    • φ\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ˉ=G1i=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[qP(Q),oπθold(Oq)]o1t=1omin[πθold(otq,o<t)πθ(otq,o<t)At,clip(πθold(otq,o<t)πθ(otq,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(Oq) 中采样
    • ∣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})πθ(otq,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(otq,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(otq,o<t)πθ(otq,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\}{rt}和学习到的价值函数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,ot)βlogπ ref (otq,o<t)πθ(otq,o<t),(2)

PPO 奖励函数(带 KL 惩罚)公式 (2) 详解

  • 变量含义
    • rtr_trt:时刻 ttt 的奖励(Reward),用于计算优势函数
    • rφ(q,o≤t)r_\varphi(q, o_{\leq t})rφ(q,ot):奖励模型(Reward Model)对问题 qqq 和输出前缀 o≤to_{\leq t}ot 的评分
      • φ\varphiφ:奖励模型的参数
      • o≤to_{\leq t}ot:输出中前 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(otq,o<t)πθ(otq,o<t):KL 散度的对数形式(逐 token)
      • πθ(ot∣q,o<t)\pi_\theta(o_t | q, o_{<t})πθ(otq,o<t):当前策略生成 token oto_tot 的概率
      • πref(ot∣q,o<t)\pi_{\text{ref}}(o_t | q, o_{<t})πref(otq,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 的核心思想是:

  1. 移除价值网络:使用组内平均奖励作为基线,无需额外的价值网络
  2. 组相对优势:对同一问题采样多个输出,使用组内相对比较计算优势
  3. 独立 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[qP(Q),oπθold(Oq)]o1t=1omin[πθold(otq,o<t)πθ(otq,o<t)At,clip(πθold(otq,o<t)πθ(otq,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\}{rt}和学习到的价值函数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,ot)βlogπ ref (otq,o<t)πθ(otq,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[qP(Q),{oi}i=1Gπθold(Oq)]

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=1Goi1t=1oi{min[πθ old (oi,tq,oi,<t)πθ(oi,tq,oi,<t)A i,t,clip(πθ old (oi,tq,oi,<t)πθ(oi,tq,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(Oq) 中采样 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,tq,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,tq,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,tq,oi,<t)πθ(oi,tq,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,tG1j=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,tq,oi,<t)π ref (oi,tq,oi,<t)logπθ(oi,tq,oi,<t)π ref (oi,tq,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,tq,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,tq,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,tq,oi,<t)πref(oi,tq,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,tq,oi,<t)πref(oi,tq,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ˉ=G1i=1Gri
  • 组内相对优势:A^i=ri−rˉ{\widehat{A}}_{i} = r_i - \bar{r}A i=rirˉ(结果监督)或 A^i,t=∑j≥tr~i(j){\widehat{A}}_{i,t} = \sum_{j \geq t} \tilde{r}_i^{(j)}A i,t=jtr~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 imean(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)rimean(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)tr 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 }πθ

  1. 初始化策略模型:πθ←πθinit{\pi }_{\theta } \leftarrow {\pi }_{{\theta }_{\text{init}}}πθπθinit
  2. 对迭代轮次 1…I1 \ldots I1I
    1. 设参考模型:πref←πθ{\pi }_{\text{ref}} \leftarrow {\pi }_{\theta }πrefπθ
    2. 对 step 1…M1 \ldots M1M
      • D\mathcal{D}D采样批次Db{\mathcal{D}}_{b}Db
      • 更新旧策略:πθold←πθ{\pi }_{{\theta }_{\text{old}}} \leftarrow {\pi }_{\theta }πθoldπθ
      • 对每个q∈Dbq \in {\mathcal{D}}_{b}qDb采样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
    3. 对GRPO内循环 1…μ1 \ldots \mu1μ:最大化公式(3)更新πθ{\pi }_{\theta }πθ
    4. (可选)使用重放机制持续训练更新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 的优势

  1. 资源效率:无需价值网络,显存和计算成本降低约 50%
  2. 匹配奖励模型:奖励模型通常在比较数据集上训练,组基线更匹配
  3. 实现简单:无需训练价值网络,实现更简单
  4. 调参容易:KL 惩罚独立,调参更直观

GRPO 的局限性

  1. 需要多样本:每个问题需要采样多个输出(通常 G=64G=64G=64),计算成本增加
  2. 适用场景有限:主要适用于 LLM 强化学习,不适用于通用 RL 任务
  3. 基线估计:组均值基线可能不如价值网络准确

项目对应:GRPO 主要用于 LLM 强化学习,车辆控制任务更适合使用 PPO 或 TRPO

RL 部分要点回顾(速览)

  • 选择GRPO:移除价值网络、组基线优势、KL独立正则,兼顾稳定与资源友好。
  • 训练设定:CoT数据约144K题,G=64G=64G=64多样本,KL系数0.04,单轮探索后更新一次。
  • 成果:在GSM8K/MATH上显著超越同规模开源模型,并在更大模型上保持竞争力。

9 总结与理解要点

9.1 GRPO 核心思想总结

GRPO 的核心创新

  1. 无价值网络:移除价值模型,使用组均值作为基线,降低资源消耗
  2. 组相对优势:基于同一问题的多个输出计算相对优势,与奖励模型的比较属性匹配
  3. KL 独立正则:将 KL 惩罚从奖励中分离,作为独立正则项,调参更直观
  4. 资源高效:相比 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=32128128128G=64G=64G=64 是最常用的值
  • GGG 越大,基线估计越准确,但计算成本越高
  • GGG 越小,计算成本越低,但基线估计可能不准确
  • 建议从 G=64G=64G=64 开始,根据资源情况调整

Q3: GRPO 适用于哪些任务?

  • 适用:LLM 强化学习(数学推理、文本生成、对话系统等)
  • 不适用:通用 RL 任务(游戏、机器人控制等)
  • 原因:GRPO 依赖奖励模型的比较属性,需要多样本

Q4: 为什么 GRPO 在数学推理任务上表现好?

  • 数学推理任务中,奖励模型通常只对最终答案评分
  • 组相对优势更适合这种场景
  • 组均值基线更简单且有效

Q5: GRPO 的训练成本如何?

  • 显存:相比 PPO 降低约 50%(无需价值网络)
  • 计算:虽然需要多样本,但总体成本仍低于 PPO
  • 时间:训练时间取决于采样数量 GGG 和批次大小

9.6 实践建议

训练技巧

  1. 采样数量:从 G=64G=64G=64 开始,根据资源情况调整
  2. KL 系数:从 β=0.04\beta=0.04β=0.04 开始,如果策略变化过大则增大
  3. 批次大小:通常 512-2048,取决于显存
  4. 学习率:通常 10−610^{-6}10610−510^{-5}105,从默认值开始

调参建议

  1. 采样数量 GGG:越大越好,但受资源限制
  2. KL 系数 β\betaβ:如果策略变化过大则增大,如果训练缓慢则减小
  3. 裁剪参数 ϵ\epsilonϵ:通常 0.1-0.3,默认 0.2
  4. 学习率:从 10−610^{-6}106 开始,根据训练情况调整

常见问题

  1. 训练不稳定:减小学习率、增大 KL 系数、减小采样数量
  2. 不收敛:检查奖励模型、增加采样数量、调整网络结构
  3. 资源不足:减小采样数量、减小批次大小、使用梯度累积

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 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 性能优化技巧

提高训练速度

  1. 减少采样数量:在资源允许的情况下减少 GGG
  2. 批量大小:增大批量大小可以提高 GPU 利用率
  3. 并行采样:使用多线程或异步采样输出
  4. 梯度累积:使用梯度累积减少显存占用

提高样本效率

  1. 增加采样数量:更大的 GGG 提供更准确的基线
  2. 优化奖励模型:提高奖励模型的准确性
  3. 网络容量:适当增加网络容量,提高表达能力
  4. 迭代训练:使用迭代强化学习持续改进

提高稳定性

  1. KL 系数:确保 KL 系数 β\betaβ 合适
  2. 裁剪参数:确保裁剪参数 ϵ\epsilonϵ 合适
  3. 学习率:使用较小的学习率(通常 10−610^{-6}106
  4. 网络初始化:使用合适的初始化方法

减少资源消耗

  1. 采样数量:在性能和资源之间平衡 GGG
  2. 批次大小:减小批次大小减少显存占用
  3. 梯度累积:使用梯度累积模拟大批次
  4. 混合精度:使用 FP16 减少显存占用

其中A^i,t{\widehat{A}}_{i,t}A i,t基于群体奖励分数计算。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐