一文读懂GRPO算法&热门变体演化
LLM后训练算法梳理(2)-GRPO算法
在上一篇 PPO 算法中(https://zhuanlan.zhihu.com/p/2076432345247245043),我们已经介绍过,PPO 在训练 LLM 时主要需要维护 actor 和 critic 两个需要训练参数的网络。其中 actor 就是我们最终希望优化的语言模型,而 critic 则负责预测每一个状态的价值函数 \(V_\phi(s_t)\),并进一步通过 TD error 和 GAE 构造 advantage。
简单来说,PPO 中 advantage 的来源可以概括成
critic 的存在能够为不同 token 提供更加细粒度的 credit assignment,但代价也非常明显:对于一个参数规模达到数十亿甚至数百亿的 LLM 来说,critic 通常同样需要一个规模很大的 Transformer backbone。也就是说,为了训练一个 policy,我们还需要额外维护和训练一个 value model。
GRPO(Group Relative Policy Optimization)最早由 DeepSeekMath 提出,它最核心的修改就是:直接删除 critic,通过同一个问题下多次 rollout 得到的相对 reward 来估计 advantage。
1. GRPO算法
对于一个问题 \(q\),GRPO 首先使用 old policy \(\pi_{\theta_{\text{old}}}\) 采样 \(G\) 个回答:
然后分别计算每个回答的 reward:
在最常见的 outcome supervision 场景下,GRPO 使用这一组 reward 的均值和标准差对每个回答进行标准化:
这里的 \(\hat A_i\) 就取代了 PPO 中通过 critic 和 GAE 得到的 advantage。
举一个最简单的例子。假设对一道数学题 rollout 4 次,rule-based verifier 得到 reward
那么均值为 \(0.5\),前两个正确回答得到正 advantage,后两个错误回答得到负 advantage。模型接下来就会提升正确回答中 token 的生成概率,并降低错误回答中 token 的生成概率。
因此 GRPO 的 advantage 实际上估计的是的是:
“这个回答,相比当前模型对同一道题生成的其他回答,到底表现得更好还是更差?”
GRPO在这种情况下,一个完整 response \(o_i\) 最终只得到一个 reward,因此同一个 response 中的所有 token 通常共享同一个 group-relative advantage:
这意味着 GRPO 的 credit assignment 相比 PPO+GAE 更粗粒度。它并不知道“究竟是哪一个 token 导致数学题最终算对了”,而只是认为:既然整个 response 比同组其他 response 更好,那么这个 response 中采样出来的 token 整体都应该受到正向强化。
但这并不意味着所有 token 最后的梯度完全一样,因为每个 token 仍然具有不同的生成概率、importance ratio 和 \(\nabla_\theta\log\pi_\theta\)。
2. GRPO: 优化目标
GRPO 并没有抛弃 PPO 的 clipping 机制,而是基本继承了 PPO-Clip 的结构。
对于第 \(i\) 个 response 的第 \(t\) 个 token,定义 importance ratio:
它和 PPO 中的 ratio 完全是同一个含义:
- \(\pi_{\theta_{\text{old}}}\) 是生成当前这批 rollout 数据的策略;
- \(\pi_\theta\) 是当前正在进行梯度更新的策略;
- \(r_{i,t}>1\) 表示 current policy 提升了这个 token 的概率;
- \(r_{i,t}<1\) 表示 current policy 降低了这个 token 的概率。
原始 GRPO 的 clipped objective 可以写为
其中 clipping 部分和我们在 PPO 中已经讨论过的逻辑完全一致。
当 \(\hat A_i>0\) 时,说明第 \(i\) 个 response 是一个相对较好的回答,因此希望提升其中 token 的概率;但是如果某个 token 已经满足
则说明它的概率相对于 rollout 时已经被提升很多,这个 sample 不再提供继续增大其概率的梯度。
当 \(\hat A_i<0\) 时,说明这个回答相对较差,因此希望降低其中 token 的生成概率;但如果
则说明其概率已经被降低很多,同样停止继续沿这个方向更新。
3. GRPO完整训练流程
GRPO 的整个训练过程可以概括为一个外层 reference 更新循环,以及一个内层 rollout-policy update 循环。
首先,在每一个 outer iteration 开始时,将当前 policy 保存为 reference policy:
在接下来的这一整个 outer iteration 中,\(\pi_{\text{ref}}\) 保持固定,用于计算 KL regularization,限制当前 policy 不要偏离这一阶段开始时的模型太远。
随后进入内部的 GRPO 训练循环。
- 首先,从训练集中采样一个 batch 的 prompts:
- 将当前 policy 保存为 old policy用于进行rollout:
- 对于每一个 prompt,使用 old policy rollout \(G\) 次(这里的 \(\pi_{\text{old}}\) 就是真正生成当前这批训练数据的策略,因此在之后计算 importance ratio 时,它会作为 denominator。):
- 然后使用 reward model 或 verifier 对每个 response 进行评分:
- 接着进行 group relative advantage estimation:
- 然后重新使用当前 policy \(\pi_\theta\) 计算这些已经生成好的 token 的概率,并与生成这些数据时的 old policy 进行比较,从而得到 importance ratio:
- 与此同时,使用在 outer iteration 开始时保存的 reference policy 计算 KL penalty:
- 因此,计算出GRPO 的优化目标
用于更新更新当前 policy:
经过若干次 update 后,当前 policy 已经发生变化。进入下一轮 rollout 时,再重新执行
使用最新的 policy 作为新的 old policy 生成下一批 responses,然后重复这一整个 inner training loop。此时 \(\pi_{\text{old}}\) 会随着每一轮新的 rollout 不断更新,而 \(\pi_{\text{ref}}\) 始终保持为该 outer iteration 开始时保存的模型。
直到当前 outer iteration 结束,进入下一轮 outer iteration 时,才再次执行:
4. Dr.GRPO:重新检查GRPO中的Normalization
2025 年的论文 Understanding R1-Zero-Like Training: A Critical Perspective 对 R1-Zero 风格的 RL 训练进行了系统分析,并指出 GRPO 中存在两个非常重要的 optimization bias,随后提出 Dr.GRPO。
第一个问题来自 reward standard deviation normalization。原始 GRPO 使用
这里减去均值非常容易理解,因为我们希望衡量一个 response 相对于同组平均水平的好坏。但是为什么一定还要除以 \(\sigma_R\)?假设两个问题的 reward 分别为
和
两组 reward 的标准差不同。如果再除以各自的 \(\sigma_R\),就意味着不同问题的 advantage 被乘上不同的缩放系数。
也就是说,group std normalization 改变了不同问题对最终 gradient 的相对权重。Dr.GRPO 将这种现象称为 question-level difficulty bias:std 较小的 group 会得到更大的缩放。这意味着模型会更倾向于优化那些 reward 波动较小的问题,而忽略 reward 波动较大的问题。
因此 Dr.GRPO 的一个核心修改是去掉 group std normalization,直接使用 centered reward:
第二个问题来自 response length normalization。
原始 GRPO 对每一个 response 内部的 token loss 先求平均:
然后再在 \(G\) 个 responses 间求平均。这个看似非常自然的操作实际上会导致 length bias。例如有两个错误 response:
其中一个长度为 100,另一个长度为 1000。由于每个 response 最后都除以自己的长度,长 response 中单个 token 对 loss 的贡献会更小。因此对于负 advantage 的错误回答,越长的 response 受到的单 token 惩罚反而越弱。反过来,对于正 advantage 的正确回答,短 response 中每个 token 所获得的正向更新会更强。
作者因此观察到一种不健康的优化倾向:
- 正确回答倾向更短,错误回答反而可能越来越长
Dr.GRPO 对此采用固定常数而不是实际 response length 进行归一化。论文实现中使用整个训练过程中固定的最大生成长度 \(L\) 与 group 大小 \(G\) 的乘积 \(GL\) 进行归一化:
因为 \(GL\) 与具体 sample 的实际生成长度无关,因此它不会改变不同 response 之间本应具有的相对 gradient weighting。
最终,Dr.GRPO objective 是:
5.DAPO:面向大规模Reasoning RL的GRPO改造
DAPO,全称 Decoupled Clip and Dynamic sAmpling Policy Optimization,由 ByteDance Seed 等团队在 2025 年提出。作者使用 Qwen2.5-32B Base 进行大规模 RL,并在 AIME 2024 上取得 50 分,同时完整公开了训练 recipe、数据和基于 verl 的实现。
DAPO 是Seed团队对 GRPO 工程和算法层面的一次系统性修改,核心改动可以总结为:
- Clip-Higher
- Dynamic Sampling
- Token-Level Policy Gradient Loss
- Overlong Reward Shaping
我们来依次讲解
5.1 Clip-Higher
PPO/GRPO 中通常使用对称的 clipping:
但根据我们上一篇 PPO 中讨论过的 clipping 机制,当 advantage 为正时,真正限制 probability 上升的是 upper clip:
DAPO 观察到 reasoning RL 训练过程中可能出现 entropy collapse:模型越来越倾向于少数高概率 token,探索能力逐渐下降。因此 DAPO 将上下 clipping threshold 解耦:
并设置
也就是说,对于一个正 advantage 的好 response,如果其中某些 token 原本概率较低,但当前训练信号认为它们应该被提升,那么允许 policy 对这些 token 做更大的概率增长。
也就是说,DAPO 更倾向于降低概率仍然谨慎,提高 promising token 的概率可以更大胆一些.作者将这一方法称为 Clip-Higher,并观察到它有助于保持训练过程中的生成 diversity,缓解 entropy collapse。
5.2 Dynamic Sampling
考虑 RLVR 中最常见的 \(0/1\) reward。假设对一个 prompt rollout 8 次:
那么
所有 response 的 advantage 都为 0。同理,如果是
同样没有任何有效梯度。
这意味着两种问题实际上都不能为当前训练提供有效的 group-relative signal:
- 太简单:所有 rollout 都答对;
- 太困难:所有 rollout 都答错。
如果一个 batch 中包含很多这样的 prompt,那么虽然 GPU 做了大量 rollout 和 forward,但真正参与 policy gradient 的有效样本却很少。DAPO 因此使用 Dynamic Sampling:持续采样 prompts,并过滤掉 group accuracy 等于 0 或 1 的 group,直到 batch 中包含足够数量具有有效梯度的 prompts。
5.3 Token-Level Policy Gradient Loss
原始 GRPO 的 loss 是 sample-level reduction:
这意味着无论一个 response 有 100 个 token 还是 5000 个 token,最终每个 response 对 loss 的整体权重基本相同。
DAPO 认为这在 long-CoT 场景下存在明显问题。
假设一个 5000-token 的错误回答中充满 repetition、gibberish 或其他低质量模式,如果先对这 5000 个 token 求平均,那么每个错误 token 对最终 objective 的贡献就会非常小。这意味着模型对于长度较长的错误回答的惩罚会被稀释,从而可能无法有效学习到避免长错误回答。
于是 DAPO 改成在整个 batch/group 的 token 层面统一求平均:
这样每一个 token 在 aggregation 中拥有更一致的权重,长 response 中大量低质量 token 不再因为 sequence-level averaging 而被稀释。作者将其称为 Token-level Policy Gradient Loss。
5.4 Overlong Reward Shaping
reasoning RL 通常会给模型设置最大生成长度 \(L_{\max}\)。如果一个 response 达到最大长度但仍然没有完成答案,最简单的处理方式就是直接给予一个固定负 reward。然而这会形成非常突然的 reward cliff:长度稍低于阈值时可能正常获得奖励,而只多生成几个 token、恰好被 truncation 后,reward 就发生剧烈变化。
DAPO 认为这种做法会引入较大的 reward noise,因此对接近最大长度的 response 使用更加平滑的 overlong reward shaping,使 reward 随着 response 接近 truncation threshold 逐渐受到惩罚,而不是突然发生跳变。
最终,DAPO 首先保留 GRPO 的 token-level importance ratio:
group-relative advantage 仍然是
DAPO 没有采用 Dr.GRPO 去 std 的修改,它仍然使用标准差归一化。原论文 Eq. (9) 明确如此。
DAPO 最终的 policy objective 是:
同时满足 Dynamic Sampling 的约束:
6.GSPO:从Token-Level Importance Ratio走向Sequence-Level
GRPO 和前面的 DAPO 虽然修改了很多东西,但它们仍然保留了 PPO 最核心的 token-level importance ratio:
2025 年 Qwen 团队提出 GSPO(Group Sequence Policy Optimization),开始进一步质疑这个设计:
既然 reasoning RL 的 reward 是 sequence-level 的,advantage 也是根据整个 response 的 reward 构造出来的,那么为什么 importance sampling 和 clipping 却要分别作用于每一个 token?他们不应该在 sequence level 上作用吗?
GSPO 因此把 importance ratio 从 token level 提升到 sequence level。对于一个 response \(o_i\),完整 sequence probability 为
因此最直接的 sequence likelihood ratio 是
但由于一个 sequence 往往包含上千个 token,直接把所有 token probability ratio 相乘会导致这个数值随着 sequence length 剧烈变化。
GSPO 因此定义长度归一化后的 sequence-level importance ratio:
将 sequence probability 展开,可以得到
所以 \(s_i\) 实际上就是所有 token importance ratios 的几何平均。
GSPO 最终优化目标写成
也就是说,同一个 response 中不再有
这样一系列独立的 clipping decision,而是整条 response 只有一个\(s_i.\)。整条 sequence 要么处在合理的 trust region 中,要么被认为已经过于 off-policy。不再用于产生梯度信号。
最终 objective 为:
实际上,关于重要性采样作用在 token level 还是 sequence level 的讨论,仍然是当前 reasoning RL 研究中的一个开放问题。
7.重要性采样作用在 token level 还是 sequence level 的讨论
关于 importance sampling 到底应该作用在 token level 还是 sequence level,实际上已经成为当前 reasoning RL 中一个很值得关注的开放问题。我们先来回顾一下,PPO中原生的token level重要性采样是如何得到的:
PPO的重要采样是这样的,从
跳到
这中间少了一步重要的近似,我们来严格推导一下。首先,我们真正希望优化的是 current policy:
但手里的数据来自old模型的rollout \(\tau\sim\pi_{\text{old}}\),严格来说,完整的重要性采样应该写成产生轨迹的概率比值,而非采取下一步action的概率比值:
轨迹概率为
新旧 policy 在同一个环境里,所以初始状态分布和 transition probability 全部约掉:
定义
那么严格 trajectory importance ratio 是
如果引入RL中的经典概念\(d_{\pi}(s)\) : state visitation distribution(状态访问分布),也就是:当智能体按照策略 \(\pi\) 和环境交互时,它“有多大概率会走到某个状态 \(s\)”。真正的梯度应该写为:
应该写:
PPO 里面只保留了第二项:
而没有显式保留
那 PPO 为什么“原生”只有 token-level \(r_t\)?
因为 PPO 是从 TRPO 的 surrogate objective 出发,而不是直接对完整 \(J(\pi_\theta)\) 做 trajectory importance sampling。
TRPO 使用 performance difference 的思想,构造一个局部 surrogate:
故意把 state distribution 固定成了\(d_{\pi_{\text{old}}}(s)\),而不是 \(d_{\pi_\theta}(s)\). 因此不再需要校正 state distribution。
现在唯一的问题是里面 action 来自
而我们的实际数据是
这时只需要对 action 做普通 importance sampling:
这个 surrogate 凭什么能近似真正的 objective?
答案就是:
如果策略只发生很小的变化,那么
于是忽略 state visitation distribution 的变化问题不大。这也是 TRPO 要限制 KL、PPO 要限制 ratio/clipping 的一个更深层原因。
2026 年,更准确的认识应该是:PPO/GRPO 的 token-level ratio 是一种建立在“新旧策略足够接近、可以忽略 state-visitation shift”上的低方差 local surrogate;GSPO 从 reward granularity 和训练稳定性角度把 correction 提升到 length-normalized sequence level,但它并不是严格的 trajectory importance sampling;严格 full-trajectory ratio 数学最干净却方差过大。近期仍有不少工作在探索,重要性采样时如何平衡方差与偏差,以及如何在实际应用中更有效地使用这些方法。
8 end. GRPO、Dr.GRPO、DAPO、GSPO总结
| 方法 | 最核心的问题 | 最核心的修改 |
|---|---|---|
| PPO | Policy update 太大、不稳定 | Importance ratio + clipping + critic |
| GRPO | Critic/value model 成本高 | Group-relative advantage,删除 critic |
| Dr.GRPO | GRPO normalization 引入优化偏差 | 去 std normalization + 固定长度归一化 |
| DAPO | 大规模 long-CoT RL 不稳定且采样低效 | Clip-Higher + Dynamic Sampling + Token-level Loss + Overlong Shaping |
| GSPO | Token-level importance ratio 与 sequence reward 粒度不匹配 | Sequence-level importance ratio + sequence-level clipping |
GRPO 之后的大部分 reasoning RL 算法,本质上都仍然是在这条 pipeline 上重新设计其中一两个环节。
参考文献
- Shao et al., DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models, 2024. GRPO 最初来源。
- Liu et al., Understanding R1-Zero-Like Training: A Critical Perspective, 2025. 提出 Dr.GRPO,并分析 response-length bias 与 question-level difficulty bias。
- Yu et al., DAPO: An Open-Source LLM Reinforcement Learning System at Scale, 2025。
- Zheng et al., Group Sequence Policy Optimization, 2025。

浙公网安备 33010602011771号