领域模型进化:GRPO 强化学习与 Post-training Engineering
通用大模型base model是个通才。它在万亿 token 上做过 next-token prediction把世界知识压缩进了权重但你让它写一段符合你公司合规规范的代码、审一份你领域的合同、跑通你内部系统的 SQL它大概率会给你一个看起来像那么回事但细节不对的东西。从 Llama、Qwen 这样的 base model 到一个能在你业务里真正干活的领域智能体中间差的不是预训练而是 post-training。这一篇讲把通用大模型训成领域智能体最关键的一段训练技术链条SFT 打底、RLHF/RLAIF 对齐偏好、再用 GRPO 这种新一代强化学习把模型推到领域能力的上限。我会重点拆 GRPO 的数学直觉讲清楚它是怎么在省掉 critic 网络的前提下还能稳定做策略优化的以及奖励信号到底怎么设计、训练稳定性怎么保、reward hacking 怎么防。这部分是领域模型进化真正的收束点值得写深。Post-training 全景SFT 打底RL 收口要理解 GRPO 为什么重要得先把 post-training 的全景摆出来。一个能用的领域智能体训练链路通常分几段。Pre-training 给你的是续写引擎。base model 学会的是给定前面的 token预测下一个 token。它有无穷的世界知识但它不知道你想要什么格式、不知道什么是好答案、不知道在你这个领域里正确的边界在哪里。它只是在做概率续写。SFTSupervised Fine-Tuning把续写变成完成指令。用一批高质量的 (prompt, response) 对去微调模型从续写切换到对话、遵循指令、产出指定格式。这一阶段你可以把领域术语、领域推理风格、输出schema都喂进去。但 SFT 本质是模仿学习它的最大似然目标决定了它的天花板就是数据集里最好的人类示范。它不会超越示范更不会在无人示范的硬样本上自我纠错。这是 SFT 躲不开的天花板。RLHF 把人类偏好变成可优化的信号。先用人类偏好对比数据同一个 prompt 的两个回答标出哪个好训练一个 reward modelRM再用强化学习经典做法是 PPO去优化 policy让它能拿到 RM 给的高分。这一步让模型学会了示范数据里没有的微妙质量语气、帮助性、安全性、连贯度。Anthropic 的 Constitutional AI 把人类标注换成模型按宪法自判就是 RLAIFRL from AI Feedback成本更低、可规模化。领域对齐是最后的收束点。在通用 SFT RLHF 之后用领域数据再做一轮 SFT 领域 RL把能力锚定到具体场景法律、医学、代码、金融、你公司的内部系统。这一步就是领域智能体和通用聊天机器人的分水岭。而领域 RL 用什么算法、奖励怎么来、怎么不训崩正是 GRPO 要解决的。为什么 SFT 不够必须上 RLSFT 的根本限制在于它对训练样本里的 token 赋最大似然权重对分布外OOD的硬样本没有显式的试错到反馈机制。模型学到的只是在类似数据上该说什么而不是什么结果才是真的对。RL 的核心直觉是从结果中学习。先让模型采样出一批输出再用奖励信号告诉它哪个好、哪个坏梯度就朝好输出的方向推。对领域任务来说这特别关键因为大量领域目标是可验证的答案对不对、单测过没过、SQL 跑没跑通、合规规则违没违。这类目标 SFT 给不了怎样能更好的精细梯度RL 可以。模型在采样中撞到一条能跑通的单测路径奖励立刻给正反馈这条路径的概率就被放大。这是纯模仿学不来的能力。问题只剩一个RL 里的优势advantage怎么估计。经典 PPO 用 critic 网络代价很大。GRPO 换了一条更省的路。PPO 的账本为什么它贵PPO 是 on-policy 的 policy gradient 方法核心是 clipped surrogate objective限制新策略相对旧策略的更新幅度别一次迈太大。但要让这个公式工作PPO 必须估计每个时刻的 advantageA_t r_t γ·V(s_{t1}) − V(s_t)这个 V(s) 是状态价值由一个独立的 critic 网络来近似。critic 几乎和 policy 同架构、同参数量因为它要处理同样规模的特征。训练时每次更新都要同时跑 policy 前向 critic 前向、反向显存和算力接近翻倍。这是大模型 RL 长期被诟病的工程痛点你想训一个 70B 的 policy还得再养一个 70B 的 critic。更隐蔽的问题在 critic 本身会训不准。advantage 的误差会直接灌进 policy 梯度value 网络一旦拟合不好整条 RL 链路都不稳。很多 PPO 训 LLM 的失败根因不是 policy 学不会而是 critic 给出的 baseline 在抖。GRPO 的核心机制组内相对优势估计GRPOGroup Relative Policy Optimization来自 DeepSeekMath2024。它最漂亮的地方是用一次采样组内对比把 critic 彻底干掉了。机制是这样的。对一个 prompt q从旧策略 π_old 采样一组 G 个输出 {o_1, …, o_G}分别用奖励函数算出奖励 {r_1, …, r_G}。然后不训练任何价值网络而是直接对这组奖励做组内标准化Â_i (r_i − mean(r_1...r_G)) / std(r_1...r_G)这个 Â_i 就是输出 i 的相对优势它对输出 i 内部的每个 token 共用在 GRPO 里 advantage 是 output 级的不是 token 级的。数学直觉有三层。第一层baseline 不再是 value 网络而是同一 prompt 下这批采样输出的平均表现。每个 prompt 的奖励尺度被自动归一化难 prompt 大家分都低、易 prompt 大家分都高但只要组内有相对差异梯度就有方向。模型学到的不是这个 prompt 该得多少分而是在相同请求下哪种回答相对更优。第二层这本质上是统计里的 within-subject contrast组内对照去掉了 prompt 之间的难度方差只保留组内相对信号。对 LLM 尤其友好因为不同 prompt 之间奖励绝对值差异巨大、又没有统一参考系用绝对分数当 baseline 噪声极大用组内对照就稳得多。第三层蒙特卡洛视角。G 个采样就是对当前策略在该 prompt 下行为分布的一次抽样估计。组内相对排名近似了这个分布的 pairwise preference等价于用组内对比代替了 RM 的 pairwise 偏好学习。换句话说GRPO 把需要额外训练一个 RM 才能得到的相对偏好直接用采样组近似出来了。举一个具体的数字例子把公式落到地上。假设一个数学 prompt模型采样了 G4 个输出奖励函数正确给 1、部分正确给 0.5、错误给 0给出 r [1.0, 0.5, 0.0, 0.5]。组内均值 μ 0.5标准差 σ ≈ 0.408用无偏估计于是标准化优势分别是Â [ (1.0−0.5)/0.408, (0.5−0.5)/0.408, (0.0−0.5)/0.408, (0.5−0.5)/0.408 ] [ 1.22, 0.0, −1.22, 0.0 ]看清这里发生了什么。得分中等的输出0.5优势是 0梯度对它几乎不动满分输出被正向推、零分输出被负向压。模型学到的不是数学题该得 0.5 分而是在相同这道题下能算对的回答比算错的更值得提概率。如果换一个 prompt 大家都算对r [1,1,1,1]μσ1标准化后全为 0梯度为零模型不在这种已经饱和的样本上浪费更新。这正是组内对照的妙处它自动忽略这个 prompt 本来就很难/很简单的绝对信息只关心相对好坏。标准差这里还有一个工程选择。有些实现用把所有 G 个奖励减均值后直接除以标准差如上也有实现为了数值稳定或避免某个输出被极端放大会用 G 个奖励相对均值的平均绝对偏差替代或在分母加一个小常数。无论哪种核心不变advantage 是组内相对量不是绝对量。GRPO 目标函数拆解把机制写成目标函数一次性看清楚它的全部组成J_GRPO(θ) E_{q~Q, {o_i}~π_old(·|q)} [ 1/G · Σ_i 1/|o_i| · Σ_t min( ρ_{i,t}(θ) · Â_i , clip(ρ_{i,t}(θ), 1−ε, 1ε) · Â_i ) ] − β · KL[ π_θ ‖ π_ref ]其中概率比 ρ_{i,t}(θ) π_θ(o_{i,t} | q, o_{i,t}) / π_old(o_{i,t} | q, o_{i,t})。逐项拆。内层 min clip 是 PPO 的 clipped surrogate。它限制新策略相对旧策略的更新幅度。当 ρ 往好处跑超过 1ε或者往坏处跑低于 1−ε 时梯度被截断防止一步迈太大把策略训崩。clip 区间通常取 ε≈0.2。GRPO 在这一点上完全继承自 PPO稳定性来源之一就是这个。乘以 Â_i 是梯度方向权重。正优势的输出被提升概率负优势的被压低。注意 advantage 是 output 级常量所以它对所有 token 一视同仁地加权。外层对 G 个输出、对输出内每个 token 求平均。这里有个细节1/|o_i| 做了长度归一。不加这个长输出会因为 token 多而 dominate 梯度模型会倾向于写得长而不是写得好。这是个很容易踩的坑也是 reward hacking 的一个入口。−β · KL 是锚。π_ref 是冻结的参考模型通常就是 SFT 之后的初始模型。KL 项像一个弹簧把当前策略拉住防止它为了刷奖励漂移到语义崩坏、格式乱掉、或退化成少量高奖励模板。这是 RLHF 里防 reward hacking 的正则核心。β 太大训不动太小会漂工程上常做成自适应。最关键的一点再强调一遍整个目标函数里没有 critic。advantage 由采样组即时算出省掉的不只是半份显存更是去掉了 value 网络那一路会抖的误差源。GRPO 与 PPO 的本质差异把两者的区别摊开看不是谁更好而是代价和适用面不同。优势估计来源。PPO 用一个训练出来的 critic 学 V(s)是参数化的、跨 prompt 共享的 baseline。GRPO 用同 prompt 的 G 个采样奖励的组内均值当 baseline是无参数的、per-prompt 即时估计。前者泛化但需要训后者省钱但每个 prompt 要多采样 G 次。网络数量与成本。PPO 同时养 policy critic显存和算力接近翻倍且 critic 的前向反向都要占卡。GRPO 只需一套 policy 前向采样时reference 模型只在算 KL 时前向一次且可以离线共享权重。实际训练里 GRPO 的显存占用大致是 PPO 的一半多一点这对大模型 RL 是决定性优势。对奖励模型的依赖。两者都吃奖励信号。但 GRPO 在 DeepSeek-R1 之后常被用于 verifiable reward可验证奖励奖励来自规则而非易碎的 RM。这让它比全靠 RM 打分的 PPO稳得多因为规则判据基于真相不是代理。适用场景。GRPO 在同一 prompt 能多采样、且能自动评分的场景极顺数学、代码、结构化 JSON、SQL、任何有参考答案或单测的任务。PPO 更适合奖励稀疏、需要把 credit 细分到细粒度状态的环境类任务比如游戏、机器人控制那种场景组内对照的 baseline 不如训出来的 critic 准。顺带提一句RLOO、ReMax 等变体思想同源都是用采样组内对比替代 criticGRPO 是其中工程化最完整、用得最广的一个。奖励信号设计规则、模型评判、可验证奖励GRPO 再省也得有人告诉它什么叫好。奖励信号有三条主要来路。Rule-based verifiable reward。数学题判最终答案与参考答案相等代码题判单测通过SQL 题判执行结果。奖励是 0/1 或带部分分的离散信号。这是最干净的一类几乎不可被 RM 式的黑客攻击因为判据基于真相。领域智能体最该复制的就是这个范式把你领域的真理测试、编译、跑通、合规规则引擎工程化地变成奖励。Reward modelRM。从偏好数据训练的独立打分器给出连续奖励。它灵活能评判语气好不好有没有帮助这类难以规则化的维度。但它贵而且有代理偏差RM 只是人类偏好的近似模型能找到钻 RM 空子的输出冗长、奉承、格式花哨。模型评判model-as-judge。用更强的模型当裁判打 reward是 RLAIF 的落地形态。成本比人类标注低但要防裁判被一致性偏差、位置偏差、自我偏好带偏。实践中常用多个裁判交叉 不确定时退回到人类。可验证奖励RLVR是 DeepSeek-R1 的关键。它的大部分训练信号来自答案对不对只有少量格式和连贯性用规则补。这给了领域落地一条清晰的主线先用规则把能验证的维度覆盖住把验证不了的维度交给模型评判兜底尽量压缩对易碎 RM 的依赖。领域落地时可验证奖励的设计要具体到业务。金融场景可以把生成的对账单与核心系统导出一致作为 reward运维场景可以把生成的 K8s YAML 能被集群校验通过且不影响现有服务作为 reward客服场景可以把回复引用了知识库中的正确条目、且未承诺系统不支持的能力作为 reward。这些判据本质都是把领域真理写成可计算函数是领域智能体能真正可靠的前提比堆数据重要得多。奖励黑客与防护reward hacking 指的是策略找到了在奖励函数上拿高分、但实际任务质量并不高的行为。它来源有三。一是 RM 作为不完美代理模型赌 RM 的盲点。二是奖励塑形reward shaping引入的捷径比如回答越长分越高时模型就疯狂灌水。三是格式规则被利用R1 早期就观察到模型会把思考塞进特定 tag 来刷格式分而不是真的在思考。防护是组合拳。用 verifiable reward 替代 model-based reward是最硬的一招判据基于真相黑客空间天然被压小。KL 惩罚锚定参考模型限制策略漂移幅度防止它为了刷分退化成少量高奖励模板。奖励塑形要小心避免可被单调 exploit 的连续分量partial credit 必须设计成正确动作才给。比如代码题的奖励不要简单按行数给而要按通过的单测数 / 总行数这样更抗 gaming 的指标。多奖励融合 对抗式评估定期用人类或强模型抽查reward 与真实质量的相关系数一旦发现脱钩就修 RM。这是监控层面的兜底。把奖励与输出长度解耦或者显式加长度惩罚堵住灌水这条路。领域数据构造与 reward modeling 实战领域 SFT 数据来自三处真实业务日志、专家标注、强模型合成self-instruct 类。质量远大于数量一份干净的高难示范顶一万份噪声数据。领域 reward 数据需要 (prompt, 多个候选输出, 优劣标注) 或 (prompt, 可验证判据)。领域判据往往要工程化合规规则引擎、领域单测集、知识库一致性检查这些都是把领域真理变成可计算奖励的硬功夫。冷启动 SFT 在 RL 之前极其重要。先用高质量 SFT 把模型拉到能产出可评分输出的水平否则采样组里全是垃圾组内奖励方差没有意义GRPO 的 baseline 也就失准了。R1 专门强调了 cold-start SFT 对稳定性和最终质量的作用。课程式推进也值得做先易后难奖励信号从稠密规则可判逐步过渡到稀疏需要模型评判让策略在一个稳定的 baseline 上慢慢爬坡而不是一上来就面对高方差的稀疏奖励。工程化分布式训练、回放与评估闭环GRPO 的训练和纯 SFT 完全不同它是一个推理与训练交替的在线循环不是离线喂数据。训练回路长这样用当前策略批量生成 rollout → 用 reward model / 规则 / 强模型打分 → 算组内相对优势 → 反向更新 policy → 用新策略再 rollout。这套 loop 对基础设施的要求比 SFT 高一个量级因为它同时需要高吞吐推理生成和大规模训练反向。分布式协同是难点。policy 训练侧用张量并行 数据并行 流水线并行Megatron/DeepSpeed 式。rollout 生成侧需要高吞吐推理引擎vLLM、TensorRT-LLM 类。两者必须协同调度否则 GPU 在生成时饿着、在训练时闲着利用率掉一半。麻烦的点在于生成是吞吐优先的批处理训练是显存优先的反向传播两者对 batch 形状、显存布局、并行策略的要求都不一样。业界常见的做法是把训练和生成放在同一组 GPU 上时分复用用一个调度器在全量生成模式和反向训练模式之间切换或者物理分离成 inference cluster 和 train cluster用队列流转 rollout。前者省卡但调度复杂后者清晰但要多一倍机器。OpenRLHF、verl、NeMo-Aligner 是业界常见的对齐训练框架本质都在解决这个生成与训练两张皮的调度问题。回放replay要谨慎。严格 on-policy 的 GRPO/PPO 每步都要鲜采样因为策略一更新旧样本的分布就偏了。但工程上常保留一个轻量回放缓冲用 importance sampling 修正分布偏移复用高分样本以降低采样成本。代价是引入 off-policy 偏差必须用重要性权重和截断来控制否则优势估计会系统性失真。一个实用的折中是近 on-policy缓冲里的样本如果和当前策略的 KL 距离超过阈值就丢弃这样既复用了高价值样本又不会让分布偏太远。这也是为什么前面强调组内 baseline 要准off-policy 修正一旦叠加在已经失真的 advantage 上训练会迅速发散。评估闭环不能省。训练 reward 曲线会骗你它只反映模型在骗奖励上越来越强。必须建独立 eval set领域 benchmark 人类评委 模型评委三角交叉持续追踪 reward 与真实质量的相关系数、KL 漂移量、输出长度变化、崩溃率。建议把评估做成训练循环里的周期任务像 CI 一样卡点一旦质量指标掉下来就停训排查。稳定性要点。clip ε 别太大0.2 是经验上稳的起点。KL β 要能自适应太小漂、太大训不动。学习率要小RL 对 lr 比 SFT 敏感。batch 内 prompt 难度要混合均匀否则组内 baseline 失真简单 prompt 的梯度会淹没难 prompt。收束领域模型进化的本质把这一篇收一下。领域模型进化不是再预训练一次那么浪漫它是一套 post-training 工程。SFT 打底把格式和领域语料喂进去RLHF/RLAIF 把泛化偏好对齐GRPO 把从结果中学习的能力推到领域上限。真正拉开差距的是把领域真理测试、规则、答案工程化地变成奖励信号并用 verifiable reward、KL 锚、评估闭环三件套把 reward hacking 压住。GRPO 的价值不只是省掉 critic 省一半卡。它把优势估计从训一个会犯错的价值网络变成了同一 prompt 采一组、组内自比这个思想转变让大模型 RL 从昂贵且脆弱变得便宜且可大规模跑。对做领域智能体的人来说这意味着你不必是 RL 理论专家只要能把你领域的对与错工程化地写成可验证奖励就有机会把通用大模型炼成你业务里真正能用的专家。