GRPO is Secretly a Process Reward Model¶
会议: ICML 2026
arXiv: 2509.21154
代码: https://github.com/coli-saar/grpo-prm/ (有)
领域: LLM 推理 / 强化学习
关键词: GRPO, 过程奖励, 优势归一化, 数学推理, RL 训练加速
一句话总结¶
本文从理论上证明 GRPO + ORM 在"组内轨迹共享前缀"的温和条件下等价于一个带有 Monte-Carlo PRM 的过程奖励 RL 目标,从而揭示出 vanilla GRPO 隐藏的一个 bug——前缀长度不均会让高奖励轨迹的大部分 token 拿到负 advantage——并提出 \(\lambda\)-GRPO 做一个 PRM-aware 归一化,在推理 benchmark 上稳定超过 GRPO 且训练快约 2 倍。
研究背景与动机¶
领域现状:在 LLM 数学推理 RL 训练里,PRM(过程奖励模型)能给每个中间步骤打分,credit assignment 比 ORM(结果奖励)细得多,因此通常配合 PPO + GAE 使用。GRPO(DeepSeekMath)的卖点是砍掉了 critic 和 GAE,用组内 reward 的标准化作为 advantage——简单、省显存,因此被广泛应用(tool use、RLHF、math reasoning),但因为没了 GAE,几乎所有 GRPO 工作都只能用 ORM。
现有痛点:把 PRM 接进 GRPO 需要对算法做非平凡修改(如 TreeRPO、GroupPRM、TreeRL),增加了实现复杂度并放弃了 GRPO 简洁的卖点。此外,神经 PRM 训练贵(要 step-level 标注)且容易被 reward-hack。
核心矛盾:大家一直把"GRPO 用 ORM"和"PRM-aware RL"当作两件不同事来处理。但 GRPO 在 rollout 阶段会从同一个 prompt 抽多条 trajectory,这些 trajectory 天然形成一棵前缀共享树——这棵树本身就携带了 process-level 信息,只是从来没被显式利用。
本文目标:(1) 在数学上证明 vanilla GRPO 在共享前缀的假设下就是一个 PRM-aware 目标,量化它对应的 PRM 到底长什么样;(2) 用这把分析工具找 GRPO 目标的隐藏 bug;(3) 修复这个 bug 而不引入显式 PRM。
切入角度:作者注意到一个简单事实——一个 trajectory 的优势 \(a_i\) 在 GRPO 里被均匀分配到它的所有 token;如果这条 trajectory 与组内多条高分 trajectory 共享一段长前缀,那么这段前缀实际上是"好的"——但 vanilla GRPO 因为只用一条 trajectory 的整体 reward 做 advantage,会把这段前缀错算成"坏的"。从前缀树的视角推导,问题就豁然开朗。
核心 idea:把 GRPO 看成"在前缀树上做 MC-PRM 的 RL",识别出归一化项里的不对称性,加上一个简单的 \(\lambda\) 因子修正。
方法详解¶
整体框架¶
两步走:
- 理论侧(Section 3):在 \(\mu=1\)、DAPO 风格 token-level objective、忽略 clip 的两个温和假设下,构造前缀树 \(\mathcal B(\mathbb G)\),每个节点 \(\lambda\) 表示一组共享前缀的 trajectory,对应一段 process step;用其内部轨迹的均值 reward 定义 step-level reward。证明这个 MC-PRM-aware loss \(L_{\text{PRM}}(\mathbb G)\) 数值上恒等于 \(L_{\text{GRPO}}(\mathbb G)\)。
- 算法侧(Section 4–5):用前缀树视角找到 vanilla GRPO 中 advantage 与归一化分母错配的缺陷,提出 \(\lambda\)-GRPO——在 loss 中插入一个 PRM-aware normalization 因子,使每个 process step 的 effective weight 与其在 group 中实际出现频次相协调。该修改一行代码即可加入 TRL。
关键设计¶
-
前缀树 \(\mathcal B(\mathbb G)\) 与 process step 的构造:
- 功能:把"哪些 token 属于同一个 process step"形式化——同一前缀下的所有 trajectory 共享一个 step,step 的 reward 就是这组 trajectory 的均值 outcome reward。
- 核心思路:对组 \(\mathbb G=\{y^{(1)},\dots,y^{(|\mathbb G|)}\}\) 定义 process set \(\mathcal B(\mathbb G)=\{\lambda\subseteq\mathbb G\mid \exists n\geq 0,\forall y^{(i)},y^{(k)}\in\lambda: y_{:n}^{(i)}=y_{:n}^{(k)}\}\),按 \(\supseteq\) 关系形成树。每个节点 \(\lambda\) 对应一段 step,跨度 \([s(\lambda), e(\lambda))\);step-level reward \(r_\lambda = \frac{1}{|\lambda|}\sum_{y^{(i)}\in\lambda} r^{(i)}\),advantage 仍按组均值归一化。在 \(\mu=1\) 且 token-level loss 假设下证 \(L_{\text{PRM}}(\mathbb G)=L_{\text{GRPO}}(\mathbb G)\)。
- 设计动机:让"GRPO 在干什么"第一次有了 PRM 语义。该等价性意味着想得到 process reward 不必再训神经 PRM 或改算法,只要 rollout 时让 trajectory 共享前缀,免费就能拿到 MC-PRM 信号。作者还实证(Section 3.2)这种前缀共享在现实 GRPO 训练里非常普遍——所以这个"隐含 PRM"几乎总是非平凡的。
-
缺陷诊断:advantage 与 step 频次的错配:
- 功能:用前缀树视角揭示 vanilla GRPO 的一个具体反例——高 reward 轨迹的多数 token 反而被分配负 advantage,从而被 RL 降低 概率。
- 核心思路:考虑图 1 中的 trajectory JKLNQU,假设它整体 reward 高于组均值,但它的前缀 JKL 与多条低分轨迹共享。在 PRM-aware 视角下,JKL 这段 step 的 step-reward 等于"JKL 之下所有轨迹的均值 reward"——这个均值被低分轨迹拉低,导致 JKL 三个 token 拿到负 advantage;只有独属于 JKLNQU 的最后一个 token U 拿到正 advantage。但 vanilla GRPO 的 token-level loss 把整条 trajectory 视作一体,所有 token 共享同一个 sample-level \(a_i\),这与 PRM 视角的"分段 advantage 应按 step 频次加权"不一致——具体地,loss 的分母 \(\sum_{y^{(i)}}\text{len}(y^{(i)})\) 在 token 数与 step 出现频次失配时会引入系统性 bias。
- 设计动机:这条诊断把"GRPO 偶尔会把好轨迹搞砸"的直觉转化为一条可形式化的 bug。
-
\(\lambda\)-GRPO:PRM-aware 归一化:
- 功能:在 GRPO 的 token-level loss 上加一个 process-step-频次感知的 normalization 因子 \(\lambda\),恢复"高频共享 step 不应被反复 penalize / 反复 reward"的对称性。
- 核心思路:保持原 GRPO 的 sample-level advantage 不变,但把 token 累加时的分母从"全组 token 数"替换为按前缀树节点频次重加权的归一化项;可视作给每个 token 乘上 \(\lambda_t = 1/n_t\)(\(n_t\) 是该 token 所属 process step 在组里出现的次数)。这样高频共享 step 的 token 不会因为出现多次而被反复推动。一行 patch 即可加入 TRL 的 GRPO trainer。
- 设计动机:保留 GRPO 不需要 critic / GAE 的轻量优势,又利用了已经免费拿到的 MC-PRM 信号。作者实测这个修改对训练时间几乎零开销,但在多个推理 benchmark 上稳定优于 vanilla GRPO,且收敛快约 2 倍——说明 bug 修复后梯度信号更干净。
损失函数 / 训练策略¶
- Vanilla GRPO(在 \(\mu=1\)、DAPO token-level 假设下): \(L_{\text{GRPO}}(\mathbb G)=\frac{1}{\sum_{y^{(i)}}\text{len}(y^{(i)})}\sum_{y^{(i)}}\sum_t (P_{i,t}\cdot a_i - D_{i,t})\),其中 \(a_i=(r^{(i)}-r_{\text{mean}}(\mathbb G))/r_{\text{std}}(\mathbb G)\)。
- \(\lambda\)-GRPO:将分母替换为 PRM-aware 的归一化和(按 process step 频次加权),其余保持不变。
- 训练设置:与 DeepSeekMath GRPO 一致,\(\mu=1\) 更新次数;在数学推理 SFT 数据上做 RL;TRL 框架;2× 训练加速来自更快达到峰值 validation acc。
实验关键数据¶
主实验¶
| 设置 | 训练时间 | 下游推理 acc | 收敛速度 |
|---|---|---|---|
| Vanilla GRPO | \(1\times\) baseline | baseline | baseline |
| \(\lambda\)-GRPO | 几乎相同/步 | 全面 \(>\) baseline | 达 peak 快约 \(2\times\) |
| 显式 PRM (PPO+GAE) | 远慢 | 受 reward-hack 影响 | 慢 |
消融实验¶
| 配置 | 现象 | 说明 |
|---|---|---|
| 共享前缀比例高的 group | \(\lambda\)-GRPO 提升明显 | 隐含 PRM 信号丰富 |
| 共享前缀稀薄(多样化 rollout) | \(\lambda\)-GRPO 退化为 GRPO | 与理论一致:trivial PRM 时无差异 |
| 去掉归一化重加权(保留树视角不改 loss) | 性能恢复到 GRPO | 证明性能增益来自 \(\lambda\) 修正而非视角本身 |
关键发现¶
- GRPO 的隐含 PRM 在真实训练里几乎总是非平凡:作者用实证表明前缀共享在 group rollout 中频繁发生(图 1 的 JKLNQU 这种结构是常态而非特例),因此分析有现实意义。
- bug 的方向是系统性反例:vanilla GRPO 倾向于把高 reward 轨迹的"早期共享前缀"打成负 advantage,这是为什么 GRPO 训出来的模型有时反而降低正确推理 chain 出现概率的根因之一。
- \(\lambda\)-GRPO 的收敛加速比性能提升更显著:peak validation acc 早约 2× 步数到达,意味着实际 GPU 时间节省巨大;这一点对工业 RL pipeline 价值很高。
- 不需要任何额外标注或额外 forward:与神经 PRM 相比,零标注成本;与显式 MC-PRM (VineRL) 相比,零额外 rollout。
亮点与洞察¶
- "算法等价性"作为分析工具:把 vanilla GRPO 改写成 PRM-aware 形式,然后在改写后的形式里诊断 bug,再改回 vanilla 框架修复——这是非常优雅的"理论先行"分析范式,值得任何 RL 算法分析借鉴。
- 前缀树视角免费的 MC-PRM:揭示出"想要 process reward 不必再训 PRM,只要让 rollout 共享前缀",对希望节省 PRM 标注的人来说是颠覆性结论。
- bug 的具象化:作者举的 JKLNQU 例子把抽象的归一化错配变成了一个能在白板上画出来的反例,可读性极强。
- \(\lambda\) 修正一行代码:trick 可以直接 hot-patch 到 TRL/verl 等主流框架,落地成本几乎为零。
局限与展望¶
- 等价性证明依赖 \(\mu=1\) 和 token-level (DAPO) loss 假设;在 sample-level GRPO 或 \(\mu>1\) 多更新的设置下,前缀树视角不再严格成立,bug 是否仍按同方向出现需要额外讨论。
- 实验在数学推理 benchmark 上做,对 RLHF / tool use / agent 等其他 GRPO 主战场没系统验证。
- 隐含 PRM 的质量依赖前缀共享密度,长 trajectory 或多样化 sampling(高 temperature)下会变稀疏;可能需要主动鼓励前缀共享的 rollout 策略才能保证 \(\lambda\)-GRPO 持续受益。
- 缺乏与 TreeRPO / GroupPRM 等显式过程奖励 GRPO 变体的端到端对比,无法判断显式 vs 隐式哪个更好。
相关工作与启发¶
- vs TreeRPO / TreeRL(feng2025, ji2025): 它们显式构造树结构 PRM 并改算法;本文证明 vanilla GRPO 自己就是这种树 PRM 的一个特例,且 \(\lambda\)-GRPO 用更少改动达到类似目标。
- vs VinePPO / treeRL(MC-based PRM): VinePPO 用 MC rollout 估计 step value 但需要额外 forward;本文把 MC 估计藏在 group 内的共享前缀里,零额外开销。
- vs DAPO: DAPO 提出 token-level objective 解决 sample-level loss 训练不稳;本文把 DAPO 作为前提之一,正交地修复另一个归一化 bug。
- 启发:任何"在 group / batch 内做相对评分"的算法(如 DPO 的成对比较、RLAIF 的多样本聚合)都可以套用"前缀/共享子结构 → 隐含 process signal"的视角去检查归一化是否存在系统偏差。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ "GRPO 是隐式 PRM" 是一个非常漂亮且此前完全未被注意到的等价性结论
- 实验充分度: ⭐⭐⭐ 推理 benchmark 上的提升和加速实证清晰,但跨任务(RLHF/tool use)的系统验证缺失
- 写作质量: ⭐⭐⭐⭐⭐ 用图 1 的 JKLNQU 反例把抽象 bug 讲透,从假设、证明到修复全链条干净
- 价值: ⭐⭐⭐⭐⭐ 一行 patch 拿到 ~2× 训练加速 + 稳定性能增益,工业 RL pipeline 立即可用