Ch 18 · OPD
第四部分 · 后训练 · 18

OPD — 多教师 → 单学生的合一

为什么 V4 把 V3 的"混合 RL"整体替成 reverse-KL 蒸馏,"on-policy + reverse KL + 全词表"三件事的组合在数学上意味着什么,以及为什么"forward KL 的 mass-covering"会把多 teacher 拉成 mean of teachers、reverse KL 的 mode-seeking 反而让 student 在每道题上"自然找最强 teacher"。

名词速通 · 一分钟看懂"OPD"

OPD = On-Policy Distillation:学生 $\pi_\theta$ 自己 rollout 生成 trajectory,对 N 个 frozen 领域 teacher $\{\pi_{E_i}\}$ 求 reverse KL 加权和作为损失,最小化即"把所有 teacher 的高概率区域吸收过来"

一句话:把 V3 的"混合 RL"整体替成"反向 KL 蒸馏"。 RL 只学 reward 期望("做对了得多少分"),KL 蒸馏学整个分布("在每个状态下 teacher 的概率分布是什么形状")。 后者承载的信息量大得多 —— 一条 reward = 1 个标量,一条 logit 分布 = $|V|=128\text{K}$ 个数。OPD 的赌注:分布信息让蒸馏"无损",多 teacher 合并不再是 reward 加权而是分布选择

OPD(On-Policy Distillation)
本章主角。从学生自己的策略采样 trajectory $y \sim \pi_\theta(\cdot \mid x)$,然后在每个 token 位置算 student 与 N 个 teacher 的 KL 损失。"on-policy" 是关键修饰词 —— 区别于 off-policy(用 teacher trajectory 训学生)。
KL Divergence(KL 散度)
$D_{\text{KL}}(P \| Q) = \sum_x P(x) \log \frac{P(x)}{Q(x)}$。不对称:$D_{\text{KL}}(P\|Q) \ne D_{\text{KL}}(Q\|P)$。这种不对称性不是 bug 而是设计变量 —— 选 forward 还是 reverse 决定了学生学到的"行为模式"。
Forward KL(mass-covering)
$D_{\text{KL}}(\pi_E \| \pi_\theta) = \mathbb{E}_{y \sim \pi_E}[\log \pi_E - \log \pi_\theta]$。从 teacher 采样、以 teacher 为锚。性质:$\pi_E(y) > 0$ 但 $\pi_\theta(y) \to 0$ 时 loss → ∞ ⇒ 学生必须覆盖 teacher 所有概率质量,包括长尾。在多 teacher 场景下被迫"取并集",成为mean of teachers
Reverse KL(mode-seeking)
$D_{\text{KL}}(\pi_\theta \| \pi_E) = \mathbb{E}_{y \sim \pi_\theta}[\log \pi_\theta - \log \pi_E]$。从学生自己采样、以学生为锚性质:$\pi_\theta(y) > 0$ 但 $\pi_E(y) \to 0$ 时 loss → ∞ ⇒ 学生不能在 teacher 的低概率区域有概率,只能把概率集中到 teacher 的某个 mode。多 teacher 场景下学生学会"在每个 prompt 上选最强 teacher 的 mode",取交集而非并集
Mode-Seeking vs Mass-Covering(直觉对比)
双峰 teacher 分布(左峰右峰各占 50%)时:forward KL 的最优 student 是整个分布的均值(中间一个胖单峰,两个峰都覆盖但都不准);reverse KL 的最优 student 是选其中一个峰复刻(贴一个真峰,舍弃另一个)。直觉:forward 是"什么都要"、reverse 是"专精就行"。
On-Policy(在策略上采样)
损失里的采样分布是 $\pi_\theta$ 自己。每个 step 生成时用当前最新 policy。对应 reverse KL 的天然搭档 —— $D_{\text{KL}}(\pi_\theta \| \pi_E)$ 的期望就是在 $\pi_\theta$ 上取的,on-policy 让蒙特卡洛估计无偏。
Off-Policy 蒸馏(被否定的对象)
另一种做法:让 teacher 生成 trajectory $y \sim \pi_E$,学生用 supervised cross-entropy 拟合。问题:学生在自己永远不会生成的 trajectory 上被迫学拟合,分布严重偏移;只能学"模仿 teacher 表面",不能学"在自己出错时 teacher 怎么救"。
Full-Vocabulary OPD(全词表蒸馏)
每个 token 位置上都拿到 teacher 的完整 logit 分布($|V| > 100\text{K}$),算精确 KL。对比 token-level 估计:后者只用 $\log(\pi_E(y_t)/\pi_\theta(y_t))$ 作 per-token advantage 塞进 RL framework,丢掉 99.99% 的分布信息。V4 选 full-vocab 是把工程难度上限拉满 —— Ch19 整章就是为了让这件事跑得起。
Mixed RL(被替代的对象)
V3 末段的训练范式:所有领域 reward 加权求和后跑混合 RL。问题:(1) reward 量纲不一致,被绝对值大的任务主导;(2) reward 只学期望、不学分布形状;(3) 多领域 reward 互相干扰、调参组合爆炸。OPD 替掉它的核心论断:"既然每个 specialist 已经是该领域最优 policy,直接学 specialist 的分布就够了"
一句话定位:OPD 是 V4 与 V3 的训练范式分水岭。混合 RL → 反向 KL 蒸馏的转变,本质是"reward 期望 → 分布形状"的信息升级;选择 reverse KL + on-policy + 全词表 这三件事的组合,让 N 个领域 specialist 能"按 prompt 选最强 teacher"地合并到一个 student。读完这章你应该能解释为什么 forward KL 不行、为什么 token-level 估计不行、为什么必须 on-policy。

