资讯动态

GRPO训练技巧评测:十余项改进的叠加失效与选型指南

发布时间:2026/10/26 5:10:17 来源:尧图企业网站定制
1. 从三篇论文说起GRPO 训练技巧到底值不值得堆过去大半年做大模型强化学习训练的人几乎都绕不开一个话题GRPO 的各种改进技巧到底有没有用。打开任何一个做 LLM RL 的群你都能看到有人在讨论 DAPO 的动态采样、GSPO 的序列级重要性比率、Dr.GRPO 的梯度修正还有一堆名字都记不全的变体。每个方法都声称在某个 benchmark 上比原始 GRPO 高几个点但真正上手跑过的人心里都清楚这些技巧叠在一起之后效果往往不是加法有时候甚至是减法。我最近集中读了三个方向的工作一个是 DAPO 那套 clip-higher 加动态采样的组合一个是 Dr.GRPO 对梯度估计偏差的分析还有一个是 GSPO 把重要性比率从 token 级提到序列级的思路。读完最大的感受是这些论文各自解决的问题是真实的但它们给出的方案未必是你当前训练流程里最需要的那一个。更关键的是很多技巧之间存在隐性的相互干扰你单独测每个都涨点合在一起反而崩了。这篇文章不是论文导读也不是什么“十大技巧汇总”。我想做的是把 GRPO 这条线上十几个常见训练技巧拆开从它们各自解决什么问题、在什么条件下有效、彼此之间会不会打架这三个角度给出一份可以直接对照自己训练日志来排查的评测笔记。如果你正在跑 GRPO 或者它的某个变体训练曲线时好时坏reward 涨到一半就平了或者 entropy 突然塌掉那这篇内容应该能帮你省下不少试错时间。2. GRPO 的核心机制与常见失效模式2.1 从 PPO 到 GRPO省掉 critic 之后发生了什么要理解那些训练技巧为什么存在得先回到 GRPO 本身的设计。PPO 在 RLHF 里的标准做法是同时维护 actor 和 critic 两个网络critic 负责估计状态价值用来算 advantage。这个方案稳定但代价是显存占用几乎翻倍而且 critic 本身的训练在长序列生成任务里很不稳定value loss 经常震荡。GRPO 的做法很直接既然一个 prompt 可以采样出多个 response那直接用这组 response 的 reward 均值作为 baseline省掉 critic。advantage 就变成每个 response 的 reward 减去组内均值再除以组内标准差。这个改动让显存压力小了很多训练流程也简化了但代价是 advantage 的估计完全依赖组内采样。组太小、reward 太稀疏、或者组内 response 质量太接近的时候advantage 的信号就会非常弱甚至全是零。这就是为什么后面那些技巧大多围绕两个点做文章一是怎么让组内采样更有区分度二是怎么在 advantage 信号弱的时候稳住梯度。你如果只记住一句话那就是 GRPO 的很多问题本质上都是组内方差的问题。2.2 训练中最容易踩的四个坑我把实际训练中遇到的失效模式归了四类基本覆盖了大部分人的报错场景。第一类是 reward 平台期。训练前几百步 reward 涨得挺快然后突然就平了怎么调学习率都不动。这种情况通常是组内 response 的 reward 方差变小了advantage 趋近于零梯度信号消失。模型已经学会了组内所有 response 都拿到差不多的分数没有区分度就没有学习信号。第二类是 entropy 坍塌。生成多样性急剧下降输出变得重复、模板化。GRPO 的 ratio 裁剪机制在 entropy 低的时候会放大梯度进一步压低 entropy形成正反馈。这个问题在训练后期特别常见尤其是 reward 信号比较单一的时候。第三类是长度失控。response 长度要么越来越长要么越来越短偏离你期望的区间。长度和 reward 之间如果有隐性关联比如长回答更容易拿高分模型就会钻这个空子。GRPO 本身对长度没有约束全靠 reward 设计来引导。第四类是训练不稳定loss 突然 spike 然后整个 batch 的输出都崩了。这通常和重要性比率的极端值有关某个 token 的 ratio 冲到很大梯度爆炸把 policy 推到一个奇怪的方向。注意这四类问题不是独立的entropy 坍塌往往伴随 reward 平台期长度失控又会加剧训练不稳定。排查的时候不要只盯一个指标。2.3 为什么技巧叠加会失效理解了失效模式就能理解为什么技巧叠加会出问题。每个技巧本质上是在某个维度上做干预但干预之间会相互影响。举个例子clip-higher 把上界从 0.2 提到 0.28本意是让低概率 token 有更多上升空间缓解 entropy 坍塌。但如果你同时用了动态采样把那些 reward 全对或全错的组过滤掉剩下的组本身方差就大再配合更高的 clip 上界ratio 的波动会更剧烈训练不稳定的风险反而上升。再比如Dr.GRPO 去掉了标准差归一化认为标准差归一化会放大难题的梯度、引入偏差。这个改动在 reward 分布比较均匀的时候是合理的但如果你的 reward 本身就有很多极端值去掉归一化之后梯度尺度会变得很难控制学习率得重新调。所以我的建议是不要一次上三个以上的技巧每加一个都要单独跑一轮对照确认它在你当前的数据和 reward 设计下确实有效再考虑下一个。下面几节我会逐个拆解这些技巧的实际表现。3. 十余项 GRPO 训练技巧逐项评测3.1 重要性比率裁剪类技巧clip-higher 与双侧裁剪重要性比率裁剪是 PPO 系方法的标配GRPO 继承了这个设计。标准做法是把 ratio 裁剪到 [1-ε, 1ε]ε 通常取 0.2。这个设计的初衷是限制每次更新的幅度防止 policy 跑太远。clip-higher 的思路是下界保持 0.2 不变上界提到 0.28。为什么只动上界因为低概率 token 的 ratio 上升空间被下界卡住了如果它本来概率很低想涨上去需要更大的 ratio但被 1-ε 限制住了。放宽上界能让这些 token 有更多机会被学到对维持 entropy 有帮助。实测下来clip-higher 在训练中期确实能延缓 entropy 下降但效果没有论文里说的那么显著。我跑的一组对照里用 clip-higher 的 entropy 在第 800 步时比基线高约 0.15但 reward 曲线基本重合。也就是说它主要是在维持多样性对最终效果的影响取决于你的 reward 是否真的需要那些低概率 token。双侧裁剪是另一个方向把上下界都收紧比如 [0.8, 1.2]。这个做法在训练早期能提升稳定性但代价是收敛变慢。如果你的 reward 信号很嘈杂双侧裁剪能帮你过滤掉一些噪声更新但如果 reward 本身很干净收紧裁剪就是白白拖慢训练。技巧核心改动适用场景主要代价clip-higher上界 0.2→0.28entropy 下降过快训练稳定性略降双侧裁剪上下界收紧reward 噪声大收敛速度变慢不对称裁剪下界松上界紧防止 policy 崩坏需要调参实操心得clip 参数不要照搬论文。你的模型规模、数据分布、reward 尺度都和论文不一样ε 取 0.2 还是 0.3 得自己扫。我一般会跑 0.15、0.2、0.25、0.3 四个点看哪个的 reward 曲线最平滑。3.2 动态采样与组内过滤DAPO 的核心贡献DAPO 里最有价值的改动我认为是动态采样。它的逻辑很简单如果一个组里所有 response 的 reward 都一样那这个组的 advantage 全是零对梯度没有贡献白白浪费算力。与其这样不如把这些组丢掉重新采样直到组内有足够的区分度。这个改动在 reward 稀疏的场景下效果非常明显。比如数学推理任务很多 prompt 的答案要么全对要么全错标准 GRPO 在这些组上就是在做无用功。动态采样把这些组过滤掉之后有效 batch 的利用率大幅提升训练速度能快不少。但动态采样有个隐藏成本过滤比例不好控制。如果过滤太多实际 batch size 会远小于设定值梯度估计的方差变大如果过滤太少又起不到加速作用。我的经验是过滤比例控制在 20% 到 40% 之间比较合适超过 50% 就要检查是不是 reward 设计有问题了。还有一个变体是组内过滤不丢弃整个组而是把组内 reward 相同的 response 部分过滤掉。这个做法更精细但实现复杂度高而且容易引入采样偏差。我试过一版效果和整组过滤差不多但代码维护成本高不少后来还是用回了整组过滤。3.3 标准差归一化的取舍Dr.GRPO 的梯度分析Dr.GRPO 这篇论文的核心论点是GRPO 里用组内标准差归一化 advantage 会引入偏差。具体来说难题的 reward 方差小归一化之后 advantage 被放大模型会过度关注难题简单题的 reward 方差大归一化之后 advantage 被压缩模型对简单题的学习不足。这个分析在数学上是成立的。我验证过一组数据去掉标准差归一化之后难题和简单题的梯度尺度确实更均衡了。但实际效果取决于你的数据分布如果你的训练集里难题和简单题比例接近去掉归一化能改善均衡性如果数据本身就偏向某一类去掉归一化反而可能让模型在另一类上表现变差。我的建议是先看你的 reward 分布。如果组内标准差的波动范围很大比如有的组标准差 0.01有的组 0.5那归一化确实会带来问题可以考虑去掉或者换成一个平滑的归一化方式。如果组内标准差比较稳定那归一化的影响就没那么大不值得为此改代码。还有一个折中方案是用一个固定的缩放因子代替标准差比如直接除以一个常数。这样既避免了标准差的偏差又保留了梯度尺度的稳定性。我目前用的就是这个方案缩放因子取组内标准差的滑动平均效果比纯 Dr.GRPO 稳一些。3.4 序列级重要性比率GSPO 的思路与局限GSPO 的出发点是token 级的重要性比率在长序列上会累积误差每个 token 的 ratio 乘起来之后序列级的 ratio 可能偏离很远。它的做法是直接算序列级的 ratio用序列的 log 概率比来代替 token 级比率的乘积。这个思路在长序列生成任务上是有道理的。我跑过一组对比response 平均长度超过 500 token 的时候token 级 ratio 的方差确实比序列级大不少训练后期容易出现 ratio 极端值。换成序列级之后ratio 的分布更集中训练稳定性有改善。但 GSPO 的局限也很明显序列级 ratio 的粒度太粗丢失了 token 级的信用分配信息。在需要精细控制每个 token 更新的场景下比如代码生成或者结构化输出序列级 ratio 的效果不如 token 级。而且序列级 ratio 的计算需要对整个序列做一次额外的 forward算力开销不小。我的判断是如果你的任务 response 很长而且训练不稳定主要来自 ratio 的极端值那 GSPO 值得一试如果你的任务对 token 级控制要求高或者算力紧张那还是老老实实用 token 级 ratio通过裁剪和正则化来控制稳定性。3.5 长度惩罚与奖励塑形被低估的稳定器长度惩罚是我认为最被低估的一个技巧。很多人觉得它只是控制输出长度但实际上它对训练稳定性的贡献很大。GRPO 在长度失控的时候ratio 的分布会变得很宽因为长序列的 log 概率变化范围大短序列变化范围小混在一起训练会让梯度尺度很不均匀。加一个长度惩罚项之后模型在长度上的行为更可控ratio 的分布也更集中。我通常会在 reward 里加一个和长度偏离目标区间程度成正比的惩罚项系数取 0.01 到 0.05 之间。系数太大会压制正常的长回答太小起不到约束作用。奖励塑形是另一个相关技巧比如给格式正确的回答加一个小奖励给重复内容加惩罚。这些塑形项本身不直接提升任务效果但它们能让 reward 信号更平滑减少极端值从而间接提升训练稳定性。我的经验是塑形项的权重不要超过主 reward 的 10%否则模型会去钻塑形项的空子。注意长度惩罚和奖励塑形都会改变 reward 的分布进而影响 advantage 的计算。加这些项之后之前调好的学习率和 clip 参数可能需要重新扫一遍。3.6 学习率与 batch 配置最朴素也最有效说了这么多花哨的技巧最后回到最朴素的两个参数学习率和 batch 配置。我跑过的所有对照实验里这两个参数的影响比任何技巧都大。GRPO 的学习率通常比 SFT 小一到两个数量级常见范围是 1e-6 到 5e-6。学习率太大ratio 波动剧烈训练不稳定学习率太小reward 涨得慢容易卡在平台期。我的做法是从 2e-6 开始如果前 200 步 reward 曲线太平就翻倍如果 loss 震荡明显就减半。batch 配置包括 prompt batch size 和每个 prompt 的采样数。采样数决定了组内 advantage 的估计质量太小方差大太大算力浪费。我的经验是采样数取 8 到 16 之间比较合适具体看任务的 reward 方差。如果组内 reward 方差本来就大采样数可以少一点如果方差小就得多采样才能区分出好坏。prompt batch size 影响的是梯度的平滑程度。太小梯度噪声大太大单步更新慢。我一般会保证有效 batch 里的 response 总数在 256 到 512 之间这个范围在稳定性和速度之间比较平衡。参数常见范围调大影响调小影响学习率1e-6 ~ 5e-6不稳定、loss spike收敛慢、平台期采样数8 ~ 16算力浪费advantage 方差大prompt batch32 ~ 64单步慢梯度噪声大4. 实操流程从零跑通一组对照实验4.1 实验设计与基线选择要判断一个技巧有没有用最靠谱的方法是自己跑对照。我通常的做法是固定一个基线配置然后每次只改一个变量跑 500 到 1000 步对比 reward 曲线、entropy 曲线和 response 长度分布。基线配置我一般这样设学习率 2e-6采样数 8prompt batch 32clip ε 取 0.2不做标准差归一化不加长度惩罚。这个配置比较中性不会偏向任何一个技巧。对照实验的关键是控制变量。很多人跑对照的时候改了 clip 参数又改了学习率最后不知道是哪个起的作用。我的做法是每个实验只动一个参数其他全部锁死。如果时间紧至少保证学习率和 batch 配置不变。还有一个细节是随机种子。GRPO 的训练方差不小同一个配置跑两次结果可能差几个点。我一般会跑三个种子取平均如果三个种子的曲线差异很大说明这个配置本身不稳定得先解决稳定性问题再谈效果。4.2 训练日志的关键指标监控跑实验的时候光看 reward 是不够的。我通常会监控这几个指标reward 均值和方差看整体趋势和组内区分度。如果均值涨但方差降说明模型在收敛但多样性在丢失。entropy看生成多样性。entropy 持续下降是正常的但下降速度太快就是问题。我一般会设一个阈值比如 200 步内 entropy 降幅超过 30% 就报警。response 长度分布看长度是否失控。我会记录长度的均值和标准差如果均值偏离目标区间超过 20%或者标准差突然变大就要检查 reward 设计。ratio 的分布看重要性比率是否出现极端值。我会记录 ratio 的 99 分位数和 1 分位数如果 99 分位数超过 2 或者 1 分位数低于 0.5说明裁剪机制在频繁触发可能需要调整 clip 参数。grad norm看梯度尺度。grad norm 突然 spike 通常是训练不稳定的前兆我会在它超过历史均值三倍的时候暂停训练检查最近的 batch。这些指标我一般会用一个简单的脚本每 10 步打一次存成 csv然后用 matplotlib 画出来。不用搞太复杂的可视化能看出趋势就行。4.3 技巧组合的消融顺序建议如果你手头有多个技巧想试我建议按这个顺序做消融先调学习率和 batch 配置把基线调到稳定收敛。这两个参数没调好后面加什么技巧都是白搭。然后加长度惩罚和奖励塑形把 reward 信号弄干净。这两个改动风险低收益稳定适合作为第一步。接着试 clip-higher 或者双侧裁剪看 entropy 和稳定性的变化。如果 entropy 下降过快clip-higher 值得加如果训练不稳定双侧裁剪值得试。再考虑动态采样看训练速度有没有提升。如果过滤比例超过 50%先回去检查 reward 设计。最后才考虑 Dr.GRPO 的去归一化和 GSPO 的序列级 ratio这两个改动影响大风险也大适合在基线已经很稳的时候做精细化调整。实操心得每加一个技巧至少跑 300 步再判断。GRPO 的训练前期波动大100 步以内的曲线说明不了问题。我见过太多人加了技巧跑 50 步看没涨就撤了其实再跑 100 步可能就起来了。4.4 一个真实的对照实验记录我拿一个数学推理任务做了一组对照基线是标准 GRPO学习率 2e-6采样数 8prompt batch 32。跑了 800 步reward 从 0.32 涨到 0.51然后卡住。entropy 从 1.8 降到 0.9response 平均长度从 280 涨到 420。第一组改动加 clip-higher上界 0.28。reward 最终 0.53比基线高 0.02entropy 最终 1.05比基线高 0.15长度 400。结论是 clip-higher 主要维持了多样性对最终 reward 有小幅提升。第二组改动在基线基础上加动态采样过滤全对全错的组。训练速度提升约 25%reward 最终 0.52和基线差不多。但训练步数少了等效于加速。过滤比例平均 35%。第三组改动在基线基础上去掉标准差归一化。reward 最终 0.49比基线低 0.02但难题上的表现更好简单题上差一些。说明去归一化确实改变了难题和简单题的权重分配。第四组改动clip-higher 加动态采样一起去。reward 最终 0.50比单独用 clip-higher 低entropy 也比单独用低。这就是典型的技巧叠加失效两个改动在 entropy 上相互抵消了。这组实验让我确认了一件事技巧不是越多越好每个技巧都有它的适用条件叠加之前得先确认它们不打架。5. 常见问题与排查技巧实录5.1 reward 不涨了怎么办reward 平台期是最常见的问题。排查顺序我一般是这样的先看组内 reward 方差。如果方差接近零说明模型对所有 response 都给出差不多的分数advantage 没有信号。这时候要么换更难的数据要么调整 reward 设计让区分度更大。再看 entropy。如果 entropy 已经很低比如低于 0.5说明生成多样性不足模型在重复同样的输出。这时候可以加 clip-higher或者在 reward 里加一个 entropy 正则项。然后看学习率。如果前两步都没问题可能是学习率太小梯度更新不够。试着把学习率翻倍跑 200 步看看。最后看数据。如果数据本身难度分布很窄模型很快就学会了那平台期是正常的该换数据了。5.2 entropy 塌了怎么救entropy 坍塌通常发生在训练中后期表现是输出变得重复、模板化。急救措施有几个降低学习率减小每步更新的幅度。这个最直接但会拖慢训练。加 entropy 正则项在 loss 里加一个负的 entropy 项鼓励模型保持多样性。系数一般取 0.01 到 0.05。调 clip 参数用 clip-higher 放宽上界或者用不对称裁剪下界松一点。如果以上都不行可能得回滚到 entropy 还健康的 checkpoint重新调参再跑。硬救有时候会把模型救坏。注意entropy 不是越高越好。任务本身有确定答案的时候entropy 低是正常的。关键是看 entropy 下降的速度和 reward 的关系如果 reward 还在涨entropy 降就降了如果 reward 也平了那才是问题。5.3 训练 loss spike 的排查路径loss spike 通常伴随 ratio 极端值。排查步骤先看 spike 那个 batch 的 ratio 分布。如果 99 分位数超过 3说明有 token 的 ratio 爆了。这时候检查是不是有异常长的序列或者 reward 异常高的样本。然后看 grad norm。如果 grad norm 也 spike 了说明梯度爆炸需要加梯度裁剪。梯度裁剪的阈值一般取 1.0 到 5.0 之间我通常用 1.0。再看学习率。如果学习率偏大ratio 本来就容易波动spike 的概率更高。试着把学习率减半。如果 spike 频繁发生考虑用双侧裁剪把 ratio 限制得更紧或者换 GSPO 的序列级 ratio。5.4 常见问题速查表问题可能原因排查动作解决方向reward 平台期组内方差小看组内 reward 方差换数据或调 rewardentropy 坍塌梯度正反馈看 entropy 曲线斜率降学习率或加正则长度失控reward 与长度隐性关联看长度分布加长度惩罚loss spikeratio 极端值看 ratio 分位数梯度裁剪或收紧 clip训练慢无效组太多看过滤比例开动态采样效果不如基线技巧叠加冲突逐个消融去掉冲突技巧5.5 几个容易忽略的细节第一个细节是 reward 的尺度。不同任务的 reward 范围可能差很多有的 0 到 1有的 0 到 10。reward 尺度变了advantage 的尺度也变学习率的有效值就变了。换任务的时候记得重新扫学习率。第二个细节是 prompt 的长度分布。如果 prompt 长度差异很大短 prompt 和长 prompt 的 response 混在一个 batch 里ratio 的分布会很宽。可以考虑按长度分桶每个桶单独算 baseline。第三个细节是采样温度。GRPO 的采样温度影响组内多样性温度太低组内 response 都差不多advantage 信号弱温度太高 response 质量差reward 低。我一般用 0.8 到 1.0 之间具体看任务。第四个细节是 checkpoint 的选择。GRPO 训练后期 reward 可能还在涨但 entropy 已经很低了这时候的模型虽然分数高但泛化能力可能变差。我通常会保留几个 checkpoint用验证集挑最好的而不是只看训练 reward。6. 我的技巧选型建议跑了这么多对照我现在的默认配置是这样的学习率 2e-6采样数 8prompt batch 32clip ε 取 0.2加长度惩罚系数 0.02开动态采样过滤比例上限 40%不做标准差归一化不用序列级 ratio。这套配置在数学推理和代码生成两个任务上都比较稳reward 曲线平滑entropy 下降速度可控。如果任务对多样性要求高比如创意写作我会加 clip-higher上界 0.28同时把 entropy 正则系数提到 0.03。如果任务对稳定性要求高比如结构化输出我会用双侧裁剪上下界 [0.85, 1.15]学习率降到 1e-6。Dr.GRPO 的去归一化我只有在数据难度分布很宽的时候才会用而且会配合一个滑动平均的缩放因子。GSPO 的序列级 ratio 我只在 response 长度超过 800 token 的任务上试过短序列任务上没看到明显收益。最后说一个我踩过的坑不要迷信论文里的超参。我见过有人直接把 DAPO 论文里的配置搬过来结果在自己的数据上完全不 work。论文的实验条件和你不一样模型规模、数据分布、reward 设计都可能差很远。把论文当参考把对照实验当依据这才是靠谱的做法。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