1. 从GRPO到GFPO一场关于“减法”的算法进化史如果你最近在折腾大模型的对齐训练尤其是想用强化学习RL让模型变得更聪明、更听话那你肯定绕不开一个词GRPO。从去年开始它就像一阵风吹遍了整个开源社区。但很快大家就发现直接用GRPO开训结果可能不是模型变聪明了而是你的心态先崩了——训练曲线像坐过山车模型输出要么越来越短要么突然冒出几个“离群”token把整个策略带偏。这其实就是大模型对齐算法演进的核心故事。从DeepSeek提出GRPO开始到后来的DAPO、VAPO、GMPO、GSPO、CISPO再到最新的GFPO这一系列名字看起来眼花缭乱但背后的设计哲学却出奇地一致做减法。没错不是堆砌更复杂的网络结构而是想方设法把训练过程中那些不稳定、低效、冗余的环节给“减”掉。最初的GRPO做的是一个大胆的“减法”直接把传统PPO算法里的价值网络Value Network给扔了。价值网络是干嘛的它就像一个评论家负责评估每个状态在LLM里就是每个生成的token位置未来能获得多少回报。但这个评论家训练起来特别费劲还占显存。GRPO的思路很巧妙既然我们一次性能为同一个问题生成多条回答一个组那我直接用组内回答之间的相对好坏比如奖励的标准化分数来作为优势函数的估计不就不用单独训这个评论家了吗这招一下子省了近50%的显存让很多资源有限的团队也能玩得起在线RL。公式看起来也不复杂L_GRPO 平均_over_Groups [ 平均_over_Tokens ( min(概率比 * 优势, clip(概率比) * 优势) ) ]。核心就是组内归一化的优势估计加上逐token的重要性采样权重裁剪。我刚开始用的时候感觉确实轻快但跑着跑着问题就来了。长一点的思维链CoT任务模型学着学着就不愿意输出了答案越来越短有时候训练loss会突然炸一下查来查去发现是某个token的概率比出现了极端值把梯度带飞了。所以你看GRPO解决了“价值网络”这个大头但引入了新的问题算术平均对噪声敏感token级操作在长序列里方差大。于是后续的算法演进就围绕着如何解决这些新问题继续做“减法”。GMPO减掉了对离群值敏感的算术平均换成了更平滑的几何平均GSPO更激进它觉得逐token算权重太麻烦且不稳定干脆把优化粒度从token提升到了整个序列CISPO则说裁剪token的概率比本身会伤害模型的关键思考不如只裁剪最终的重要性权重而GFPO我理解它是在组Group这个层面又做了一次过滤把组里的“差生”样本先踢出去只让“优等生”参与梯度更新。这一路下来算法的设计就像是在玩一个“精准拆弹”的游戏每个新版本都瞄准前一个版本最疼的那个点用更精巧、更简约的设计去化解。这不仅仅是技术的迭代更是一种工程哲学的体现在追求性能巅峰的路上有时候少即是多。2. 深入核心各版本算法如何“精准拆弹”2.1 GRPO开创性的“价值网络”移除术让我们再仔细看看GRPO这个起点。它最革命性的点就是用组内相对优势替代了需要单独训练的价值网络。具体怎么做的呢假设我们有一个提示词prompt用当前的策略模型采样生成G条不同的回答。每条回答会得到一个奖励分数R比如根据答案是否正确来打分。传统方法需要价值网络来估计每个token处的价值V然后计算优势A R - V。GRPO则直接计算组内优势Â_i (R_i - μ) / σ其中μ和σ是这个组里所有回答奖励的均值和标准差。这样做的好处极其明显训练流程简化资源消耗大降。价值网络不仅结构复杂其训练和目标拟合未来回报的期望本身也是不稳定的来源之一。去掉它相当于搬走了训练路上的一块大石头。我实测下来在相同硬件上GRPO的可用批量大小batch size能比PPO提升近一倍这对于收敛速度和稳定性都是利好。但是GRPO的简化也付出了代价。它的损失函数是对组内所有样本、样本内所有token的损失进行算术平均。这就带来了两个“坑”长度偏差一个生成长度100的回答和一个长度10的回答它们对总损失的贡献被token数量平均了。长回答里每个token的梯度更新信号被稀释模型会发现生成短回答“性价比”更高容易导致输出萎缩。离群值敏感算术平均意味着只要有一个token的重要性采样权重ρ新老策略概率比出现了极端值比如极大或极小这个极端值会严重扭曲整个批次的梯度方向导致训练突然不稳定loss剧烈震荡。GRPO就像一个勇敢的开拓者它证明了没有价值网络也能走通RLHF的路但留下的坑需要后来者填补。2.2 GMPO用“几何平均”抚平训练曲线的波澜GMPOGeometric Mean PPO的改进非常聚焦直指GRPO的第一个痛点算术平均对离群值太敏感。它的解决方案充满了数学美感——把算术平均换成几何平均。我们回忆一下GRPO的损失是对min(ρÂ, clip(ρ)Â)这一项求平均。GMPO则改变了平均的方式。它先对每个回答内部的所有token的概率比ρ取几何平均得到一个代表整个序列综合概率变化的因子再用这个因子去乘以优势估计Â。公式可以简化为L_GMPO 平均_over_Groups [ (几何平均_over_Tokens(ρ)) *  ]。几何平均有个天然的特性它对极端值不敏感。举个例子一组数是[1, 1, 1, 100]算术平均是25.75而几何平均约为3.16。那个巨大的“100”在几何平均里被显著压制了。映射到训练中即使某个token的概率比出现了异常波动它对整个序列损失的影响也会被几何平均大大削弱。这个改动带来的效果是立竿见影的。根据社区实践在同样的DeepSeek-R1模型上使用GMPO能在相同计算量下在AIME等数学推理基准上提升超过4个百分点的性能。更妙的是因为几何平均更稳定我们甚至可以放宽裁剪clip的范围比如从GRPO常用的(0.8, 1.2)放宽到(exp(-0.4), exp(0.4)) ≈ (0.67, 1.49)让策略在训练中有更大的探索空间而不用担心因个别token的激进探索导致崩溃。GMPO做的“减法”是减掉了训练中对噪声的过度反应让学习过程更平滑。2.3 GSPO抛弃Token级优化拥抱序列级稳定如果说GMPO还在token层面做文章那么GSPOSequence-level PPO的思考就更进一步了。它认为在长序列生成尤其是思维链任务中逐token地计算和裁剪重要性采样权重本身就是方差的主要来源。特别是在MoE混合专家模型中不同token可能被路由到不同的专家子网络导致token之间的概率比ρ计算本身就不够一致加剧了训练的不稳定。GSPO的“减法”做得更彻底它完全移除了token粒度的优化。具体做法是对于一个生成长度为|o|的回答先计算所有token对数概率比的平均值(1/|o|) * Σ log(ρ_t)然后取指数得到一个序列级的重要性采样权重s exp(平均(log(ρ)))。这个s可以理解为整个回答在新老策略下概率分布的总体比例变化。在计算损失时GSPO直接用这个单一的s值代替所有token各自的ρ_t参与裁剪和加权L_GSPO 平均_over_Groups [ min(s * Â, clip(s) * Â) ]。注意这里的裁剪是对整个序列的s进行的计算出的损失会均匀地作用到该序列的每一个token上。这样做的好处非常明显方差极大降低消除了长序列中逐token计算带来的累积方差。对MoE极度友好无论token被路由到哪个专家整个序列共享同一个更新信号彻底解决了因路由变化导致的权重“抖动”问题。实践中不再需要复杂的“路由重放”等稳定技术。更适合长上下文模型不再需要担心序列中某个局部token的权重异常注意力可以更集中在整个回答质量的提升上。实测在Qwen2.5-32B这样的MoE模型上GSPO相比基线方法能带来显著的稳定性和效果提升。GSPO的哲学是对于语言生成这种强序列依赖的任务我们应该以“句子”或“段落”为单位进行优化而不是纠结于每个“字”的微小波动。2.4 CISPO关键Token守护者只剪权重不剪概率然而GSPO的序列级操作也引发了一个新的担忧会不会把澡盆里的孩子和洗澡水一起倒掉了在复杂的推理任务中模型生成的一些关键性token比如表示暂停反思的“Wait”表示重新检查的“Recheck”或者推理中的关键转折词往往包含重要的决策信息。对这些token的概率进行粗暴的裁剪clip可能会损害模型的思考能力。CISPOClipped Importance Sampling PPO提供了一个更精细的解决方案。它没有回到GRPO的逐token裁剪老路而是提出了一个折中方案保留所有token的原始概率比ρ不对其进行裁剪转而裁剪最终用于梯度加权的重要性采样权重Importance Weight, IW。具体来说在计算每个样本的损失时我们先得到未裁剪的重要性权重IW ρ * Â。然后我们只对这个最终的IW值进行裁剪IW_clip clip(IW, 1-ε, 1ε)。这个被裁剪后的IW_clip才被用于计算损失。这样做的好处是双重的保护关键token模型生成关键反思token的概率可以自由地大幅变化ρ可以很大或很小不会因为被裁剪而抑制了这种重要的探索行为。控制更新幅度通过裁剪最终的权重仍然能有效限制单次更新的步长保证训练的稳定性。它控制的是梯度更新的总强度而不是干预模型内部概率的分布。根据相关论文报告采用CISPO后模型在长链式思维任务上表现更佳并且仅用DAPO算法50%的训练步数就能达到相当的性能。CISPO做的“减法”是减掉了对策略概率本身的直接干预把自由还给模型只对更新的力度进行约束。2.5 GFPO终极过滤只向“好榜样”学习到了GFPOGroup Filtered PPO演化的思路从优化计算过程延伸到了优化训练数据样本的利用效率。虽然其完整细节有待官方正式发布但从其思想和一些实践推测GFPO的核心是在GSPO的序列级优化基础上增加了一个前置的组内过滤机制。我们可以想象这样一个场景对于同一个问题我们采样生成了8条回答一个组。按照GRPO/GSPO我们会用这8条回答的奖励计算相对优势然后全部用于更新模型。但这8条回答的质量可能参差不齐有几条完全错误有几条部分正确只有一两条是真正优秀的。让错误答案也参与梯度更新虽然其优势估计是负的但依然会引入噪声甚至可能干扰模型从优秀样本中学习。GFPO的解决方案很直接在组内进行筛选。它可能使用一个轻量级的奖励模型或利用主奖励模型快速对这G条回答进行评分然后只选择奖励最高的Top-K条比如Top-4样本用这些“精英样本”来计算组内的均值和标准差进而计算优势函数和进行策略更新。这相当于在每次更新前先做了一次“质量过滤”确保模型主要从当前策略下产生的较好样本中学习。这进一步减少了低质量样本带来的梯度噪声提升了训练效率和学习目标的清晰度。GFPO的“减法”减掉的是低质量训练样本的干扰让每一次梯度下降都更“纯净”、更有效。3. 实战指南如何为你的任务选择算法面对GRPO、GMPO、GSPO、CISPO、GFPO这一连串的算法到底该怎么选别慌我们可以根据任务特性、模型结构和资源情况来做决策。下面这个表格可以帮你快速理清思路算法优化粒度平均方式裁剪对象核心优势适用场景GRPOToken级算术平均Token概率比 (ρ)开创性省显存实现简单快速原型验证资源极度紧张短文本任务GMPOToken级几何平均Token概率比 (ρ)抗离群值能力强训练曲线平滑通用任务尤其当训练出现不稳定震荡时GSPO序列级算术平均序列权重 (s)超稳定MoE友好长序列福音MoE模型训练长思维链CoT任务追求极致稳定CISPOToken级算术平均重要性权重 (IW)保护关键Token适合复杂推理需要模型进行深入反思、规划的多步推理任务GFPO序列级算术平均序列权重 (s)样本质量高学习效率高推测对样本质量要求高希望加快收敛速度的任务选择策略可以遵循以下路径新手入门或资源有限从GRPO开始。它的代码实现最普及相关资料最多能帮你快速理解组相对策略优化的整个流程。把它当作一个可靠的基线Baseline。遇到训练不稳定、loss震荡切换到GMPO。这是解决GRPO离群值敏感问题最直接、改动最小的升级。通常只需要修改损失函数中求平均的那一行代码。训练MoE模型或超长文本生成模型首选GSPO。序列级优化与MoE架构是天作之合能从根本上避免路由变化带来的不稳定。对于生成数百甚至数千token的CoT任务GSPO的稳定性优势无可替代。专注于数学、代码或复杂逻辑推理考虑CISPO。这类任务中模型的“灵光一现”关键token至关重要。CISPO能确保这些关键的探索不被裁剪机制扼杀。追求更高样本效率和更纯净的梯度关注GFPO。如果你有额外的计算资源可以用于样本过滤或者任务奖励信号清晰易于快速评判GFPO代表的“优质样本学习”思路可能带来额外的效果提升。在实际项目中我通常会采用“GSPO为主CISPO为辅”的策略。先用GSPO确保训练过程的大局稳定尤其是在模型预热阶段。在模型具备一定能力后如果想进一步激发其深度推理潜力可能会在后期微调阶段尝试引入CISPO的机制。而GMPO则是我工具箱里的“稳定器”任何时候发现训练有抖动苗头都可以考虑引入。4. 设计哲学的共鸣简化、稳定、再简化回顾从GRPO到GFPO的演进之路我们能清晰地看到一条“简化-稳定-再简化”的技术螺旋。第一层简化GRPO革了价值网络的命用组内相对估计这一巧思大幅降低了RLHF的门槛。这是结构上的简化。第二层稳定GMPO/GSPO解决了GRPO简化后带来的副作用。GMPO用几何平均稳定数值GSPO用序列级操作稳定更新。这是算法鲁棒性的增强。第三层再简化CISPO/GFPO在稳定的基础上寻求更优。CISPO简化了优化目标从约束概率到约束更新量GFPO简化了学习样本从全量到优质。这是训练效率和效果的精炼。这个过程完美诠释了工程师的智慧最好的优化往往不是做加法而是做减法。不是设计更复杂的网络而是重新思考问题找到那个导致不稳定的核心环节然后用更优雅、更简单的方式化解它。每一次“减法”都直指一个具体的工程痛点离群值、长序列方差、MoE路由、关键token抑制、低质样本干扰。这给我们这些实践者最大的启示是当你在训练中遇到问题时不要只想着调大学习率、增加网络层数或者收集更多数据。不妨停下来想想当前流程中哪个环节是多余的、哪个环节是噪声源、哪个环节的设计假设已经不符合当前任务了或许一个类似“几何平均代替算术平均”的简单改动就能带来意想不到的效果提升。算法的故事还在继续社区里已经有人在讨论XFPO、EFPO等新的可能性。但无论名字怎么变这条通过“做减法”来实现“更稳定、更高效”训练的核心逻辑已经成为了大模型对齐领域一条宝贵的设计原则。