1. 为什么不再用混合 RL

V3 的最后一段训练把所有专家 SFT 数据放到一锅,配多种 reward(rule + RM)跑混合任务 RL。这条路在 V4 规模下出现三个症状:

  • 方差爆炸:多领域 reward 量纲不一致(数学 0/1 vs 写作 0–10),加权和被绝对值大的任务主导,小信号被淹没;
  • 分布偏移:reward 信号稀疏(一条 trajectory 只有最终一个数),long horizon 上学到的策略与单领域 specialist 差距明显;
  • "分布形状"丢失:reward 只学"期望",learner 容易在 edge case 上塌缩到 mode 上某个尖峰 —— 答对了但失去多样性。

OPD 的回答是:"既然每个 specialist 已经是该领域的最优 policy,直接让 student 学 specialist 的分布就够了。" 用蒸馏代替再次 RL,把"reward 加权"换成"分布合并"。

数值演练 · reward 信号 vs 分布信号 单条 trajectory 长度 5000 token:
  • RL reward:1 个标量(最终 reward),承载 ~1 byte 信息;
  • token-level KL:5000 × 1 个 ratio,承载 ~5KB 信息;
  • full-vocab KL:5000 × 128K 个 logit,承载 ~5MB 信息(FP8 算);
从 reward 到 full-vocab,单 trajectory 携带的训练信号涨了 5 个数量级。RL 之所以慢、需要海量 trajectory,是因为信号太稀疏;OPD 的梯度估计方差小得多,同样收敛精度下数据效率高几十到几百倍。这就是 V4 敢花精力做"trillion teacher × full vocab × multi-domain"的根本动机。

2. OPD 损失:多教师 reverse KL 加权和

给定 N 个 frozen 领域 expert $\{\pi_{E_1}, \dots, \pi_{E_N}\}$ 和领域权重 $\{w_i\}$,学生 $\pi_\theta$ 的 OPD 损失为:

$$ \mathcal{L}_{\text{OPD}}(\theta) \;=\; \sum_{i=1}^{N} w_i \cdot \mathbb{E}_{x \sim \mathcal{D}_i,\; y \sim \pi_\theta(\cdot \mid x)} \!\left[\, D_{\text{KL}}\!\big(\pi_\theta(\cdot \mid x, y_{<t}) \,\big\|\, \pi_{E_i}(\cdot \mid x, y_{<t})\big) \,\right] $$
📖 公式白话翻译

这条损失从内到外读:

  1. $D_{\text{KL}}(\pi_\theta \| \pi_{E_i})$:在当前 token 位置,学生分布与第 $i$ 个 teacher 分布的 reverse KL;
  2. $y \sim \pi_\theta$:trajectory 由学生自己采样 —— 这是 "on-policy" 的具体含义;
  3. $x \sim \mathcal{D}_i$:prompt 来自第 $i$ 个领域的数据集;
  4. $\sum_i w_i \cdots$:N 个领域的损失加权求和。

