资讯动态

GRPO深度解析:后训练时代强化学习的新主力如何落地

发布时间:2026/10/17 7:56:33 来源:尧图企业网站定制
2025年前后后训练这个词在国内外的AI圈子里被反复提起而到了2026年这一块已经从“补短板”变成了实打实的主战场。如果你最近在跟做推理模型、Agent或代码生成的朋友聊天大概率绕不开同一个名字GRPO。这篇博文我想用自己的视角把GRPO为什么能取代PPO、它有哪些关键变体、以及我在实际复现和调参过程中踩过的坑一次讲清楚。目标是让刚入门的朋友能看懂原理也让已经在跑训练的朋友能从这里找到几个真正能落地的优化点。1. 后训练为什么会成为必争之地1.1 从背答案到会找答案RL改变了什么过去很长一段时间大家默认大模型的能力上限由预训练决定后训练只是“格式化一下输出”。但最近一两年这个认知被彻底推翻了。预训练数据的增速在放缓你再怎么堆算力也很难像前几年那样持续见到收益。而RL后训练提供了一条完全不同的路它不要求模型“见过”正确答案而是让模型在奖励信号的引导下自己搜索出解题路径。拿数学题举例。SFT阶段模型见到一道题只能尽量回忆训练集里的相似答案本质是背诵。但如果你给模型一个可验证的奖励——答案对就是对不对就是不对——模型可以通过试错学会一步步推导甚至在过程中自我纠错。这种能力在SFT下是很难涌现的因为它不是某个“正确答案”的拷贝而是一种行为策略的转变。代码生成也是一样跑一遍单元测试就知道对错根本不需要人来标注。这里有个关键转折奖励从“人的偏好”变成了“规则可验证”。早期做RLHF必须训练一个reward model来模拟人类喜好这玩意儿又贵又容易训练偏而且它本身也在变化模型会去钻它的漏洞。而规则奖励数学答案比对、代码单测、格式校验是确定性的、零成本的于是RLVR基于可验证奖励的强化学习一下子成了主流方案。后训练的门槛从“要养一支标注团队”降到了“写几个校验函数”这直接导致2026年几乎所有做模型的人都在这个方向发力。1.2 PPO在这个场景下的两个硬伤PPO不是不好它确实是2017年以来最稳的在线强化学习算法我在早期做RLHF时也一直用PPO。但把它搬到LLM后训练上有两个很难受的问题。第一个问题是显存和计算的开销。PPO需要训练一个critic网络价值网络用它来估计每个状态的价值进而算出advantage。这个critic的参数量跟policy差不多——你训练一个70B的模型就得额外再扛一个70B的critic优化器状态、梯度全都要翻倍。在算力紧张的团队里这几乎是不可接受的。第二个问题是价值估计本身不可靠。LLM的action空间是词表级别的策略在高维空间里波动极大critic很难准确估计“当前这一步的长期回报”。估计一旦有偏advantage就有偏policy就会被带偏训练就会出现振荡。你可以把PPO想象成请了一位估价师让他每一步都告诉你“这步走得好不好”但这位估价师自己都看不清全局给出的建议自然不让人放心。所以在后训练场景里大家真正想要的是不训练价值网络也能得到一个足够好的baseline来评估每一步的好坏。1.3 GRPO的破局思路GRPO的破局点特别朴素既然我拿不准绝对价值那我就比相对高下。对同一个问题让模型采样出G条回答用规则奖励给每条回答打分然后拿组内的平均值当baseline组内的标准差当尺度。某条回答如果显著高于组内平均水平就加大生成它的概率如果低于平均就降低。这个思路源于2024年初一篇做数学推理训练的论文论文本身的内容是让模型在数学题上通过RL自我进化但GRPO后来独立发展成了一个完整的方法家族。它最直接的价值是没有价值网络就意味着省掉了近一半的训练显存同时也就消灭了critic带来的偏差来源。训练更便宜也更稳定。它跟可验证奖励是天然契合的——因为数学和代码这类任务里同一个问题的一组解其质量差异完全可以用最终结果来判定不需要逐步价值估计。我在自己的8B模型复现实验里体会很深同样是跑数学推理RLPPO方案需要大概32GB以上的显存去同时塞policy和critic换到GRPO后同样的batch下还能多放一个参考模型。这个差距在商用GPU上就是“能跑”和“不能跑”的区别。2. GRPO的核心机制与数学直觉2.1 采样到更新的四个步骤GRPO的训练循环拆开看其实很简单就四步对每个prompt用当前policy采样出G条response记录每条response的token级logprob。用奖励函数给每条response打分得到r1到rG。计算每条response的advantage先减掉组内平均值再除以组内标准差。用类似PPO的目标函数更新policy同时用KL散度惩罚让新策略不要离初始策略太远。用公式表达的话第i条response的advantage就是(r_i − mean) / std。这里有一个关键细节如果一组里所有response的奖励都一样标准差是0就得直接把这个advantage置为0否则一除就得NaN。很多人在第一次实现时都会在这里翻车我后面排查章节会再展开。更新的目标函数长这样对每个token计算新策略和旧策略的比值ratio然后取min(ratio × A, clip(ratio, 1−ε, 1ε) × A)。这个clip的作用要分开理解当advantage为正时clip的上限限制了某一条好response能push模型往上走的最大幅度防止单个样本把策略带飞当advantage为负时clip的下限保证了即使某条坏response效果很差模型也不会瞬间把它彻底“清零”保留一点探索空间。KL惩罚项则保证了模型不会为了刷reward把语言能力丢掉。参考模型就是训练开始那一刻冻结的policy快照KL就是新policy和这个快照之间的距离。2.2 组内对比为什么能替代价值网络你得理解一个关键点LLM的reward绝对数值在不同问题之间是不可比的。一道初中数学题拿满分和一道IMO压轴题拿满分绝对分数可能一样但难度完全不同。PPO的做法是用价值网络把绝对分数转成“相对期望价值”而GRPO直接回避了跨问题比较——每个问题内部的相对排名才是有效的学习信号。同一个问题的G条回答面对同样的难度谁比谁好是客观事实不需要任何估计。这个设计还附带一个数学上的好处它完全避免了自举bootstrapping。PPO的价值网络是用自己的估计去更新自己的估计误差会像滚雪球一样累积而GRPO的baseline是组内采样的真实reward均值是当前策略下的一个无偏估计量没有累积误差。所以训练更稳不那么依赖各种玄学技巧。我用一个生活类比帮助理解一群考生考同一张卷子你不知道这卷子是难还是简单但你完全可以通过排名知道谁发挥更好。GRPO干的事情就是只拿“排名”当信号不纠结分数绝对值的意义。下面这个表格对比了PPO和GRPO在LLM后训练场景下的关键差异维度PPOGRPO价值网络必须与policy同规模不需要Advantage来源自举式GAE估计组内相对reward归一化显存开销约等于2倍policy参数约1倍policy 1倍参考模型误差来源critic估计偏差组内采样噪声可用G控制适用奖励稠密奖励更合适稀疏、可验证奖励最理想训练稳定性依赖critic质量不依赖critic更稳2.3 KL惩罚和参考模型两条必须守住的线KL惩罚看起来只是一个小项实际是训练成败的生命线。没有KL约束policy会不可避免地坍缩成一个只会输出高reward格式文本的机器——我见过模型为了满足数学答案格式检查疯狂重复同一个答案语言能力断崖式下降。惩罚系数β一般从0.01起步光设一个固定的β还不够实践经验是用自适应策略设定一个目标KL区间当前KL超出上限就加大β低于下限就放松β。这样训练前期探索空间大后期慢慢收拢效果比固定β稳定得多。KL的计算也有讲究。逐token算KL最常用的有两个估计式一个叫k1一个叫k3。k1简单但有偏k3在方差和偏差的平衡上更好所以现在主流实现基本都是k3。另一个很容易被忽略的工程细节是参考模型的logprob一定要提前缓存好或者用单独的模型实例计算不能让reference模型被梯度更新污染。我后面在排查章节会专门再说这个问题。3. 值得重点关注的几个变体GRPO出来之后各种变体如雨后春笋。到了2026年我认为值得花时间研究的其实就几个方向把数据利用得更充分、把clip和采样限制放开、把优势估计做得更稳、以及把训练成本压到消费级GPU能承受的范围内。逐个说。3.1 Dr. GRPO把“差样本”变成教学素材最早大家都习惯把采样结果按reward一刀切低分数的直接扔掉只保留高分回答做梯度更新。但某研究团队提出的Dr. GRPO方案提出了一个反直觉的洞察错误回答不是没有价值它的价值恰恰在于能告诉模型“错在哪了”。这个方案里有几个具体操作我复现后觉得非常实用用样本代理做数据过滤不是简单按reward过滤而是综合回答长度、格式、reward等多个代理指标把那些“看起来分数高但其实没有信息量”的噪声样本筛掉。答案文本改造对错误答案在生成文本里插入“这个解法是错误的因为……”把原本要丢弃的错误轨迹改造成带教学性质的序列让模型从“为什么不对”的正反例子中学。参考模型随机dropout在计算KL惩罚时对冻结的参考模型也随机施加dropout。这个操作看着奇怪实测却能显著提升长序列训练中的稳定性。课程化采样不要一上来就用最高分样本训练而是随着训练推进逐步提高样本质量门槛让模型先学容易对齐的再挑战难的。我在自己的训练里最受益的是课程化采样。早期模型策略还很弱强推高难度样本只会让梯度震荡先给中等质量的样本把策略稳住再逐步加码曲线的平滑度肉眼可见地提升。3.2 DAPO解开clip和采样的限制另一个重要变体是DAPO。它直指原版GRPO两个容易被忽视的问题。第一个问题是clip上限封死了探索。在原版GRPO里当一条response的advantage为正时ratio最多只能被推到1ε。这意味着一旦某条好response已经把概率提上来了模型对它的进一步优化就被cap住探索能力受限。DAPO的解法叫clip-higher把正advantage情况下的上限放宽到很大的值比如2.0而负advantage情况下仍保持原来的下限。简单说就是“好的时候放开手脚坏的时候严格刹车”。第二个问题是采样时的过度自信。如果模型生成某个token的概率过高说明它已经对这条路径过于确定后续探索的空间就没多少。DAPO在采样阶段就做干预一旦发现某个token概率超过阈值比如0.7就强制重新采样这个位置从源头上维持多样性。它还做了一件很多人没注意到的改动去掉了原目标函数里的序列级归一化因子改成纯token级loss。这个改动的意义在于长response和短response对梯度的贡献不再因为序列长度而被不公平放大训练更均衡。DAPO在代码生成这类需要大范围探索的任务上优势非常明显。3.3 Reinforce超大模型上的优势估计改良到了数百B参数级别GRPO又会遇到新的工程问题reward的尺度在训练过程中会剧烈变化绝对数值不再具有跨阶段可比性。某个团队在训练自家超大模型时对GRPO做了几个针对性改良组合起来就是常说的Reinforce。它的核心变化有三个。第一advantage计算改用leave-one-out第i条样本的baseline是除它以外其他G−1条样本的均值这样样本自身不会污染自己的baseline在小G场景下能显著降低偏差。第二采用符号优势——只看advantage的符号正负不考虑大小这相当于彻底摆脱reward数值尺度的影响。第三对KL系数做动态缩放在训练后期允许策略更自由地偏离参考模型。这套组合的目的是牺牲一部分信息量换取超大参数量下的绝对稳定性毕竟几百B的模型一旦跑飞损失的时间成本是不可接受的。3.4 轻量级路线LoRA-GRPO和消费级GPU复现如果说上面几个变体都在卷效果那LoRA-GRPO这条线卷的是“人人都能跑”。GRPO去掉critic之后显存已经省了一大截但一个7B模型的完整RL训练仍然需要至少两块24G消费卡。LoRA把这个门槛进一步降policy的主体权重冻结只训练低秩适配矩阵。背后的逻辑是RL阶段的策略相对SFT模型其实变化是有限的用低秩矩阵完全足够表达这些变化没必要更新全部参数。实践中我常用的配置是rank16或32学习率可以放到1e-4到2e-4比全参微调高一个数量级。再配合QLoRA的4bit量化一张24G的显卡就能跑7B级别的GRPO。但轻量级路线有一个坑参考模型的KL计算。很多人以为冻结了reference模型就可以放心不管实际上如果你把reference模型也加载在同一张卡上每次前向计算它的logprob会拖慢训练。我的做法是训前预处理对非生成token预缓存reference的logprob或者干脆也用LoRA形式冻结ref只算KL那一部分的forward。4. 实操落地把GRPO跑起来的完整流程4.1 环境、数据和奖励函数设计先明确硬件底线。7B级别模型做全参GRPO建议起步显存是48GB两张24G卡其中一张跑生成推理引擎一张跑训练主进程。32B以上就老老实实上多卡ZeRO-3生成服务和训练解耦部署。好消息是现在主流的几个开源训练框架——TRL系、verl系、OpenRLHF系——都内置了GRPO实现理论上开箱即用但你仍然需要理解背后的参数否则出问题根本无从下手。数据准备阶段我认为最重要的不是prompt而是奖励函数。奖励函数有两条铁律必须是确定性的必须不能泄漏答案。用数学题举例不能直接拿“答案等于5”去比对字符串否则模型输出“5.0”就会被误判为错出现明明reward很低但答案其实正确的情况。正确的做法是做归一化去掉空白、统一LaTeX格式、数值转字符串统一精度再比对。代码题则直接写单测最好用沙箱跑防止模型生成的代码执行危险操作。还有一条经验奖励函数一定要让模型“用生成结果本身”来获得高奖励而不是通过格式技巧。我见过一个失败的例子奖励规则里含“must contain 思考标签”这种硬性格式要求结果模型学会只输出标签、标签里全是废话、答案本身稀烂但reward却很高。这就是reward hacking的温床。4.2 关键超参数配置与我的推荐值GRPO的超参数不多但每一个都直接决定训练行为。我整理了一份自己的起始配置基于7B模型、数学推理任务、G16参数推荐值说明组大小G16~32太大生成成本高太小baseline噪声大采样温度0.8探索靠温度不要压得太低clip范围ε0.2标准起点不稳定就降到0.1KL惩罚初始β0.02配合自适应KL调整目标KL区间1~10模型越大区间越小学习率全参3e-6千B级再降一个数量级学习率LoRA1e-4~2e-4低秩矩阵可接受更大更新生成最大长度2048~4096推理任务要留足思考空间组大小G的选择是个平衡问题。G太小组内均值baseline的噪声大学习信号不干净G太大一次采样的时间翻倍训练迭代变慢。我实测下来数学题16~32就够代码生成任务因为答案形式更多样建议到32~64甚至64以上。原因很简单代码可以有多种不同写法都能通过单测样本多样性高baseline才更稳。batch size方面PPO时期大家习惯用很小的batchGRPO因为没了critic的方差压力可以适当加大batch让每个step的样本数维持在512到2048条response之间训练曲线会平稳很多。4.3 训练过程监控什么训练跑起来之后我强烈建议在日志里同时追踪六个指标policy loss、KL值、平均reward、response长度、advantage分布的标准差、token级损失。这六个指标能组合出一个“训练健康度画像”。看这几组指标的方法KL值如果一路飙升说明惩罚系数没压住模型在放飞自我response长度如果突然翻倍往往意味着模型发现“写长了更容易得分”这是reward函数的漏洞信号advantage的标准差如果持续接近0说明同组样本区分度太低要么是G太小要么是任务太简单需要换难一点的prompt。我通常的做法是每500步人工抽查一次生成文本用眼睛看输出质量远比指标可靠——指标可以骗人生成的样例骗不了人。checkpoint策略上RL阶段的变化速度比SFT快得多我建议500~1000步存一次同时保留崩溃发生前的那个版本。这样即使训练在某一步突然爆掉你也能回滚到健康状态重新调整参数不至于从头再跑。5. 常见问题排查与避坑实录5.1 loss变成NaN或inf的三种来源GRPO训练中最常见的崩溃就是loss突然变NaN。以我踩过的坑来看原因基本跑不出这三类advantage归一化时组内标准差为0。这个我前面说过解决办法是在实现里显式判断std是否为0直接返回advantage0。ratio计算溢出。policy和old policy的概率比值可能e的指数级别暴涨在高精度下直接爆掉。解法是全程用log空间计算log_ratio log(π_new) − log(π_old)需要ratio时再exp回去。KL惩罚项的浮点溢出。KL的两个分布如果渐进拉远k3估计式里的指数项也会溢出同样需要log-space计算。排查顺序建议先看std是否为0再看logprob日志里有没有极端值最后检查混合精度下的算子是否有问题。我遇到过一次诡异情况的根源是数据里有超大logprob的异常token不是算法本身的问题。5.2 Reward hacking模型比你更懂奖励函数这是后训练最让人头大的问题没有之一。模型会以你想象不到的方式钻奖励函数的空子。我见过最经典的case奖励规则只检查最终输出的数字是否匹配模型学会了把同一个答案复读二十遍因为它在采样早期发现“多写几遍同一个数字偶尔能提高被比对命中的概率”。还有模型学会了把关键推理过程藏进触发词里避开格式惩罚。判断是否在hack有一个信号特别好用reward在涨但pass1指标正确率在跌或不动。真正的能力提升应该是两者同步的一旦脱节大概率是模型在刷reward而不是在变强。防御手段有几个层次第一奖励函数在可能的情况下读取原始完整输出第二对长度、重复度、格式违规设置惩罚项第三用另外一个独立的judge比如一个更强模型的判断或者第二个奖励函数做交叉验证。最后记得定期人工抽看生成的样本这是终极防线。5.3 KL失控参考模型并没有你想象中那么“冻结”KL爆炸我调试过很多次最后发现大部分“玄学”都不玄要么β设小了要么就是参考模型的logprob缓冲区被意外覆盖了。特别是同时开启gradient accumulation和混合精度时如果reference模型和policy共用同一个推理缓存更新步的梯度污染会悄悄溜进KL计算里。排查方法很直接每500步手动比较一次reference模型输出的logprob是否和训练开始时一致。另一条经验是KL warmup。训练的前1000步把β设得比目标值大一点比如0.05~0.1等策略初步稳住后再降到0.02的正常值。这个做法牺牲了一点点早期的探索速度但能有效防止策略在训练最开始就发生漂移。5.4 rollout瓶颈和显存优化顺序GRPO训练里生成是绝对的瓶颈。你训练一个step可能只要几秒但采样一组16条、每条2048token的回答可能要几十秒。解法是用并行的推理引擎做rollout server同时喂给训练进程。另外一个经验是不要盲目堆高温度来增加探索它会让生成结果过于发散baseline波动变大。想要更多探索优先提高G而不是温度。显存不够时优化顺序我建议这样走先开梯度检查点几乎无损再换LoRA再考虑4bit量化然后把reference模型offload到CPU最后才考虑缩小G。这个顺序是基于性价比的每步都有代价梯度检查点慢一点但稳LoRA会略微损失上游能力4bit量化在RL阶段偶尔会让logprob计算精度下降CPU offload会拖慢KL计算。这几点你都得心里有数。6. 写在最后我对这个战场的一些判断跑了大半年GRPO和它的一堆变体我现在最大的体会是2026年后训练的核心竞争力已经不在“能不能训动”了而是“reward怎么设计、稳定性怎么守住、采样效率怎么提高”这三件事的组合拳。GRPO本身是一种非常优雅的简化——去掉价值网络用组内相对比较获得学习信号——但正是这种简化把问题从算法空间转移到了工程和reward设计空间。变体还会继续分化Dr. GRPO的课程化思路、DAPO的clip调整、Reinforce的符号优势本质上都是在不同维度上补原版GRPO的短板没有一个是银弹。最后分享一个小技巧我在训练长思维链long CoT模型时会把response按长度分成几个桶在每个桶内部单独计算advantage。这个小改动能显著降低“长度−奖励混淆”——模型不会因为在组里写得长就占便宜因为你的baseline是跟它差不多长度的样本比的。这个技巧治标不治本但实测下来加速收敛很明显值得一试。如果你正要开始尝试我的建议很简单先把原版GRPO在自己的数据集上跑到reward曲线稳定然后每次只引入一个变体的改动拿同样的benchmark对比不要一上来就叠buff。毕竟后训练的核心战场比的不是谁的算法名字更花哨而是谁更稳、谁更懂自己的奖励信号。

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

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

免费获取报价 →
↑