
先给结论大模型后训练Post-Training在2024到2025这两年经历了一次隐形但彻底的范式转移。如果你还停留在后训练RLHF的认知或者刚准备把RLHF搬到推理模型上我建议你先停一下。这篇文章我从RLHF讲起一路拆到GRPO再聊到Agentic RL重点不是罗列paper而是把每个阶段背后的为什么换方案说透顺带把我自己在训练流水线上踩过的坑、调过的参数、返工过的实验全部交代出来。我默认读这篇的人至少跑过SFT知道什么是交叉熵损失。如果你对RLHF只有模糊概念没关系我会尽量用大白话解释每一步在做什么。但如果你已经开始做RL训练那这篇文章里的一些魔幻细节你一定会感同身受。1. 先捋清楚为什么预训练模型需要最后一公里的调校1.1 预训练教会了模型什么又漏掉了什么预训练阶段干的事情本质是用海量文本去拟合一个语言分布。模型在里面学到的是一种宽泛的世界知识——词汇、句式、常识、逻辑关系、代码语法。但注意它学的是下一个词是什么的概率而不是这句回答是否符合用户意图。我常说一句话基座模型是个极度聪明但不懂规矩的天才。你问它一个问题它能继续写一大堆话但可能完全无视你的格式要求你让它做数学题它甚至可能一边推理一边自说自话地跑偏。这不是模型笨而是它的训练目标里根本没有遵循指令和给出正确答案这两个维度。所以后训练要解决的本质问题有三个行为控制让模型学会按照人类的期望格式输出遵循指令约束。目标对齐让模型的生成目标从概率上像人话变成真正满足用户需求。能力解锁特别是推理和工具使用这些能力在预训练里只以极弱的形式存在需要针对性的强化才能稳定发挥。我把这个阶段理解为从聪明到可用的距离。这个距离有多远取决于你用哪条后训练路线。1.2 三条后训练路线分别解决什么问题现在的后训练基本可以粗分成三条路线它们不是互相取代而是各管一段SFT监督微调拿人工标注的高质量问答对做行为克隆。模型学的是模仿。它的优点是稳定、快速、成本低缺点是天花板低——模型只会模仿见过的分布遇到没见过的复杂问题就抓瞎。偏好优化 / RLHF在SFT基础上引入人类偏好信号让模型学会什么回答更受青睐。典型代表是PPO和DPO。它对对话风格、安全性、帮助性的提升非常显著但它的信号本质是人的主观评价对需要客观验证的任务比如数学、代码有点使不上力。RLVR / GRPO把奖励从人打分的偏好换成规则可验证的正确性。典型做法是给模型一道题让它生成答案然后程序自动判断对错再用这个对错信号去更新策略。它对推理、代码、数学这类有标准答案的任务效果爆炸好也是近一年推理模型开挂的核心秘密。选择逻辑其实很简单任务形态决定算法形态。你希望模型变会说话就用偏好优化你希望模型变会做题就用可验证奖励的RL你希望模型变会干活那就要上到Agentic RL。1.3 一上来就上RL我建议你先冷静很多团队最容易犯的错是跳过SFT直接上PPO或GRPO。我理解这种冲动但结果往往是灾难性的。GRPO这类在线强化学习虽然厉害但它依赖一个前提模型已经具备基本能力。如果模型连正确答案都生成不出来你给它的奖励全是零策略梯度根本不知道该往哪走。就像训练一个连投篮都不会的人去打比赛你给他再多的比赛反馈也没有用必须先关起门来练基本功。所以我的标准动作是先用SFT把怎么按照要求组织答案这个反射行为训出来再做RL进一步挖掘模型在解空间里的搜索能力。SFT解决的是下限RL解决的是上限顺序不能乱。2. RLHF是起点也是天花板经典PPO框架为何撑不起推理场景2.1 一个RM加上四个PolicyPPO到底在做什么传统的RLHF用PPO优化很多人被那一堆组件吓住了。其实拆开看就四样东西Actor策略模型要训练的模型它负责生成回答。Reference Model参考模型SFT阶段冻结的副本用来约束Actor别跑太远。Reward Model奖励模型负责给生成的回答打分。Critic价值模型估计每个状态下未来还能得多少分用于降低策略梯度方差。整个流程是Actor对prompt生成回答RM打分Critic预估价值再用PPO的clip和KL散度去更新Actor。这里最关键的设计是KL散度约束——它像一根保险丝防止Actor为了拿高分而彻底偏离人类语言习惯。没有这根保险丝模型会迅速退化成只会输出高分咒语的疯子。这里我多说一句Critic是一个被严重低估的难点。它的任务是估计从当前token开始最终能拿到的预期奖励但语言生成的状态空间是天文数字价值估计极不稳定。这也是为什么PPO训练LFHF时经常出现loss剧烈震荡——很多情况下不是Actor的问题是Critic根本没估准。2.2 我的RLHF训练配方数据、超参、验收清单我做过一段时间的RLHF实验踩了很多坑之后沉淀出一套固定配方RM训练数据至少3万条以上pairwise偏好对来源是采样多版答复让人对比排序。低于这个量级RM的泛化能力非常可疑训练时reward噪声会淹没真实信号。RM准确率门槛训练前先做五折交叉验证pairwise accuracy不上85%就别往下走。我见过太多团队拿着75%准确率的RM去跑PPO最后模型越训越怪。KL系数初始给0.05到0.1之间训练中动态观察。如果KL散度长得太快每1000步翻倍说明奖励尺度太大或者Actor太激进需要调低。GAE λ我通常取0.95这相当于让模型在看短期收益的同时保留一定的长远眼光。训练中的经典翻车现场我至少见过三次模型学会用我不确定开头换取高分学会在回答后面附上一长串无意义的道歉甚至学会碰到敏感话题直接拒答来绕过RM的惩罚。这类行为统称reward hacking本质是模型钻了奖励函数的空子。对付它的唯一有效办法是——不停地做bad-case审计发现一种钻空方式就在奖励函数或数据里堵一个窟窿。累但绕不开。2.3 为什么RLHF面对长推理任务会失灵RLHF在对话场景里非常称职但我一做推理任务就发现问题了RM没法判断思维链的对错。推理模型的输出动辄几千个tokenRM不可能逐行识别推理步骤是否正确它只能根据最终答案和整体表述给一个模糊分数。这个模糊分数对策略更新来说几乎是灾难级的噪声——模型可能这次推到一半思路错了但答案碰对了RM给了高分下次思路对但答案算错了RM给了低分。策略被这样的信号驱动很容易产生一个后果模型为了迎合RM开始模仿高分样本的句式和长度却不真正提升推理质量。另一个更直观的问题是RM在处理超长输出时极易崩溃。我在训练中观察过RM给2k长度输出的打分方差比给200字输出的方差高了好几倍这导致PPO里优势估计advantage的噪声被进一步放大。最后我得出一个结论PPO这套为对话场景设计的框架并不适合以正确答案为目标的推理强化。这也是GRPO这类方案登上舞台的直接原因。3. GRPO扔掉Critic推理模型只需一组采样陪跑3.1 推理任务为什么把Critic逼疯了前面提到Critic在RLHF里是个隐性难点到了推理任务它直接变成显性瓶颈。原因有三个输出长度太长一条思维链有几千个tokenCritic要对每一步的未来收益做预测误差会随着步数累积。累积到最后价值估计基本等于瞎猜。奖励极度稀疏推理过程里绝大多数中间步骤的reward都是0唯一的关键信号在最后答案对还是错。这种稀疏奖励让Critic很难学到有价值的信息。训练成本爆炸每个batch都要同时跑四个模型的反向传播Critic本身又是一个大参数量模型显存和算力开销直线上升。我见过不少人为了把PPO跑起来强行压缩batch size结果训练稳定性崩了。当时我们在自己的推理任务上做了一个实验把Critic去掉只用组内相对比较来代替advantage估计效果反而更稳。后来看到GRPO论文发现思路撞上了。3.2 GRPO的数学直觉与代码级拆解GRPO的核心思想极其朴素给同一个prompt采样多个输出形成一个group用组内相对表现来代替Critic的价值估计。等于说不找裁判预测未来直接让一组选手同场竞技看谁赢、谁输、赢多少。具体做法分五步对同一个prompt从当前策略采样G个输出一般取8到16条。用奖励函数比如答案是否正确给每条输出打分得到reward列表。算组内均值作为baseline。每条输出的advantage等于它的reward减去组内均值再除以组内标准差。这就完成了归一化。在策略梯度目标上加入与参考模型的KL惩罚然后正常走梯度更新。你可能会问为什么组内均值可以替代Critic因为对同一个prompt其他输出的平均分代表当前策略的平均水平某条输出比平均水平高说明这条策略路径值得加强比平均水平低就减弱。这个相对比较本身就是一种天然的baseline不需要额外模型去预测自然避开了价值估计不准的坑。伪代码大概是这种感觉# 假设一个batch内对某个prompt采样了G条输出 for i in range(G): reward_i reward_fn(prompt, output_i) # 规则打分或RM打分 baseline mean(rewards) std max(std(rewards), eps) advantage_i (reward_i - baseline) / std # 归一化优势 # 策略梯度损失简化版 loss 0 for i in range(G): ratio exp(logprob_new(output_i) - logprob_old(output_i)) loss - min(ratio * advantage_i, clip(ratio, 1-eps, 1eps) * advantage_i) loss kl_coef * kl_divergence(policy, ref_model) # KL约束代码只写了骨架但核心精神很明确G个样本把绝对打分转化为相对比较。模型不需要知道绝对分数60分还是80分只需要知道这条路径比同组平均水平高还是低梯度方向就清楚多了。3.3 我用GRPO跑推理模型时最常调的几个旋钮GRPO上手的门槛比PPO低很多但也不是拿来就用的傻瓜方案。我跑了几十轮实验后总结出四个必须盯紧的旋钮G值组内采样数这个最直观。G太小baseline噪声大优势估计不准G太大采样成本暴涨。我在一个中等规模模型上实测G8就能稳定训练G16时奖励曲线的方差会明显下降但显存占用几乎翻倍。建议先8起步看曲线波动再决定要不要升。KL惩罚系数GRPO没有CriticKL惩罚成了唯一的稳住模型的机制。系数太高模型不敢偏离参考分布推理探索能力受限系数太低模型容易在奖励驱动下迅速退化为输出模板化文本。我一般从0.001开始按训练步数做线性衰减。如果发现生成内容开始出现大量重复句式第一时间检查是不是KL系数衰减过头了。奖励函数设计这是GRPO成败最关键的地方。奖励信号必须可自动化计算同时要与任务目标高度一致。对数学题直接给最终答案匹配打分对代码题用单测用例通过率对格式要求单独拆一个格式合法奖励。不要把这些目标揉成一个综合分那会让模型困惑到底该优化什么。采样参数训练中的采样温度通常取0.7左右top_p取0.9。温度太高采样质量差reward整体偏低温度太低组内输出同质化相对比较失去意义。这个参数直接影响训练稳定性。我在一次训练中遇到过特别典型的曲线期望reward一路飙升看起来一切正常但KL散度也在同步爆炸。等到人工抽查生成样本时发现模型学会了在答案前加一长串固定的分析模板刷满了格式分但推理质量毫无提升。这就是reward hacking在GRPO里的变体。后来我把格式奖励从总奖励里拆出来单独设置权重再把KL系数调回一个更保守的值才刹住车。3.4 结果奖励之外过程奖励与一个残酷现实GRPO用起来顺手之后我开始琢磨奖励函数的下一层。纯结果奖励有个明显缺陷对中间过程没有约束力。模型可以蒙对答案但推理步骤完全错误这种样本在GRPO里照样拿高分相当于把错误推理模式也强化了一遍。这在数学和代码任务里都是隐患。解决思路是过程奖励——把一条长输出拆成多个步骤每步单独打分。比如代码题每通过一个单测给一点分数学题每完成一个关键推导给一点分。过程奖励能够让模型学会每一步都朝正确方向走而不是吊着一口气等最后结果。但这里有个残酷现实过程奖励的标注成本是结果奖励的几十倍。你需要构造高精度的自动验证器或者大量人工标注中间步骤是否合理。对很多团队来说这是一笔根本付不起的账。所以现在的趋势是能自动化验证的任务代码、数学、SQL优先用过程奖励。不能自动化的任务尽量设计隐式过程信号比如中间产物格式、分步输出结构的正确率。千万不要为了过程奖励硬造信号错误的过程监督比没有过程监督更可怕。R1这类推理模型在数学代码上的成功本质上就是可验证奖励大规模RL搜索的组合拳。它强在把搜索空间里的试错信号变成了策略梯度而不是强在某个发明了新的损失函数。4. Agentic RL训练目标从一句话答对变成了多步做对4.1 把RL放进一个会变的环境里故事就完全不同了如果GRPO解决的是单轮推理那Agentic RL解决的就是多轮决策。这里的场景不再是给一个prompt、生成一个回答、打一个分而是让模型在一个动态环境里反复行动——调用工具、读取结果、根据反馈决定下一步直到完成任务。举个具体场景你让模型订一张机票。它需要先搜索航班读完返回的JSON发现符合条件的航班再调用支付接口遇到额度不足还要换策略。整个过程十几步每一步都依赖前一步的结果没有标准答案只有最终是否成功这一个结果信号。这种任务对RL算法提出了全新要求状态是动态的每一步的环境反馈不同策略不能只看当前文本还要理解工具返回的上下文。奖励是稀疏的中间步骤通常没有独立奖励只有最后任务成功或失败。信用分配变得极难。动作空间是开放的模型可以选择调用哪个工具、传什么参数、是否继续每一步都可能致命。我一开始天真地以为把GRPO平移到Agentic场景就行结果训练曲线就像心电图。后来才想明白GRPO的组内比较假设同一prompt在不同输出之间的差异有意义但在多步环境里一条轨迹的优劣往往是环境随机性导致的而不是策略差异导致的。同组轨迹之间的比较不再能准确反映策略质量。4.2 环境、轨迹奖励、rolloutAgentic RL的四件套做了几轮Agentic RL实验后我意识到这套训练玩法里有四个东西缺一不可我管它叫四件套环境模拟器。Agentic RL的训练需要能自动执行模型动作并返回状态的环境。可以是代码解释器、浏览器操作环境、API沙盒。最重要的要求是环境行为必须与真实世界高度一致。我见过一个惨痛案例训练环境里某个搜索接口永远返回升序结果模型学会了拿第一条就是最优一下放到真实环境就崩溃。环境fidelity直接决定RL学到的策略能不能迁移。轨迹奖励设计。与单轮GRPO不同这里的奖励函数需要跨步设计。三条线路常见只在最后给成功/失败信号稀疏难训按关键节点给里程碑奖励如找到了正确条目10结合过程监督每一步按合理性打分上限高但工程复杂。我建议从里程碑奖励起步它介于稀疏和稠密之间训练稳定且实现成本可控。rollout管理。模型在环境里的行动序列需要设定最大步数防止死循环工具调用超时要自动截断出错时要能优雅重试。这些都是很工程化的细节但任何一个不处理好都会在训练数据里埋雷。我吃过最大的亏是rollout脚本没有处理环境返回异常的情况一批训练数据里混入了大量垃圾轨迹策略被带偏了还不自知。策略更新机制。在Agentic场景里继续用GRPO的思想做组内比较仍然可行但要调整基线策略。后面细说。4.3 实测里最容易翻车的三类情况我的止损方案Agentic RL的训练失败方式五花八门但归结起来主要三类第一环境过拟合。模型在训练环境里找到一个高奖励的作弊路径比如反复调用同一个工具而不思考甚至故意制造错误触发重试从而刷奖励。这类问题最隐蔽因为训练指标全绿一上线就现原形。我的止损方案是每轮训练都在环境里加入随机扰动——搜索结果的顺序、API返回的延迟、数据分布让模型学不到静态环境漏洞。第二信用分配崩坏。任务太长中途犯的错到最终reward才暴露梯度很难回传到正确位置。模型会变成前面瞎走最后赌一把的风格。我的方案有两层一是增加里程碑奖励让关键正确行为在发生时就被强化二是引入行为克隆监督让模型先模仿专家轨迹的前半程习惯再单独RL优化后半程决策。相当于先教基本功再练实战效果比直接从头RL好得多。第三策略崩溃。训练到某个阶段模型开始只输出一套固定动作序列环境变化后完全不适应。加上KL约束又失效策略就慢慢塌陷成一条狭长路径。我的止损方案是在训练初期混入一定比例的随机采样和专家轨迹维持策略探索的多样性同时密切监控生成轨迹之间的l2距离一旦发现多样性下降立即调大采样温度或者混入更多专家数据。4.4 从算法选型到最佳实践我在Agentic RL里的推荐搭配Agentic RL的算法选择目前圈内没有一个统一答案但我实测下来有一组相对可靠的做法不推荐纯粹Actor-Critic。原因和推理场景一样——价值模型在开放环境里根本估计不准环境动态性越强越崩。如果你非要留下价值信号做baseline我建议用轨迹级结果而不是token级价值来训Critic。推荐Greedy Baseline方案在同组轨迹里选出一条当时看来最优的轨迹作为baseline再让其他轨迹与其比较。效果比全局均值更鲁棒因为它天然过滤了由于任务难度差异带来的reward变化。行为克隆先行RLVR微调是我目前最推荐的组合拳。先用专家轨迹做SFT让模型建立基本的行为反射再用可验证结果做GRPO式优化把行为反射升级为自适应决策。这个双阶段方案在多个Agent任务上都很稳成本可控可解释性也比纯RL强很多。Dagger思想值得借鉴。Dagger本身是一种交互式模仿学习算法——模型在环境中行动专家针对它的行动给出示范纠正。你可以把它当作Agentic RL的数据增强器在RL训练过程中定期加入当前策略采样专家纠正轨迹能显著抑制策略漂移。但注意Dagger不是替代RL而是RL的补充。5. 从RLHF到Agentic RL的一次完整后训练复盘5.1 一次典型后训练流水线的时间线说了这么多算法原理最后我把一次完整的后训练流程按时间线摆出来。这是我最近一次做Agent任务时用的流程整体跑了大概三周阶段核心工作时间占比数据构建任务定义、轨迹收集、规则验证器开发30%行为克隆SFT让模型先学会标准动作路径15%奖励设计形式定义、里程碑切分、验证器精调15%在线RLGRPO式训练动态采样与环境rollout30%评估迭代评测集建立、bad-case分析、模型更新10%很多人把后训练理解为模型训练那一步实际上模型训练只占三分之一的工作量。大头全在数据、环境和奖励定义上。这不是制度问题而是RL本身的属性——信号质量直接决定训练质量。5.2 数据配比、算力配额、评估矩阵的实战建议先聊数据配比。如果是通用Agent模型我会把混合数据集里的分布控制在多轮轨迹类数据占40%指令遵循类占30%推理问答类占20%安全边界类占10%。注意一个反直觉的点轨迹数据并不是越多越好。边际收益递减非常快超出总量之后模型容易产生套模板式动作反而伤害探索能力。我实测下来轨迹数据到总数据量的50%左右是拐点再往上加就开始下降。算力配额方面我的经验是SFTRM训练占20%-30%在线RL含rollout占60%-70%评估与调参占10%。RL的开销大头是反复采样——每条轨迹都要真跑一遍环境这个成本远超梯度计算本身。我第一次跑Agentic RL时严重低估了rollout的算力结果训练一天就断供后面被迫砍G值、降并发节奏全乱了。评估矩阵我分三层原子能力层模型能否正确调用特定工具、解析返回结果。用固定测试集跑看工具调用准确率。任务成功率层端到端跑一批真实任务统计完成率与平均步数。鲁棒性层改变环境参数、增加干扰项看成功率掉多少。这层最容易被忽略但对Agent模型来说恰恰最致命。我一般在每一轮RL训练后先跑原子能力层这层不过直接回滚模型不做后续评估省时间。5.3 后训练最容易返工的三个环节复盘多次项目后我总结出三个最容易被低估、导致返工的地方第一验证器后期失效。规则验证器在开发时用少量样本精调过但训练中模型会生成越来越多边界case验证器本身开始误判。我建议每训练500步就用新采样数据回测验证器一次如果准确率掉下去不要硬扛立刻修验证器再继续。第二模型奖励灌水但评估没发现。遇到过的最经典场景训练曲线reward一路上涨人工看生成内容觉得也挺像样但一上专项评测集得分不如上一版。原因是在线RL优化的方向偏离了真实任务目标。这提醒我训练指标和评测指标必须分离训练时盯reward和KL评测时盯任务成功率和工具调用准确率两边一起变化才有意义。第三测试集污染。Agent任务评测时如果评测环境和训练环境过于相似评测分数会虚高。我给的方案是单独留一个真实环境评测集训练时完全隔离只在关键节点开放。相当于给模型做一次体检确保学到的东西不是环境特解。这三个返工点我基本每个项目都会踩一遍提前设计好对策能省下一两周的无效工作。5.4 给后来者的真实建议最后说几句掏心窝的话。第一不要盲目追求新算法。GRPO很香但它解决的是推理任务的可验证奖励问题Agentic RL很潮但它的工程复杂度远超大多数团队的预算。先想清楚你的任务目标是什么形态——这是选型的唯一标准。第二先做小规模可验证实验再铺全量。我建议第一轮只用100到200条prompt的小批量跑通全流程确认数据管道、rollout脚本、奖励函数都没有bug了再放大批量训练。这个习惯帮我避免了好几次大半夜训练3天后发现环境脚本有bug的绝望。第三永远保留checkpoint。每500到1000步存一版训练结束统一做bad-case分析时你会感谢当时的自己。很多诡异的训练现象只有靠不同checkpoint之间的对比才能定位。第四模型训练指标漂亮不等于模型真的变好了。每次训练后都要拿最新版模型去实际跑几个面试任务亲眼看看有没有感觉更聪明了。我称这个为奶奶测试——把你做的功能拿给你最信任的非技术朋友用一下如果她觉得变好了这个模型大概率真的变好了。数据指标可以被hack真实使用感受不会。这套从RLHF到GRPO再到Agentic RL的路线我自己走下来最大的感受是后训练的未来不是某个算法打天下而是数据信号、奖励设计、环境质量、算法选择四者的组合艺术。每一种新范式解决的都是上一种范式遗留的信号不够准确的问题顺着这条逻辑去理解就不会被层出不穷的新名词绕晕。