关键的隐藏性质:对一个具体 prompt $x$,最相关的 teacher 自然主导梯度。直觉:如果 $x$ 是数学题,数学 teacher $\pi_{E_{\text{math}}}$ 给 sensible 的 logit 分布、其它 teacher 给"乱答"的分布。reverse KL 的 mode-seeking 性质让学生选 sensible 那个分布的 mode,自动忽略乱答。这就是"按 prompt 选 teacher"的数学根源 —— 不需要显式路由,是 reverse KL 自带的属性。

3. 为什么必须 reverse KL:mode-seeking vs mass-covering

这是整章最核心的洞察。先看两种 KL 的解析最优

$$ \begin{aligned} \pi_\theta^{\star,\text{fwd}} &= \arg\min_{\pi_\theta} D_{\text{KL}}(\pi_E \| \pi_\theta) &&= \pi_E \;\;\text{(须覆盖全部 mass)} \\ \pi_\theta^{\star,\text{rev}} &= \arg\min_{\pi_\theta} D_{\text{KL}}(\pi_\theta \| \pi_E) &&= \pi_E \;\;\text{(也是它,但容量受限时塌到 mode)} \end{aligned} $$
📖 容量受限时两者发散

关键不在"无限容量下都收敛到 $\pi_E$",而在容量受限(学生模型表达能力有限)时两者的近似行为:

  1. forward KL(mass-covering):$\pi_E(y) > 0$ 处 $\pi_\theta(y)$ 必须 $> 0$ 否则 loss = +∞。学生被迫覆盖 teacher 所有概率质量,即使是低概率长尾。容量受限时 → 分布"摊平",多 teacher 合并 → mean of teachers;
  2. reverse KL(mode-seeking):$\pi_\theta(y) > 0$ 处 $\pi_E(y)$ 必须 $> 0$ 否则 loss = +∞(反过来)。学生不能进入 teacher 的低概率区域,但允许放弃 teacher 的某些高概率区域。容量受限时 → 分布"聚焦",多 teacher 合并 → 在每个 prompt 上选一个 teacher 的 mode;

对 V4 这种"把 N 个领域 specialist 合并到一个 student"的目标,mode-seeking 是想要的。每个 prompt 上让最强 teacher 主导,舍弃弱 teacher 的"乱答"长尾,正是选择性吸收
反之 forward KL 的 mass-covering 会强制让 student 在每个 prompt 上同时模仿 N 个 teacher 的分布,失败案例:数学 teacher 算出 $42$、写作 teacher 写故事,student 被迫两者都覆盖 → 输出"42 在故事里出现"的奇怪混合。

Demo · 1D 双峰 teacher 上 reverse / forward KL 的最优 student(容量限制为单峰高斯)
交互
teacher 双峰 $\pi_E$ forward KL student(mass-covering) reverse KL student(mode-seeking) 输出空间 $y$(如 token 位置上的 logit) 峰间距 = 3.0 · forward KL 输出形状:"胖均值" · reverse KL 输出形状:"单峰"

读图法:红色填充曲线是 teacher 的真实双峰分布(两个 mode 代表两个 teacher 的强项)。黄虚线是 forward KL 训出的最优单峰 student —— 胖且骑在两峰中间,两峰都覆盖但都不准(mass-covering)。绿实线是 reverse KL 的最优单峰 student —— 选其中一个峰精确复刻(mode-seeking)。
把"双峰间距"拉到 5σ 以上看:黄线变得越来越平、覆盖范围越来越宽(被迫覆盖两峰间的山谷);绿线始终贴在左峰上不动。这就是 V4 选 reverse KL 的根本原因 —— 多 teacher 间冲突越大,forward 越塌成无意义平均,reverse 越坚定地选最强 mode。

4. 为什么必须 on-policy

光选 reverse KL 还不够。损失里的期望 $\mathbb{E}_{y \sim \pi_\theta}[\cdots]$ 必须从学生自己当前的策略采样 —— 这就是 "on-policy"。如果用 teacher 采样(off-policy 蒸馏),会出两个问题:

  1. 分布偏移(distribution shift):teacher rollout 走的是 teacher 自己擅长的路径;学生在自己永远不会走的路径上被强迫学拟合,训完上线时学生根本到不了那些位置,蒸馏白做;
  2. 错误恢复(error recovery)丢失:on-policy 让学生从自己的错误位置出发,看 teacher 在那些位置上的分布是什么 —— "我犯错了,正确老师该怎么救"。off-policy 永远看不到学生的错误,等于训了个"模仿 teacher 顺利答题"的伪 student,遇到自己出错就抓瞎。
