精读:ZCPO——把参考 KL 从损失支搬进组内系数
GRPO 把参考策略 KL 做成一条与奖励并行的损失支,奖励支被裁剪或抵消后 KL 仍在更新;ZCPO 把 KL 换成组内相对漂移的零和系数修正,Qwen2.5-32B 上 AIME24 47.3→56.8、AIME25 37.1→48.5。本专栏逐项对账后发现:β=4 时,k≤2 的组里多数类响应的 |a_i| 只有 0.067–0.143,βK_i 超过 0.036 nats/token 就能翻掉奖励符号,而峰值比 β‖K‖_∞ 全文没有实测值、也没有「只留 −βK_i」的对照臂;ZCPO 响应均值 1695 token 对 vanilla 的 774/611,唯独没报 β=0.001 与 β=0 的长度;F1 的任务级对照只回收 AIME25 那 +13.8 里的 +4.6
1 论文概览
一句话总结:GRPO 系方法把参考策略 KL 做成一条与奖励并行的损失支挂在 token 上;ZCPO 的判断是这条边接错了位置——KL 应该以「组内相对漂移」的形态进到组相对的奖励系数里,而不是作为一条独立的梯度支单独累加。
核心问题:过去一年的经验事实是,把参考 KL 拿掉反而更好。PAPO 在 GRPO 上移除参考 KL,Qwen2.5-VL-3B / 7B 的 avg@8 从 47.92% / 58.78% 抬到 50.18% / 61.30%;Open-Reasoner-Zero 的文本推理消融里,不加 KL 的 PPO 也胜过把 KL 加进损失或加进奖励的变体。DAPO、GMPO 干脆不写这一项。作者把这个现象当成一个设计问题来问:参考策略的信息该从哪条边进组相对优化。
主要贡献
- 在「独立 KL 损失」这一设定下枚举 KL 与奖励相互作用的七种错配(F1–F7),其中 F1–F3 有一条 lemma:奖励梯度在裁剪、聚合抵消、奖励全同这三种情形下归零后,KL 项的梯度不为零,更新照旧发生。
- 把 KL 从损失项搬进系数:,其中 是长度归一化条件 KL 的组内中心化量。KL 不再是「往参考策略拉」的力,而是「组内谁漂移得更远」的比较量。
- 给出零和二次校准问题的闭式唯一解(式 2 的拉格朗日条件),并给出共移不变性:给一组的每个 加同一个常数, 与 不动。
- 用全词表条件 KL 替换 k1 采样对数比,消掉给定前缀下的 token 采样噪声(F7)。
- 数学推理主实验 Qwen2.5-32B:AIME24 从 47.3 到 56.8、AIME25 从 37.1 到 48.5(对照为不含 KL 的 DAPO,avg@32、3 seed 均值);另有 Qwen3-4B-Thinking 长上下文 6 列与 GLM-4-9B-0414 的单列复现。
2 方法详解
基线写法。同一 prompt 采样 条响应,组归一化 advantage ,token 概率比 。独立 KL 版本的 token 损失是 ,梯度分成两支:
两支只在 这一处共享门控,而 由 base 算法的裁剪规则决定。奖励支被关掉时,KL 支不受影响。这就是 F1–F3 的共同来源:
When and , the KL term is nonzero. Thus, an independent KL gradient may remain after the reward gradient vanishes, including in the following three cases. —— §3, Lemma (F1–F3)
ZCPO 的构造。四步走:先把每个位置的条件 KL 求和成序列量 ;再按长度归一化 ,这一步消掉长响应的累积放大(F4、F5);接着组内中心化 ,消掉整组共享的漂移基线(F6);最后与最大绝对 advantage 归一化后的奖励系数合成 ,。整组 之和恒为零。
带 stop-gradient 送进 base surrogate 替换奖励系数,梯度只走 。组级门 直接跳过奖励全同的组(F3)。主实验里每个 rollout 只算一次系数,随后 16 次 mini-batch 更新沿用(附录 H)。
关键创新点
- 位置迁移:KL 的作用点从「一条并行的梯度支」换成「奖励系数里的一个零和修正」。方向不变的部分(整组一起远离参考)不再产生任何力,只有组内相对差异留下。
- 两次消尺度:长度归一化去掉「越长罚越多」,中心化去掉「整组一起漂移」。附录 G.1 把后者写成代数性质:
Adding the same constant to every in a group leaves and unchanged, so the coefficients are unaffected by a shared within-group KL baseline (F6). —— §4
- 条件 KL 替代采样估计:k1 用采样到的 比估计序列 KL,同一前缀下不同响应的估计差全部来自采样; 是对全词表闭式求和,给定前缀后这部分噪声为零。代价是要做 fp32 输出层重投影加全词表归约,作者报的增量是 0.5% GPU 时间。
- 最大绝对归一化顺带做了隐式课程: 把每组最强的奖励信号钉成单位量,某个因子一旦在组内变成共有(),它的奖励贡献就整体抵消,残差因子 的相对权重自动升上来,不需要额外的课程调度器。
与基线方法的区别
| 维度 | 独立 KL 损失(GRPO / DAPO + KL) | ZCPO |
|---|---|---|
| KL 的作用点 | 与奖励并行的损失支,有自己的梯度 | 奖励系数里的零和修正项 |
| 量纲 | 乘在 KL 损失上, 是梯度权重 | 乘在归一化奖励系数上, 是无量纲系数权重 |
| 随长度的行为 | 逐 token 累加,长响应罚得多(F4) | 先除以 再中心化 |
| 是否零和 | 否,整组可以一起被拉回 | 是, |
| 奖励方向 | 弱奖励信号可被 KL 反向(附录 G 构造) | 共有漂移不入系数,绝对方向保留 |
| 采样噪声 | k1 含条件采样噪声(F7) | 为闭式,条件噪声为零 |
| 额外成本 | 需要 前向 | 同样需要 ,加 fp32 重投影 +0.5% |
两者的 不是同一个东西,这一点后面算账时要反复用到。
3 实验结果
主要指标。Qwen2.5-32B、DAPO 底座、、512 prompt/rollout、16 次 mini-batch 更新,AIME24 与 AIME25 均报 avg@32、3 seed 均值。checkpoint 按累计 GPU 时间对齐选取:
| 配置 | AIME24 | AIME25 |
|---|---|---|
| DAPO 无 KL () | 47.3 | 37.1 |
| DAPO + 标准 KL, | 44.5 | 34.7 |
| DAPO + 标准 KL, | 31.2 | 18.9 |
| ZCPO | 56.8 | 48.5 |
| RPG | 50.7 | 42.5 |
| GVPO | 52.6 | 41.1 |
| GOPO | 48.5 | 39.9 |
对不含 KL 的 DAPO,ZCPO 是 +9.5 / +11.4;对带标准 KL 的 DAPO()是 +12.3 / +13.8。按 30 题 × avg@32 的二项方差粗估配对标准误约 2.2–2.3 pp,两列的 约 4.2 与 5.1(未扣题目间相关,也未计入 3 seed 平均,属粗量级)。
与 SOTA 的对比。ZCPO 对 GVPO 是 +4.2 / +7.4,对 RPG 是 +6.1 / +6.0,对 GOPO 是 +8.3 / +8.6。AIME24 那一列对 GVPO 的 只有 1.9,落在噪声区间;AIME25 是 3.3。
长上下文 6 列(Qwen3-4B-Thinking-2507,基座 / +GRPO 带标准 KL / +GRPO 无 KL / +ZCPO):
| 列 | DocMath | LBV2 | Frames | MRCR | CorpusQA | LBV1-QA |
|---|---|---|---|---|---|---|
| 基座 | 60.7 | 39.4 | 64.9 | 37.5 | 49.2 | 64.2 |
| + 标准 KL | 61.6 | 41.7 | 64.8 | 49.3 | 53.8 | 64.3 |
| + 无 KL | 62.3 | 45.2 | 66.4 | 65.7 | 61.9 | 65.6 |
| + ZCPO | 63.8 | 48.2 | 68.2 | 66.0 | 69.6 | 66.4 |
| ZCPO − 无 KL | +1.5 | +3.0 | +1.8 | +0.3 | +7.7 | +0.8 |
去掉 KL 自己就是一笔大收益(MRCR 上 +16.4),ZCPO 在这之上的增量六列合计 15.1,其中 CorpusQA 一列占 7.7,即 51%。
消融实验关键发现
- 去掉组内中心化掉得最狠:56.8 → 45.6、48.5 → 36.7,−11.2 / −11.8。去中心的版本数值上回到「标准 KL」那一档(对照 44.5 / 34.7,只高 1.1 / 2.0),与「共享漂移就是标准 KL 的惩罚」这一解释吻合。
- 去掉长度归一化:−2.9 / −5.0;k1 替换条件 KL:−2.3 / −1.4;改回标准差归一化:−1.4 / −3.6。三项都远小于中心化那一项。
- 扫描(AIME24,3 seed): 得 48.1, 得 56.8, 得 53.7。关掉 KL 校准项只值 +0.8(此项也是「最大绝对归一化」相对「标准差归一化」的全部收益),打开后 +8.7。附录 B 的 2×2 显示归一化与 KL 校准两项可加:标准差口径下 +8.1,最大绝对口径下 +8.7。
- KL 梯度份额(诊断 run,step 11–100 的中位数):vanilla 为 0.4%,vanilla 为 5.8%,ZCPO 为 7.0%,ZCPO 为 30.2%。份额相近的那一对(5.8% 对 7.0%)任务分是 31.2 对 56.8。
- F1 的任务级对照:在裁剪位置关掉 KL(F1-B)从 44.5 / 34.7 到 46.1 / 39.3;全 token 范数对照(F1-C)到 44.8 / 37.5。
- GLM-4-9B-0414 单列:DAPO 无 KL 24.5 → ZCPO 36.2。
4 个人分析
亮点
第一,把「要不要加 KL」这个二值选择改写成「KL 从哪条边进来」。这个改写是有收益的:同一份参考策略信息,接在损失上是有害的(表 1 里 掉到 31.2),接在系数上是 +9.5。第二,F1–F3 的 lemma 短、条件写得清楚,而且三条都是可以被实现直接验证的( 处 KL 支是否为零)。第三,共移不变性这条代数性质把「正则」和「奖励」在组内彻底解耦:KL 不再评判一次偏离好不好,只比较谁偏得更远。第四,实验卫生做得比同规模工作扎实——checkpoint 按累计 GPU 时间对齐,且明确写了:
The main experiments are aligned by cumulative GPU compute time, and checkpoints corresponding to the same cumulative GPU compute time are selected for evaluation. Checkpoint selection is independent of the AIME24 and AIME25 evaluation results. —— Appendix A
这一条直接消掉了「取最佳 checkpoint」这个常见口径漏洞。
局限性
-
与 谁大,论文没有测。 二进制奖励下这条可以手算: 条正确时 ,多数类响应的 。 时 分别对应 0.067、0.143、0.333、1.000。 时,只要 超过 0.017 / 0.036 / 0.083 / 0.25,多数类响应的系数符号就由 KL 决定,不由奖励决定。论文自己的玩具构造给出 nats/token,组内中心化后的 落在 0.01–0.04 完全在射程内。式里定义了峰值比 ,全文没有给出任何实测值,也没有「只留 、去掉 」的对照臂。于是「KL 校准奖励」与「KL 主导奖励」这两种读法,在 这个 operating point 上只差一个未被测量的倍数。
-
长度通道没有隔离。 图 3(c) 给的是 step 100 的均值长度:vanilla 为 774、vanilla 为 611、ZCPO 为 1695。缺的正是最关键的两个数: 与 的长度。ZCPO 的响应比同 的 vanilla 长 2.8 倍,可我们无法判断它是把长度恢复到了无 KL 的水平,还是推到了更长的水平。正文也留了一句 “the normalized remains correlated with ,indicating that length effects are not fully eliminated”。数学题的准确率对生成长度敏感,缺一条长度匹配对照(或固定 token 预算的评测),这 9.5 个点的成因就分不开。
-
机制归因的预算没有算平。 ZCPO 相对 的 vanilla 是 +12.3 / +13.8,唯一有任务级对照的 F1-B 回收 +1.6 / +4.6,即 AIME24 的 13%、AIME25 的 33%。F2、F4、F5、F6、F7 都只有诊断图,没有任务级对照臂。附录 I 自己划了界:
Other gradient, length, and drift diagnostics characterize training behavior and motivate testable mechanistic hypotheses about its effects on optimization. —— Appendix I
七种错配里,五种停留在「待检验的机制假说」。
-
两条方法的 网格零重叠。 vanilla 扫 ,ZCPO 扫 ,唯一的公共点是 0。在 这一点上,ZCPO 只比无 KL 的 DAPO 高 0.8 个点,剩下的差异全部来自非公共点。这里有个反向的加分项: 是在 AIME24 上选出来的,而没参与选择的 AIME25 反而给了更大的增量(+11.4 对 +9.5, 5.1 对 4.2),选择噪声这条指控在这个案例里站不住。
-
长上下文六列里,一列占了增量和的一半。 CorpusQA +7.7,MRCR 只有 +0.3,去掉 CorpusQA 后六列均值从 +2.52 掉到 +1.48。这一组还没有 seed 与置信区间。
-
F3 的门控消融在噪声里。 全方法对去门控版本是 +0.5 / +0.2 / +0.6 / −0.3 / +1.1 / +0.3,MRCR 反号,六列里五列的差不到 1.1 个点。还有一处措辞要留意:去门控的臂在 时把奖励系数置零,可 并不为零,这批组拿到的其实是纯漂移均衡更新。
-
系数与概率比不同步。 每个 rollout 算一次 ,之后 16 次 mini-batch 更新里 在变、 不变,裁剪门由当前比值和固定系数共同判定,门的状态可以在中途翻转。再把第 1 条接上:一旦 的符号被 KL 翻过来,DAPO 的非对称裁剪(、)就套到了错误的一侧。
-
两处协议细节。 附录 C 写 KL 份额在每步第一个 mini-batch 上测、且「所有奖励梯度门打开」,可 F1 统计的正是关门 token,正文没说它取自哪一步;表 5 的 30.2% 在正文里写成 30.1%。
-
主实验只有一个模型族。 数学是 Qwen2.5-32B 单尺度,长上下文是 Qwen3-4B-Thinking,跨模型只有 GLM-4-9B-0414 且只有 AIME24 一列、没有带 KL 的对照臂。
对大模型领域的影响
这条路线站得住的话,受影响的面比「GRPO 的一个改法」大:任何以组相对为骨架的后训练目标(GRPO、DAPO、GMPO、各类 agentic RL)都要重新回答「参考模型的信息从哪条边进」。更实际的推论是,「去掉 KL 更好」这个经验结论不是 KL 无用,而是独立损失支这种接法无用——KL 在系数层是有用的,且能吃到比原来大三个数量级的权重(0.001 对 4)而不崩。附录 G 那个弱奖励翻转构造也有普适性:只要奖励信号比 KL 项弱,独立 KL 就能把负奖励的贡献翻成正的,这对密集但微弱的奖励 shaping 是个直接警告。
5 实践启示
可以借鉴的技术
- 把正则项从损失层搬到系数层:任何「与奖励并行加一项」的正则,都可以试着改写成「在组内的奖励系数上加一个零和修正」。好处是共有成分自动消失,只剩下比较信息。
- 长度归一化加组内中心化:这两步是消融里最值钱的(−11.2 / −11.8),实现成本极低,任何按序列累加的惩罚项都值得先做这两步。
- 全词表条件 KL 替代采样对数比: 消掉条件采样噪声,代价只是 fp32 输出层重投影加全词表归约(报 0.5%)。bf16 下 是二阶小量,这个 fp32 重算不能省。
- 最大绝对 advantage 归一化:把每组最强信号钉成单位量,附带一个免费的隐式课程——因子变成共有后自动让位给残差因子。
- checkpoint 按累计 GPU 时间对齐:本专栏在多篇里都栽在 checkpoint 口径上,这篇的做法可以直接抄。
落地前要补的三条对照
- 加一条「只留 」的臂,把「校准」和「主导」分开;顺手把 在训练过程中的曲线打出来。
- 补一条长度匹配对照:把无 KL 基线的生成长度拉到与 ZCPO 相当,或在同一 token 预算下评测,隔离长度通道。
- 把 F2、F4、F5、F6 各做一条任务级对照臂(F1 已经做了),让 +12.3 / +13.8 这笔账能按机制拆开。
潜在应用场景
- 长上下文与多轮 agent:这类场景的奖励最晚到且最微弱,正是独立 KL 最容易翻向的地方(附录 G 的构造直接命中)。
- 连续或密集奖励 shaping:奖励尺度小、优势被 压平时,共移漂移会盖掉奖励方向,ZCPO 的中心化正好对上。
- 奖励饱和后的残差挖掘:当主因子在组内变成共有,最大绝对归一化会自动把权重让给残差差异,省掉一个课程调度器。
- 需要保留探索多样性的场景: 时 KL 项在系数层偏好「漂移更小的候选」,等价于组内抗漂移均衡,与熵坍缩那条线同源,值得拿熵曲线直接对照。
参考文献
Ding, F. (2026). When KL Regularization Misfires in Group Policy Optimization. arXiv:2610.12161 [cs.LG]. Alibaba Group.
相关精读
- 本篇把本专栏连续三十四期的主线再挪一格:此前三十三期回答的是「挑哪些 token、挑哪些轨迹、信用按哪套口径记账、信号被消费时旧了多少、数据分布离基座多远、整条响应有没有资格参与这次更新、策略容量会不会被优化动力学耗光、教师分布里哪些位置允许比较、事后经验除了改行为还能不能改行动之前的那次预测」,这一期问的是参考模型的 KL 该从哪条边进组相对更新——作用层从「训练信号长什么样」转到「正则项接在损失上还是接在系数上」。
- 精读:SRD——把事后回顾蒸成事前先见
- 精读:跨分词器 OPD——把对齐覆盖度补满反而掉点
- 精读:Mesh Learning——把 RLVR 的坍塌解释成策略容量的供需冲突
- 精读:CARM——把响应级掩码的判据从净位移换成双向漂移
- 精读:把 off-policy 专家数据 MCMC 投影成 on-policy 数据
- 精读:GMC-GRPO——把重要性比从逐条裁剪换成整组收缩
- 精读:SCAPO——用「扰动下不动」给 token 记一笔负账
- 精读:ARCUS——prompt 的选择也有一条弧
- 精读:把中间那一步的信号从模型里搬进环境——用沙箱回滚跑出免费过程奖励
- 精读:把特权信息从损失搬到采样器——多轮 agent 里自蒸馏为什么会崩
- 精读:OC-GRPO 与离上下文重要性校正
- 精读:不跑 RL,先把新奖励的结果预测出来
- 精读:给 token 级信用一个唯一解,然后把它求和掉
- 精读:把后训练配方本身当成果,再逐阶段对账
- 精读:STAR-E——按惊讶度给 token 重加权 advantage
- 精读:按梯度可估性给 token 分配蒸馏监督
- 精读:TrimSFT——按 logit 间隔剪掉 SFT 里的低信息 token
- 精读:ESFT 与端点 SFT 对中段推理链的裁剪
- 精读:把中间状态的价值估计整体消掉
- 精读:ActObs——把被 mask 掉的那 45% 观察 token 重新纳入损失
- 精读:SP³O——一条响应里只给三个位置价值监督
- 精读:教师引导的课程 RLVR——把解不出的题变成可解的题
- 精读:DataFlex-RL 与均匀采样的替代策略
- 精读:NGU 与 RL 里的马太效应
- 精读:按排序可分辨性做 RLVR 数据联合工程
- 精读:模型与外壳共演化时的同策略校正
- 精读:OPD-then-RL——顺序摆信号胜过同 step 混信号
- 精读:One-Shot OPD 与状态覆盖吸收率
- 精读:Compile by Training——把 LLM 降级为构建期依赖
- 精读:Terminal-Universe——轨迹反向造环境
- 精读:OPSA——无教师的同策略自适应
- 精读:SPADE——把优化对象从轨迹上移到生成器
- 精读:DART-SD——标注单元从轨迹换成状态图