GRPO 有两个反复出现的问题:同组答案共享的 token 会被正负优势来回拉扯,训练后期策略又会突然崩溃,而 KL 项要等到崩溃之后才明显上升。GTPO 不换采样流程,只在梯度上做两件事:对首尾共享 token 的冲突梯度做「负向归零、正向加倍」的掩码修正;用初始熵判断模型是否怕高熵,再过滤高熵答案、加一项最小化熵的正则。它顺手去掉了 KL 项和参考模型。LLaMA 8B 在 GSM8K 上训练后,AMC23 Pass@64 从 GRPO 的 5.0 升到 80.0。
GTPO 把一条回答当作一条轨迹,先找出「同位置、跨正负优势答案」的冲突 token:从左到右扫出前向冲突掩码,从右到左扫出后向掩码,两者取并集,只覆盖首尾连续段。对掩码内 token,负优势答案的梯度置 0,正优势答案的权重乘 2;掩码外不动。这样既保住 <reasoning> 这类格式 token,又保持组内总信号量不变。
熵控制分两层:若模型初始平均熵 < ln 2,说明它本来偏自信,训练中单条答案熵超过 ln 2 就整条过滤(δ=0);否则不过滤。最终损失在优势上再减 γ·⟨H⟩i,直接压低熵,γ=0.1。KL 项被完全去掉,因此不需要参考模型。
代价是:这套机制只在两个通用 instruct 小模型(LLaMA 3.1 8B Instruct、Qwen 2.5 3B Instruct)上验证,而且只做了数学推理任务;Table 1 的对比还是「每个数据集挑最好的变体」,不是最终 checkpoint 的平均,也不是多种子平均。
读完这节你应该知道:GTPO 要修的到底是哪两处,以及论文用什么证据定位它们。
冲突来自「同位置、不同结局」。同一组回答经常以相同的格式 token 开头,比如 <reasoning>;随后在某个分叉点走向不同解法。GRPO 用整条回答的归一化优势 Âi 去更新每个 token,于是共享前缀的梯度取决于组内所有答案的优势之和除以各自长度。若正确回答普遍更长,分母 |oi| 更大,它们的贡献被稀释,前缀可能整体收到负更新——哪怕这些 token 本身是对的。 §4.1
崩溃来自「低熵 + 负优势」。当一个高置信 token 出现在负优势答案里,GRPO 会大幅压低它,同时把所有其他 token 的概率略微抬高。单次抬升很小,但会累积;再加上组内优势零均值,少数负样本要承担很大的负值,进一步放大这种「压低正确 token、抬高不可能 token」的效应。输出分布被压平,格式先坏、准确率后坏。 §4.2
论文用 Figure 1 的 LLaMA 8B + GSM8K 训练曲线说明 KL 的滞后:格式化奖励在 β=10−6 时约 580 步、β=0.04 时约 750 步跌破 9;两条 KL 曲线却基本平稳到约 1200 步才抬头。熵曲线则在格式化奖励开始下降时就同步上升。论文据此把熵当作更及时的崩溃信号。 Figure 1
共享前缀的更新由组内优势与长度的相对平衡决定;正确回答越长,前缀越容易被错误答案拖成负更新。
负优势压低高置信 token,同时抬高其余 token;零均值约束让少数负样本的惩罚更重。
Figure 1 中格式化奖励先跌,KL 约 1200 步才上升;熵与奖励下降同步,因而更适合做过滤信号。
读完这节你应该知道:GTPO 与「直接删掉 KL」的做法有什么区别。
GRPO 用组内相对优势替代 critic,并在目标里加 β·DKL(πθ‖πref),把策略拉向参考模型 §3。论文的观察是:这个约束在崩溃前几乎不动,崩溃后才上升,不能作为早期预警。 Figure 1 同时参考模型让训练更重。 §5.2
已有工作分两路。Open-Reasoner-Zero 与 Liu 等对 R1-zero 式训练的批评尝试直接去掉 KL §5.2;GSPO 则把优化从 token 级提升到序列级 §2。论文称自己的测试显示 KL 有时仍必要,但 GTPO 用熵控制替代它,而不是简单删除。 §5.2
与它们相比,GTPO 既保留 token 级目标,又同时改两处:冲突掩码负责「哪些 token 的梯度要修正」,熵过滤与正则负责「哪些答案不该进入更新、整体熵该往哪走」。论文把冲突修正与熵控制拆开做消融:只用冲突修正(Figure 3 的 “No⟨H⟩i–Noδi”)在前期仍高于 GRPO,但约 2500 步后开始退化;只有两者一起才维持稳定。 Figure 3
读完这节你应该知道:λ 的三个取值怎么来、δ 在什么条件下为 0、最终损失长什么样。
把一组 G 条回答按优势分成 G+(Ai>0)与 G−(Ai<0)。前向冲突:token v 在位置 p 同时出现在至少一条正优势回答和至少一条负优势回答里。后向冲突:从末尾倒数第 r 个位置,v 同样跨正负优势出现。对每条回答,从左往右扫出第一段连续前向冲突,得到 Mfw;从右往左扫出第一段连续后向冲突,得到 Mbw;最终 M = Mfw ∨ Mbw。只取「第一段连续」是有意的:中间零散的冲突 token 语义依赖上下文,动它的梯度可能反而有害。 §5.1
| 位置 | 优势符号 | λi,t | 效果 |
|---|---|---|---|
| Mi,t = 0 | 任意 | 1 | 保持 GRPO 原更新 |
| Mi,t = 1 | Ai < 0 | 0 | 跳过冲突 token 的负更新 |
| Mi,t = 1 | Ai > 0 | 2 | 加倍冲突 token 的正更新 |
论文强调总信号量守恒:组内正负优势绝对值之和相等,λ=2 放大的正信号正好补上 λ=0 去掉的负信号,因此训练稳定性不被破坏。最终 token 级损失为 J* = E[1/G Σ Ai/|oi| Σ ri,tλi,t]。 §5.1
训练前先用训练集前 100 条样本测模型初始平均熵 ⟨H⟩ini §6。若 ⟨H⟩ini > ln 2,说明模型本来就高熵,不做过滤(δi=1)。若 ⟨H⟩ini < ln 2,说明模型偏自信、对高熵答案敏感:此时单条答案的 ⟨H⟩i > ln 2 就把 δi 置 0,整条答案的优势信号被丢掉;⟨H⟩i ≤ ln 2 则保留。阈值 ln 2 对应两个等概率 token 的平均熵。 §5.2
过滤之外再加一项熵正则:最终目标在优势里减去 γ·⟨H⟩i,即 JGTPO = E[1/G Σ δi(Ai − γ⟨H⟩i)/|oi| Σ ri,tλi,t]。注意这里是最小化熵,和 PPO 常见的「加熵奖励鼓励探索」方向相反;论文的理由是 GRPO 本身有熵增趋势,需要反向力把置信度拉回来。实验取 γ=0.1 §6。因为没有 KL 项,训练不需要参考模型。 §5.2
读完这节你应该知道:复现需要哪些设置,以及论文没有报告什么。
训练集为 GSM8K 与 MATH 的训练划分;同分布测试用各自 test split,分布外评估用 AIME 2024、AIME 2025、AMC 2023。GTPO 与 GRPO 都跑 G=8 与 G=12 两种组大小。 §6 评估指标为 pass@k 与 maj@k:分布外/Table 1 的 k 取 1、8、16、32、64(AMC 的 maj@k 从 4 开始) Table 1;同分布 Figure 2 的 k 扫描 1–32。 §6.1
学习率 1×10−6,temperature 1.0;per-device batch 1,梯度累积 1,num_train_epochs 1,num_iterations 1;optimizer 为 paged_adamw_8bit,weight decay 0.1,max_grad_norm 0.1,cosine 调度;GTPO 的 β 为 None,即不用 β。 Listing 1 GRPO 的 β 取 0、0.04、1×10−6;正文/图为 10−6 §6,Listing 1 的 beta 字段写作 0.0/0.04/10e-6 Listing 1。全部实验在 2 张 NVIDIA A100 上完成。 §6
论文没有报告:每组实验的 GPU 小时、总训练时长与实际显存占用。 §6 Listing 1 只给 gpu_memory_utilization=0.4,这不是实际占用 Listing 1。也没有报告 γ=0.1 之外更多取值的完整数值扫描:Figure 4a 给了 γ=0.1、0.01、0.001、10−6 四档,另加一条关闭熵过滤的 NOδi 曲线,但没有表格数值。 Figure 4a 对复现来说,seed 与方差仍是空白:Listing 1 只给了一个随机种子 3407 Listing 1;没有多种子重复、标准差或置信区间,Table 1 的每个单元格也只给一个数。 Table 1
读完这节你应该知道:λ 与 δ 在流水线的哪个位置生效,以及 KL 与参考模型在哪一步被拿掉。
读完这节你应该知道:Table 1 的 12 行怎么读、哪些单元格 GRPO 或 SFT 仍然更高、以及「up to」数字的边界。
Table 1(完整转录):分布外评估;每个模型/训练集组合取 GTPO、GRPO、SFT 中最好的变体。Pass@k 的 k=1/8/16/32/64;AMC 的 Maj@k 从 k=4 开始。表格可左右滚动查看全部 k。
| 模型 | 训练集 | 方法 | AIME 2024 Pass@k | AIME 2025 Pass@k | AMC 2023 Pass@k | AMC 2023 Maj@k | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 8 | 16 | 32 | 64 | 1 | 8 | 16 | 32 | 64 | 1 | 8 | 16 | 32 | 64 | 4 | 8 | 16 | 32 | 64 | |||
| LLaMA 8B · GSM8K | ||||||||||||||||||||||
| LLaMA | GSM8K | SFT | 0.0 | 0.0 | 0.0 | 13.3 | 20.0 | 0.0 | 0.0 | 0.0 | 0.0 | 6.7 | 12.5 | 37.5 | 42.5 | 57.5 | 72.5 | 10.0 | 15.0 | 15.0 | 20.0 | 17.5 |
| LLaMA | GSM8K | GRPO | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 2.5 | 2.5 | 5.0 | 5.0 | 5.0 | 2.5 | 2.5 | 5.0 | 5.0 | 5.0 |
| LLaMA | GSM8K | GTPO | 0.0 | 10.0 | 13.3 | 20.0 | 30.0 | 0.0 | 6.7 | 6.7 | 6.7 | 13.3 | 17.5 | 47.5 | 55.0 | 65.0 | 80.0 | 25.0 | 27.5 | 35.0 | 37.5 | 42.5 |
| LLaMA 8B · MATH | ||||||||||||||||||||||
| LLaMA | MATH | SFT | 0.0 | 3.3 | 10.0 | 20.0 | 26.7 | 0.0 | 0.0 | 3.3 | 6.7 | 16.7 | 10.0 | 45.0 | 60.0 | 65.0 | 80.0 | 12.5 | 15.0 | 12.5 | 15.0 | 17.5 |
| LLaMA | MATH | GRPO | 0.0 | 13.3 | 16.7 | 20.0 | 36.7 | 0.0 | 0.0 | 0.0 | 3.3 | 6.7 | 20.0 | 37.5 | 40.0 | 52.5 | 70.0 | 25.0 | 30.0 | 30.0 | 30.0 | 32.5 |
| LLaMA | MATH | GTPO | 3.3 | 13.3 | 16.7 | 36.7 | 43.3 | 0.0 | 0.0 | 10.0 | 10.0 | 13.3 | 22.5 | 52.5 | 67.5 | 75.0 | 82.5 | 37.5 | 37.5 | 37.5 | 37.5 | 37.5 |
| Qwen 2.5 3B · GSM8K | ||||||||||||||||||||||
| Qwen | GSM8K | SFT | 0.0 | 0.0 | 0.0 | 0.0 | 6.7 | 0.0 | 0.0 | 0.0 | 6.7 | 6.7 | 0.0 | 10.0 | 17.5 | 52.5 | 62.5 | 0.0 | 2.5 | 7.5 | 7.5 | 7.5 |
| Qwen | GSM8K | GRPO | 0.0 | 3.3 | 6.7 | 16.7 | 20.0 | 0.0 | 3.3 | 6.7 | 10.0 | 20.0 | 7.5 | 40.0 | 52.5 | 67.5 | 77.5 | 17.5 | 12.5 | 25.0 | 30.0 | 42.5 |
| Qwen | GSM8K | GTPO | 3.0 | 13.3 | 16.7 | 16.7 | 26.7 | 0.0 | 6.7 | 10.0 | 20.0 | 26.7 | 37.5 | 65.0 | 70.0 | 85.0 | 95.0 | 40.0 | 42.5 | 47.5 | 50.0 | 45.0 |
| Qwen 2.5 3B · MATH | ||||||||||||||||||||||
| Qwen | MATH | SFT | 0.0 | 0.0 | 0.0 | 0.0 | 6.7 | 0.0 | 0.0 | 0.0 | 0.0 | 3.3 | 0.0 | 12.5 | 35.0 | 47.5 | 65.0 | 0.0 | 2.5 | 7.5 | 7.5 | 7.5 |
| Qwen | MATH | GRPO | 0.0 | 3.3 | 3.3 | 6.7 | 16.7 | 0.0 | 3.3 | 10.0 | 13.3 | 16.7 | 30.0 | 67.5 | 70.0 | 77.5 | 87.5 | 27.5 | 42.5 | 42.5 | 45.0 | 42.5 |
| Qwen | MATH | GTPO | 3.3 | 6.7 | 13.3 | 20.0 | 30.0 | 3.3 | 10.0 | 10.0 | 13.3 | 23.3 | 40.0 | 75.0 | 80.0 | 82.5 | 85.0 | 52.5 | 47.5 | 42.5 | 50.0 | 50.0 |
每行是一个 k,三根柱依次为 SFT、GRPO、GTPO;柱高按百分比直接换算(满格 100)。AMC 的 Maj 视图 k 取 4/8/16/32/64。
选择 A:LLaMA · GSM8K → AMC23 Pass@64。Table 1 给 SFT 72.5、GRPO 5.0、GTPO 80.0。柱高按 v / 100 × 100%:SFT 72.5%、GRPO 5.0%、GTPO 80.0%。GTPO − GRPO = 80.0 − 5.0 = 75.0 个百分点,与页面 §6.3 的 75.0 点一致。
选择 B:Qwen · GSM8K → AMC23 Pass@64。SFT 62.5、GRPO 77.5、GTPO 95.0。柱高 62.5% / 77.5% / 95.0%。GTPO − GRPO = 95.0 − 77.5 = 17.5;GTPO − SFT = 95.0 − 62.5 = 32.5 由显示值推得。JS 读数只显示 G−GRPO=17.5,不输出 G−SFT。
反例对账:Qwen · MATH → AMC23 Pass@64。GRPO 87.5、GTPO 85.0,差值为 87.5 − 85.0 = 2.5,方向是 GRPO 更高;页面在 §6.3 明确写出,不把该单元格算作 GTPO 的胜利。
先看论文最常引的两个「up to」。Pass@64 的最大差出现在 LLaMA·GSM8K→AMC23:GTPO 80.0,GRPO 5.0,差 75.0 点。同一设置 Maj@64 的最大差:GTPO 42.5,GRPO 5.0,差 37.5 点。对 SFT 的最大 Maj@64 差出现在 Qwen·MATH→AMC23:GTPO 50.0 对 SFT 7.5,差 42.5 点。Qwen·GSM8K→AMC23 Pass@64 是 95.0 对 77.5(+17.5);论文称 Qwen 在 AMC 上最强 §6.1,这组显示值是该说法的主要来源 推断。 Table 1
但 Table 1 同时给出反例。Qwen·MATH→AMC23 Pass@64:GRPO 87.5,GTPO 85.0,GRPO 高 2.5 点;LLaMA·MATH→AIME2025 Pass@64:SFT 16.7,GTPO 13.3,SFT 高 3.4 点。 Table 1 论文在 §6.1 也承认,GRPO 偶尔在很大的 k 上接近或略超 GTPO(例如 MATH 训练后的 AMC pass@64),并把 AIME2025 k=64 的 SFT 领先点名为唯一例外。 §6.1 因而页面不写「全面优于」或「所有单元格都赢」。
AIME 上 GTPO 的优势更一致 推断:LLaMA·MATH→AIME24 Pass@64,GTPO 43.3 对 GRPO 36.7(+6.6);Qwen·MATH→AIME24,GTPO 30.0 对 GRPO 16.7。 Table 1 但注意 Table 1 的选法:每个数据集挑 GTPO/GRPO/SFT 中在分布内表现最好的变体,GRPO 在 LLaMA 上还特意取训练中准确率奖励最高的 checkpoint,而不是崩溃后的最终模型。 §6.1 所以这些数字是选优后的对比,不是最终 checkpoint 的平均,也不是多种子平均。
论文结论另称分布内 Pass@32 / Maj@32 最多提升 10 个百分点 §7。这部分在 §6.1 只以 Figure 2 的曲线展示,没有对应的数值表 Figure 2;页面不复算这 10 点,只把它当作论文的原文主张。
读完这节你应该知道:哪些结论有表格支撑,哪些只是论文没有验证的空白。
模型是通用 instruct:Listing 1 的名字是 meta-llama/meta-Llama-3.1-8B-Instruct 与 Qwen/Qwen2.5-3B-Instruct Listing 1;任务以数学为主,70B、MoE、非数学任务都没有实验 §6。γ=0.1 与阈值 ln 2 是否随规模变化,论文没有回答。
训练与评估都在 GSM8K、MATH 及其分布外数学基准上 §6。创意写作、摘要、开放对话等「冲突 token」定义更模糊的领域未验证;论文在结论只把理论熵界列为未来工作。 §7
Table 1 每格一个数,没有标准差、置信区间或多种子重复;Listing 1 只给一个种子 3407 Listing 1。「+75」是单个选优单元格的差值,不能当作稳定增益的估计。 Table 1
还有三点机制边界。第一,冲突掩码只处理首尾连续段,中间零散冲突 token 被刻意放过;论文的理由是中间 token 依赖上下文,但这也意味着方法覆盖不到所有冲突。 §5.1 第二,熵过滤依赖「初始熵 < ln 2 才启用」这一条件 §5.2;论文称 Qwen 呈高熵行为、没有 policy collapse §6.1,Figure 4c 的默认设置对 Qwen 不做 completion filtering §6.2。至于 Qwen 的增益主要来自冲突修正还是熵正则,论文没有拆解,这里只能作为 推断。第三,Table 1 的选优流程(挑最好变体、GRPO 挑 LLaMA 的最好 checkpoint)会让「GTPO vs GRPO」的比较偏向双方各自的最好状态 推断,读者不能把差值直接外推到固定训练步数或最终模型。 §6.1
最后,论文没有报告训练总步数、GPU 小时与实际显存 §6,也没有给出 γ 的自适应方案;结论只把「理论熵界」列为未来工作 §7。对工程复现来说,这些是比算法本身更先要补的空白。