on-policy 的工程代价

On-policy 要求每个 train step 都要先用当前最新 policy rollout 一批 trajectory,再算 KL 损失。这相当于"训练 + 推理交错",比纯监督学习贵得多。Ch19 的"WAL Rollout + Million-token RL"整节就是为了让 on-policy rollout 能在 1.6T 规模 + 1M context 下跑起来 —— 没有那一节,OPD 是 PPT。

5. 为什么要做"全词表",不退化到 token-level

一种工程偷懒做法是把 OPD 退化成 token-level RL:每个 token 位置只取学生与 teacher 的那一个 token 的 log 比值作为 advantage:

$$ A_t^{\text{token}} \;=\; \log \frac{\pi_E(y_t \mid x, y_{<t})}{\pi_\theta(y_t \mid x, y_{<t})} $$

把它当 RL advantage 塞进 GRPO loop,省掉算全词表 logit 的麻烦。论文给出三条否定理由:

  • 梯度方差极高:单 token 的 ratio 是 1 个噪声大的标量,长序列累乘后方差爆炸;
  • 没真正利用 teacher 的分布信息:teacher 在 $y_t$ 上给的不仅是"$y_t$ 的概率",更重要的是"除 $y_t$ 之外其它 token 的概率"—— 这才是判断 teacher "有多确定"的关键。token-level 完全丢掉这部分;
  • 等价 RL 的局限:token-level 蒸馏数学上就是 KL 的蒙特卡洛单样本估计,再塞进 RL 框架。这是"复用 RL loop"的便利,不是分布学习。

V4 选保留完整 logit 分布($|V| > 100\text{K}$ 全词表),算精确 KL:

$$ D_{\text{KL}}(\pi_\theta \| \pi_E) \;=\; \sum_{v=1}^{|V|} \pi_\theta(v) \log \frac{\pi_\theta(v)}{\pi_E(v)} \quad \text{(每 token 位置都算一次)} $$
数值演练 · 全词表的工程账 单 step 训练里:
  • batch = 256 prompt × seq = 8K token = $2 \times 10^6$ 位置;
  • 每位置全词表 logit FP8 = $128\text{K} \times 1\text{ B} = 128\text{ KB}$;
  • 10 个 teacher 同框 = $2 \times 10^6 \times 128\text{ KB} \times 10 \approx \mathbf{2.6\text{ TB}}$ logit;
单 step 一个 mini-batch 的纯 logit 张量就 2.6 TB,远超任何 GPU 集群的总显存。不可能"装下"全词表 logit,必须靠 Ch19 的"不实例化 logits + 中央存储 + teacher 排序 batching" 把它从来不在同一时刻全摆在 GPU 上。这就是为什么 V4 单独用一章讲工程基建。

6. 与 specialist 的接力

  • 每个 specialist 已经在 Ch16 走完 SFT + GRPO,是该领域最强的
  • OPD 把 N 个 specialist 当 frozen teacher,不再更新它们的权重
  • student 即"未来发布的 V4-Pro / V4-Flash"本体,从 Pro/Flash-Base 出发;
  • 训练目标:student 在所有领域都能 ≥ 对应 specialist 的能力 + 跨领域更强的泛化。
直觉对比 · mixed RL vs OPD

mixed RL 像让一个学生同时上 10 节不同老师的课,每个老师只给"对错"打分;
OPD 像让 10 个老师批改学生自己交上来的作业,每份作业每位老师都给出完整的解题分布("你这题我会怎么想,每一步可能选什么 token"),学生在每道题上自然地参考"对这种题最有发言权"的那位老师 —— mode-seeking 让"在数学题上听数学老师、在写作题上听写作老师"自动成立。
前者是 reward summing,后者是 distribution selecting。OPD 的"选"不是显式 router,而是 reverse KL 数学上自带的mode-seeking 性质

7. 一句话总结

把整章压成一句话

OPD 把 V3 的"reward 期望"训练范式升级成 "分布形状"训练范式 —— reverse KL 的 mode-seeking 让多 teacher 合并不再是 mean of teachers,而是在每个 prompt 上选最强 teacher 的 mode;on-policy 让学生从自己的错误位置出发学习"如何被救";全词表让 teacher 的整个分布信息无损传递。三件事缺一不可,工程代价由 Ch19 承担。