23 分钟阅读

中文版 · Read in English

这是我第一次在个人网站上认真写一篇技术博客,多少还有些生疏,文中也难免有考虑不周或表达不够清楚的地方。如果你发现任何不准确之处,或有值得继续讨论的想法,十分欢迎指正和交流,也请大家多多包涵。

你可能听说过 On-Policy Distillation(OPD):让 student 在自己的轨迹上生成数据,并通过匹配 teacher 的概率分布来学习(Agarwal et al., 2024)。

当只有一个 teacher 时,这个理解似乎已经足够。但当我们开始引入多个 teacher,或者希望组合不同的蒸馏目标时,事情会迅速变得复杂:我们到底在组合什么?最终又希望 student 学到什么?

在这篇博客里,我想介绍一个自己觉得非常直观的视角:把复杂的蒸馏问题转化为简单的向量组合与匹配问题。

在这个视角下,我们不仅可以更容易地理解 OPD,也可以更自由地回答一个更有趣的问题:如果可以选择,我们到底想从模型中蒸馏什么?

概率分布是一个有点“麻烦”的对象。我们可以比较两个分布,却很难直观地问:一个分布比另一个分布多了什么?两个模型各自学到的东西能不能相加?又能不能从一个模型里减掉某种能力?

如果这些概率分布能够被表示成普通向量,事情就会简单很多。我们可以用减法描述模型之间的变化,用加法组合来自不同模型的变化,甚至把一个复杂的蒸馏目标拆解成若干个简单的方向。

换句话说,我们可以把一个原本发生在概率空间里的问题,转化为一个线性代数问题。

幸运的是,确实存在这样的工具。

全文主线:先用 CLR 把概率分布映射到向量空间,在向量空间里构造想要的目标,再选择合适的散度让 student 匹配这个目标。

为简化符号,本文默认讨论的是给定当前 context 后的 token-level categorical distribution,并省略对 context 的显式条件。对于 softmax 输出,各分量都严格大于 0,因此满足下文 CLR 变换的定义域要求。

1. 中心对数比变换(Centered Log-Ratio Transformation)

1.1. 为什么需要 CLR

在继续讨论蒸馏之前,我们先解决一个更基础的问题:怎么把概率分布变成一个真正适合做“加减法”的向量?

其实,这并不是一个新问题。在计算生物学、微生物组分析、分析化学等领域,人们长期都在处理一类特殊的数据:compositional data(组成数据)Aitchison, 1982)。这类数据真正重要的往往不是每个分量的绝对大小,而是它们彼此之间的相对比例。概率分布正是一种典型的组成数据。

为了把这类数据带入我们更熟悉的线性代数世界,一个经典工具就是中心对数比变换(Centered Log-Ratio, CLR Transformation)

它的核心思想可以概括成一句话:把“比例”变成“坐标”,把概率分布变成可以做线性运算的向量。

对于一个分类分布

\[p=(p_1,p_2,\ldots,p_K), \qquad \sum_{i=1}^{K}p_i=1,\quad p_i>0,\]

其 CLR 变换定义为

\[C(p)_i = \log p_i- \frac{1}{K}\sum_{j=1}^{K}\log p_j.\]

直观上,CLR 并不直接关心某个 $p_i$ 本身有多大,而是关心它相对于整个分布中的其他分量有多大。正是这种相对关系,让我们之后可以自然地讨论两个模型之间的“方向”“差异”和“组合”。

1.2. CLR 的几个关键性质

CLR 之所以适合拿来理解蒸馏,主要是因为它保留了概率分布里真正重要的相对关系,同时又把分布放进了一个可以做线性运算的空间。

1. CLR 向量的分量和恒为 0

\[\sum_{i=1}^{K}C(p)_i=0.\]

所以,虽然 $C(p)$ 有 $K$ 个分量,它实际上只有 $K-1$ 个自由度。这和一个 $K$ 类概率分布的自由度完全一致。

2. CLR 精确保留概率之间的比例关系

\[C(p)_i-C(p)_j = \log\frac{p_i}{p_j}.\]

也就是说,CLR 空间中两个坐标之差,正好对应原概率分布中两个类别之间的 log-ratio。

从这个角度看,CLR 并没有丢掉概率分布真正关心的信息,而只是换了一套更方便做线性运算的坐标系。

3. CLR 对整体缩放不敏感

对于任意 $c>0$,

\[C(cp)=C(p).\]

这是因为 CLR 只关心各分量之间的相对比例,而不关心它们共同乘上了多少。

4. 对 softmax logits 来说,CLR 就是去掉整体平移后的 logits

假设

\[p=\operatorname{softmax}(z),\]

那么可以直接得到

\[C(p)_i = z_i- \frac{1}{K}\sum_{j=1}^{K}z_j.\]

也就是说,CLR 只是从每个 logit 中减去了 logits 的均值。

这点对后面的蒸馏尤其重要,因为 softmax 本身就对整体平移不敏感:

\[\operatorname{softmax}(z+c\mathbf{1}) = \operatorname{softmax}(z).\]

因此,CLR 可以理解为 logits 的一个“规范化坐标系”:它保留所有会影响概率分布的相对结构,同时去掉不会影响 softmax 的整体偏置。

1.3. 逆变换

CLR 不仅可以把概率分布映射到向量空间,而且这个过程是可逆的。

如果给定一个 CLR 向量

\[z=C(p),\]

那么我们可以通过 softmax 恢复原始的概率分布:

\[p_i = \frac{e^{z_i}}{\sum_{j=1}^{K}e^{z_j}} = \operatorname{softmax}(z)_i.\]

因此,对于所有分量严格为正的分类分布,CLR 在概率单纯形的内部与下面这个零和向量空间之间建立了一一对应:

\[\left\{ z\in\mathbb{R}^K \;\middle|\; \sum_{i=1}^{K}z_i=0 \right\}.\]

也就是说,CLR 变换不会丢失概率分布中的任何信息:每一个概率分布都对应唯一的 CLR 向量,而每一个分量和为 0 的 CLR 向量,也都可以通过 softmax 唯一地还原成一个概率分布。

因此,我们可以先把概率分布转换到 CLR 空间,用熟悉的向量加减和线性代数工具进行操作,再通过 softmax 回到概率空间。

1.4. Bonus:Aitchison 几何

如果你愿意再往前走一步,会发现 CLR 并不是一个偶然好用的变换。

概率分布属于一种特殊的 compositional data。对于这类数据,真正有意义的不是各个分量的绝对大小,而是它们之间的比例。因此,普通欧氏空间里的加法和距离并不是最自然的运算。

Aitchison geometry 正是为这种“只关心相对比例”的数据设计的一套几何结构(Aitchison, 1986)。

在 Aitchison geometry 中,两个 composition 的“相加”并不是逐元素相加,而是先逐元素相乘,再重新归一化。对于两个概率分布 $p$ 和 $q$,可以写成

\[p\oplus q = \mathcal{C}(p_1q_1,\ldots,p_Kq_K),\]

其中,$\mathcal{C}$ 表示把所有分量重新归一化到和为 1。

类似地,对一个 distribution 做“数乘”,对应的是对每个分量取幂后再归一化:

\[\alpha\odot p = \mathcal{C}(p_1^\alpha,\ldots,p_K^\alpha).\]

这些运算看起来可能有些陌生,但 CLR 的漂亮之处就在这里:

\[C(p\oplus q)=C(p)+C(q),\]

以及

\[C(\alpha\odot p)=\alpha C(p).\]

也就是说,Aitchison geometry 里的“加法”和“数乘”,经过 CLR 之后,就变成了普通的向量加法和数乘。

所以,CLR 并不只是简单地“把概率转成一个向量”。更准确地说,它把概率单纯形上原本隐藏的线性结构,变成了我们熟悉的欧氏线性结构。

这也是为什么,后面我们可以放心地用向量的语言讨论 policy 的组合、差异和方向。

2. OPD 的向量解释

有了 CLR 这个工具以后,我们可以重新审视 OPD。

很多时候,我们会直接把 OPD 写成某种 KL divergence 或其他 loss,然后讨论应该使用 Forward KL、Reverse KL,还是其他相似度度量。

但这种写法其实把两个不同的问题混在了一起:

  1. 我们希望 OPD 学到哪一个分布?
  2. 我们应该如何度量 student distribution 和 target distribution 之间的差异?

在本文的视角下,我们把这两个问题明确分开。

第一个问题是 Target Distribution Construction(目标分布构造)。我们先将 teacher、student、reference model 等分布通过 CLR 映射到向量空间,再利用向量的加法、减法、缩放和组合,构造出真正希望 student 学习的 target vector,最后通过逆变换得到对应的 target distribution。

第二个问题是 Similarity Measurement(相似度度量)。在目标分布确定之后,我们再选择合适的方式来衡量 student distribution 和 target distribution 之间的差异,例如 Forward KL、Reverse KL 或 Jensen-Shannon Divergence。

2.1. 目标分布构造:用向量运算定义想学到的分布

在本文的视角下,OPD 的第一步不是直接写 loss,而是先回答一个更根本的问题:

我们到底希望 student 学到哪一个分布?

有了 CLR 变换以后,这个问题可以转化为一个非常简单的三步过程:

  1. 把相关模型的概率分布映射到 CLR 空间;
  2. 在 CLR 空间中做向量运算,构造目标向量;
  3. 通过 softmax 把目标向量变回目标分布。

也就是说,所谓 Target Distribution Construction,本质上就是

\[p_1,p_2,\ldots,p_n \xrightarrow{\text{CLR}} c_1,c_2,\ldots,c_n \xrightarrow{\text{Vector Operations}} c_{\text{target}} \xrightarrow{\text{Softmax}} p_{\text{target}}.\]

接下来,我们用几个最常见的例子来看这件事。

Example 1:Traditional OPD

经典知识蒸馏通过匹配 teacher 的软输出向 student 迁移知识(Hinton et al., 2015);其 on-policy 版本则在 student 自己生成的序列上进行这种匹配(Agarwal et al., 2024)。

最传统的 OPD 只有一个 teacher $T$ 和一个 student $S$。在这种情况下,目标分布非常简单:就是 teacher 本身的分布。

如果记

\[c_S=C(p_S), \qquad c_T=C(p_T),\]

那么最直接的目标构造就是

\[c_{\text{target}}=c_T.\]

从向量的角度看,这也可以写成

\[c_{\text{target}} = c_S+(c_T-c_S).\]

Traditional OPD in CLR space

也就是说,我们从 student 当前所在的位置 $c_S$ 出发,沿着

\[c_T-c_S\]

这个方向移动,最终到达 teacher 所在的位置。

再通过 CLR 的逆变换,就得到

\[p_{\text{target}} = \operatorname{softmax}(c_{\text{target}}) = \operatorname{softmax}(c_T) = p_T.\]

因此,传统 OPD 在这个视角下可以非常简单地理解为:

把 student 拉到 teacher 所在的位置。

Example 2:Weak-to-Strong Distillation

接下来考虑一个更有意思的场景:我们有一个 weak reference model $W$、一个经过强化的 weak teacher $T$,以及当前要训练的 stronger student $S$。

这个设定对应 Direct On-Policy Distillation(Direct-OPD)所研究的 weak-to-strong transfer:与其模仿 weak teacher 的最终分布,不如迁移 weak model 从训练前到训练后的 policy shift(Feng et al., 2026)。在该论文的记号中,$W$ 对应 pre-RL teacher reference,$T$ 对应 post-RL teacher;本文则直接在 CLR 空间中描述同一个变化方向。

如果目标只是复制 teacher,当然仍然可以直接令

\[c_{\text{target}}=c_T.\]

但从向量的角度看,我们还可以选择蒸馏 post-RL teacher 相对于 pre-RL reference 的提升方向

\[\Delta_{W\rightarrow T} = c_T-c_W.\]

然后把这个 improvement vector 平移到 student 当前所在的位置:

\[c_{\text{target}} = c_S+\alpha(c_T-c_W),\]

其中,$\alpha>0$ 控制我们希望施加这段提升的强度。

Weak-to-strong target construction

对应的 target distribution 为

\[p_{\text{target}} = \operatorname{softmax} \left( c_S+\alpha(c_T-c_W) \right).\]

这个表达式还可以进一步写回概率空间。由 CLR 的定义,

\[c_i(p) = \log p_i- \frac{1}{K}\sum_j\log p_j,\]

因此

\[c_{\text{target},i} = \log p_{S,i} +\alpha\log p_{T,i} -\alpha\log p_{W,i} +\text{constant}.\]

经过 softmax 后,与 $i$ 无关的常数项会被消掉,因此

\[p_{\text{target},i} \propto p_{S,i} \left( \frac{p_{T,i}}{p_{W,i}} \right)^\alpha.\]

归一化以后,

\[p_{\text{target},i} = \frac{ p_{S,i} \left( \frac{p_{T,i}}{p_{W,i}} \right)^\alpha }{ \sum_j p_{S,j} \left( \frac{p_{T,j}}{p_{W,j}} \right)^\alpha }.\]

所以,从这个视角看,我们蒸馏的并不是 weak teacher 本身,而是它相对于自身 reference 所体现出的训练变化:

与其复制 weak teacher,不如把 weak teacher 相对于自身 reference 的 improvement 迁移给 stronger student。

这与 Direct-OPD 的理想化最优策略具有相同形式;该论文把指数写成 KL 系数的倒数,而本文直接用 $\alpha$ 表示 policy-shift 的转移强度。如果把它实现成显式的 target matching,target 会随当前 student 改变,因此需要明确是否对 target 分支使用 stop-gradient;Direct-OPD 本身则把 teacher shift 作为 implicit reward,并用 KL 项锚定 student initialization。

Example 3:Multi-Teacher On-Policy Distillation

最后考虑多个 teacher。近期的 frontier model technical reports 已经把 Multi-Teacher On-Policy Distillation(MOPD) 用作整合领域专家能力的核心 post-training 方法。MiMo-V2-Flash 先针对 mathematics、reasoning、safety 和 agent 等领域独立训练 specialized teachers,再让 student 在自己的 rollouts 上接受相应领域 teacher 提供的 token-level KL supervision(Xiaomi LLM-Core Team, 2026)。DeepSeek-V4 也采用类似的 specialist-then-distill pipeline:先训练多个 domain experts,再通过 student-generated trajectories 上的 weighted reverse-KL,把超过十个 teachers 的能力合并进统一模型(DeepSeek-AI, 2026)。

从 CLR 视角看,无论实际系统采用按领域选择 teacher 的 hard routing,还是同时计算多个 teacher loss 的 soft weighting,核心问题都是如何整合来自不同 teachers 的监督:

\[T_1,T_2,\ldots,T_M.\]

在 CLR 空间中,组合多个 teacher 最自然的方式之一,就是直接对它们的向量做线性组合:

\[c_{\text{target}} = \sum_{m=1}^{M}\alpha_m c_{T_m},\]

其中通常取

\[\alpha_m\geq 0, \qquad \sum_{m=1}^{M}\alpha_m=1.\]

这里的 $\alpha_m$ 也可以依赖当前 context $x$。当 $\alpha_m(x)$ 是 one-hot 权重时,它对应 MiMo-V2-Flash 所描述的 domain-routed teacher selection;当多个权重同时非零时,它对应更一般的 weighted multi-teacher objective,例如 DeepSeek-V4 报告中的加权 reverse-KL。

Multi-teacher target construction

对应的 target distribution 为

\[p_{\text{target}} = \operatorname{softmax} \left( \sum_{m=1}^{M}\alpha_m c_{T_m} \right).\]

利用 CLR 的定义,我们有

\[\sum_{m=1}^{M}\alpha_m c_{T_m,i} = \sum_{m=1}^{M}\alpha_m\log p_{T_m,i} +\text{constant},\]

因此

\[p_{\text{target},i} \propto \exp \left( \sum_{m=1}^{M}\alpha_m\log p_{T_m,i} \right) = \prod_{m=1}^{M}p_{T_m,i}^{\alpha_m}.\]

归一化以后,

\[p_{\text{target},i} = \frac{ \prod_{m=1}^{M}p_{T_m,i}^{\alpha_m} }{ \sum_j\prod_{m=1}^{M}p_{T_m,j}^{\alpha_m} }.\]

因此,CLR 空间中的凸组合,对应概率空间中的归一化加权几何平均。如果允许权重为负数或权重和不为 1,则可以得到更一般的线性组合,但它不再是通常意义上的多个 teacher 凸组合。

更一般地,我们也不一定要组合 teacher 本身,而可以组合多个 teacher 所提供的 improvement vectors。

例如,相对于一个 reference model $R$:

\[c_{\text{target}} = c_S+ \sum_{m=1}^{M}\alpha_m(c_{T_m}-c_R).\]

对应的 target distribution 为

\[p_{\text{target},i} \propto p_{S,i} \prod_{m=1}^{M} \left( \frac{p_{T_m,i}}{p_{R,i}} \right)^{\alpha_m}.\]

这时,我们组合的就不再是多个 teacher 的绝对分布,而是它们各自相对于 reference model 的变化方向。

多 teacher 蒸馏,本质上是在 CLR 空间中决定:我们究竟想组合哪些向量。

2.2. 使用具体的相似度度量构造损失

构造出 target distribution 之后,下一步就是决定:我们应该如何让 student 逼近这个 target distribution?

在这里,首先需要区分 On-PolicyOff-Policy 两种训练方式。

On-Policy 的定义非常直接:用于训练的样本由当前的 student model 自己生成。

也就是说,如果 student policy 为 $\pi_S$,那么训练 trajectory 来自

\[\tau\sim\pi_S.\]

student 先按照自己的当前 policy 进行生成,然后我们在这些 student 自己访问到的 context 上构造 target distribution,并计算相应的蒸馏损失。

相对地,Off-Policy 指训练样本并不是由当前 student model 自己生成的。它们可以来自 teacher、其他 policy,或者一个预先收集好的固定数据集。

例如:

\[\tau\sim\pi_T,\]

或者更一般地,

\[\tau\sim\mathcal{D}.\]

因此,On-Policy 和 Off-Policy 描述的是训练 context 或 trajectory 从哪里来,而不是我们用什么方式比较两个 token-level 概率分布。两者是相互独立的设计维度。

在确定训练样本之后,我们才需要选择具体的 similarity measure,例如 Forward KL、Reverse KL(Kullback and Leibler, 1951)或 Jensen-Shannon Divergence(JSD;Lin, 1991),来衡量 student distribution 和 target distribution 之间的差异。

Forward KL

\[D_{\mathrm{KL}} \left( p_{\text{target}}\Vert p_S \right) = \sum_i p_{\text{target},i} \log\frac{p_{\text{target},i}}{p_{S,i}}.\]

也可以写成期望形式:

\[D_{\mathrm{KL}} \left( p_{\text{target}}\Vert p_S \right) = \mathbb{E}_{x\sim p_{\text{target}}} \left[ \log\frac{p_{\text{target}}(x)}{p_S(x)} \right].\]

也就是说,Forward KL 是在 target distribution 下取期望。

Reverse KL

\[D_{\mathrm{KL}} \left( p_S\Vert p_{\text{target}} \right) = \sum_i p_{S,i} \log\frac{p_{S,i}}{p_{\text{target},i}}.\]

同样可以写成

\[D_{\mathrm{KL}} \left( p_S\Vert p_{\text{target}} \right) = \mathbb{E}_{x\sim p_S} \left[ \log\frac{p_S(x)}{p_{\text{target}}(x)} \right].\]

这里的期望则是在 student distribution 下计算。

Jensen-Shannon Divergence(JSD)

首先定义中间分布

\[m = \frac{1}{2} \left( p_S+p_{\text{target}} \right).\]

那么 JSD 定义为

\[D_{\mathrm{JS}} \left( p_S,p_{\text{target}} \right) = \frac{1}{2} D_{\mathrm{KL}} \left( p_S\Vert m \right) + \frac{1}{2} D_{\mathrm{KL}} \left( p_{\text{target}}\Vert m \right).\]

展开成求和形式:

\[D_{\mathrm{JS}} \left( p_S,p_{\text{target}} \right) = \frac{1}{2} \sum_i p_{S,i} \log\frac{p_{S,i}}{m_i} + \frac{1}{2} \sum_i p_{\text{target},i} \log\frac{p_{\text{target},i}}{m_i}.\]

也可以写成期望形式:

\[D_{\mathrm{JS}} \left( p_S,p_{\text{target}} \right) = \frac{1}{2} \mathbb{E}_{x\sim p_S} \left[ \log\frac{p_S(x)}{m(x)} \right] + \frac{1}{2} \mathbb{E}_{x\sim p_{\text{target}}} \left[ \log\frac{p_{\text{target}}(x)}{m(x)} \right],\]

其中

\[m(x) = \frac{1}{2} \left( p_S(x)+p_{\text{target}}(x) \right).\]

和 Forward KL、Reverse KL 不同,JSD 同时从 student 和 target 两个分布的视角来衡量它们与中间分布 $m$ 的差异,因此它是对称的:

\[D_{\mathrm{JS}} \left( p_S,p_{\text{target}} \right) = D_{\mathrm{JS}} \left( p_{\text{target}},p_S \right).\]

2.3. CLR Target Construction 与传统蒸馏目标的等价性

前面我们先在 CLR 空间中构造 target distribution,再对这个 target 做分布匹配。一个很自然的问题是:

这种“先构造 target”的写法,和直接写传统的蒸馏 objective 有什么区别?

答案是:在适当条件下,两种写法实际上是等价的。下面用 Reverse KL 作为 objective 来解释。

先看最简单的单 teacher 情况。因为

\[c_{\text{target}}=c_T,\]

所以

\[p_{\text{target}}=p_T,\]

自然有

\[D_{\mathrm{KL}}(p_S\Vert p_{\text{target}}) = D_{\mathrm{KL}}(p_S\Vert p_T).\]

更有意思的是 multi-teacher 的情况。

假设我们在 CLR 空间中构造

\[c_{\text{target}} = \sum_{m=1}^{M}\alpha_m c_{T_m}, \qquad \sum_{m=1}^{M}\alpha_m=1.\]

对应的 target distribution 为

\[p_{\text{target},i} = \frac{ \prod_{m=1}^{M}p_{T_m,i}^{\alpha_m} }{Z},\]

其中

\[Z = \sum_j\prod_{m=1}^{M}p_{T_m,j}^{\alpha_m}.\]

现在对这个 target 使用 Reverse KL:

\[D_{\mathrm{KL}} \left( p_S\Vert p_{\text{target}} \right) = \mathbb{E}_{x\sim p_S} \left[ \log p_S(x)-\log p_{\text{target}}(x) \right].\]

代入 target distribution:

\[D_{\mathrm{KL}} \left( p_S\Vert p_{\text{target}} \right) = \mathbb{E}_{x\sim p_S} \left[ \log p_S(x) -\sum_{m=1}^{M}\alpha_m\log p_{T_m}(x) +\log Z \right].\]

由于 $\sum_m\alpha_m=1$,可以整理为

\[D_{\mathrm{KL}} \left( p_S\Vert p_{\text{target}} \right) = \sum_{m=1}^{M} \alpha_m D_{\mathrm{KL}} \left( p_S\Vert p_{T_m} \right) +\log Z.\]

在固定 context、teachers 和权重 $\alpha_m$ 时,$\log Z$ 与当前 token-level student distribution 无关。因此,在这种条件下优化 student 时:

\[\boxed{ D_{\mathrm{KL}} \left( p_S\Vert p_{\text{target}} \right) \equiv \sum_{m=1}^{M} \alpha_m D_{\mathrm{KL}} \left( p_S\Vert p_{T_m} \right) }\]

其中,$\equiv$ 表示两者只相差一个与当前 token-level student distribution 无关的常数,因此具有相同的局部优化目标和梯度。

换句话说,传统的 multi-teacher Reverse-KL objective

\[\sum_m \alpha_m D_{\mathrm{KL}} \left( p_S\Vert p_{T_m} \right)\]

其实隐式地定义了一个非常明确的 target distribution:

\[p_{\text{target},i} \propto \prod_m p_{T_m,i}^{\alpha_m}.\]

CLR 的作用,就是把这个原本隐藏在 objective 里的 target distribution 显式地呈现出来。

需要注意的是,上述等价性是在固定 context 下讨论 token-level loss。若进一步对 on-policy 轨迹分布求导,context 本身会随 student policy 改变,此时还需要明确采样与梯度估计的具体处理方式。

3. CLR 揭示了什么(What CLR Reveals About Distillation)

前面我们主要把 CLR 当作一个 target construction 工具:通过向量运算构造想要的目标分布。

但 CLR 的另一个价值是,它让很多原本隐藏在概率空间中的训练现象变得非常直观。

一旦每个 policy 都被表示成一个向量,我们就可以直接观察不同蒸馏信号的:

  • 成分:哪些变化是我们真正想迁移给 student 的信息增量;
  • 方向:不同 teacher 想把 student 推向哪里;
  • 夹角:不同 teacher 的监督是否一致;
  • 长度:teacher 相对于 student 还提供了多少新的学习信号;
  • 合向量:多个蒸馏目标组合之后,最终还剩下多少有效信号。

下面从三个角度来看 CLR 视角还能告诉我们什么:如何构造想要的信息成分、如何识别 multi-teacher conflict,以及如何监测 distillation progress。

3.1. Distill the Components You Want:用信息增量构造目标

到目前为止,我们讨论的大多数目标都来自某个完整的 teacher distribution。但 CLR 视角真正有趣的地方在于:我们不一定要蒸馏某一个模型本身,而可以蒸馏模型之间某一段特定的变化。

假设我们有一对模型 $A_k^{-}$ 和 $A_k^{+}$。它们分别表示加入第 $k$ 种训练信号之前和之后的模型,并且两者共享相同的 token space。我们可以把它们之间的 CLR 差定义为

\[\Delta_k = C\left(p_{A_k^{+}}\right) - C\left(p_{A_k^{-}}\right).\]

如果这对模型之间唯一主要的变化,就是学到了我们关心的第 $k$ 种能力、偏好或行为,那么 $\Delta_k$ 就可以被理解为这一成分所带来的 information increment(信息增量)

例如:

  • pre-RL 和 post-RL checkpoint 之间的差,可以表示 RL 所引入的 policy shift;Direct-OPD 正是把这种变化当作可迁移的监督信号(Feng et al., 2026);
  • domain fine-tuning 前后的差,可以近似表示某个领域带来的知识增量;
  • preference tuning 前后的差,可以近似表示某种偏好或行为约束;
  • 两个经过不同训练阶段的 checkpoint 之差,也可以用来描述某一阶段到底改变了什么。
  • 给定不同的input之后带来的分布差异,可以表示不同input之间的信息差异

得到信息增量以后,我们可以把它平移到任意 student 当前所在的位置:

\[c_{\text{target}} = c_S+\alpha_k\Delta_k.\]

这意味着,student 不需要复制 $A_k^{+}$ 的完整分布。它只需要从自己的当前位置出发,学习我们从模型对中提取出的那一段变化。

如果我们想同时迁移多个成分,可以进一步写成

\[c_{\text{target}} = c_S+ \sum_{k=1}^{K}\alpha_k\Delta_k,\]

其中,每个 $\alpha_k$ 都控制对应信息成分的强度。$\alpha_k>0$ 表示加入或增强这个方向,$\alpha_k=0$ 表示忽略它,而 $\alpha_k<0$ 则表示尝试抑制或反向施加这一变化。

把它写回概率空间,可以得到

\[p_{\text{target},i} \propto p_{S,i} \prod_{k=1}^{K} \left( \frac{ p_{A_k^{+},i} }{ p_{A_k^{-},i} } \right)^{\alpha_k}.\]

这个表达式给出了一个非常直接的解释:我们以 student 当前的分布为起点,再乘上若干个由模型对定义的概率比。每一个 probability ratio 都描述一种相对变化,而我们可以选择保留哪些变化、施加多大强度,以及如何把它们组合起来。

从这个角度看,我们蒸馏的不是某一个完整模型,而是一组经过选择和组合的信息增量。只要某种成分能够被一个可靠的 distribution shift 表达出来,它原则上就可以成为蒸馏目标的一部分。

当然,向量差并不会自动等于一种“纯能力”。如果 $A_k^{-}$ 和 $A_k^{+}$ 同时改变了训练数据、模型结构、tokenizer、temperature 或多个训练阶段,那么 $\Delta_k$ 也会混入这些因素。要让 information increment 具有清晰含义,最好使用受控的 checkpoint pair、相同或经过对齐的 token space,并在固定 evaluation contexts 上验证这段变化是否真的对应我们想学习的成分。

即使每个 information increment 单独看都有明确含义,它们在组合后仍可能互相抵消或冲突。下一节将从 CLR 空间中的方向关系出发,讨论如何诊断并处理这种 multi-teacher conflict。

3.2. Multi-Teacher Conflict:当 teachers 互相抵消

假设 student 当前位于 $c_S$,两个 teacher 分别为 $c_{T_1}$ 和 $c_{T_2}$。

它们各自提供的蒸馏方向为

\[\Delta_1=c_{T_1}-c_S,\] \[\Delta_2=c_{T_2}-c_S.\]

如果我们同时蒸馏两个 teacher,那么有效的目标方向可以被理解为它们的加权组合:

\[\Delta_{\text{total}} = \alpha_1\Delta_1+ \alpha_2\Delta_2.\]

当两个 teacher 的方向相近时,

\[\Delta_1^\top\Delta_2>0,\]

它们提供的是一致的学习信号,组合后会彼此强化。

但如果两个 teacher 指向相反的方向,

\[\Delta_1^\top\Delta_2<0,\]

它们就会发生抵消。

在极端情况下,

\[\Delta_1\approx-\Delta_2,\]

于是

\[\Delta_{\text{total}}\approx 0.\]

Consistent and conflicting multi-teacher directions

这时,虽然两个 teacher 单独看都可能非常强,它们组合起来却几乎没有给 student 提供任何有效的目标方向。

Multi-teacher distillation 的问题不一定是 teacher 不够强,而可能是 teachers 的目标本身互相冲突。

在概率空间中,这种冲突往往很难直接看出来;但在 CLR 空间中,它只是两个向量之间的方向冲突。

我们还可以用 cosine similarity 直接量化两个 teacher 的一致程度:

\[\operatorname{sim}(T_1,T_2) = \frac{ \Delta_1^\top\Delta_2 }{ \|\Delta_1\|_2 \|\Delta_2\|_2 }.\]

当该值接近 $1$ 时,两个 teacher 的蒸馏方向高度一致;接近 $0$ 时,两者近似正交;接近 $-1$ 时,则说明它们提供了几乎完全相反的学习信号。

3.3. 用 CLR 向量监测蒸馏进展

CLR 还提供了一种非常自然的方式,帮助我们观察蒸馏到底进行到了哪里。

假设 target vector 为 $c_T$,训练过程中第 $t$ 步的 student 为 $c_S^{(t)}$。

定义当前剩余的蒸馏向量:

\[\Delta^{(t)} = c_T-c_S^{(t)}.\]

那么

\[\|\Delta^{(t)}\|_2\]

就可以被理解为 student 在 CLR 空间中距离目标还剩下多少。

随着训练进行,如果蒸馏正常收敛,我们应该看到

\[\|\Delta^{(t)}\|_2\rightarrow 0.\]

但仅仅观察长度还不够。

我们还可以观察 student 每一步实际移动的方向:

\[u^{(t)} = c_S^{(t+1)}-c_S^{(t)}.\]

然后比较它与目标方向 $\Delta^{(t)}$ 的夹角:

\[\cos\theta_t = \frac{ u^{(t)\top}\Delta^{(t)} }{ \|u^{(t)}\|_2 \|\Delta^{(t)}\|_2 }.\]

如果 $\cos\theta_t$ 接近 $1$,说明 student 正在朝着 target 移动;如果接近 $0$,说明当前更新几乎没有推动 student 接近目标;如果小于 $0$,甚至说明 student 正在远离 target。

Distillation trajectory in CLR space

因此,我们不仅可以问:

Loss 有没有下降?

还可以直接问:

Student 到底有没有沿着我们想要的方向移动?

在实际监测中,$c_T$、$c_S^{(t)}$ 和相应指标都依赖具体 context,通常需要在一组固定 prompts 或评估 contexts 上进行平均,才能得到可比较的训练曲线。

4. 总结

这篇文章试图提供一个统一而直观的视角:蒸馏不只是选择一个 loss,更重要的是先明确我们究竟想让 student 学到什么。

CLR 变换把概率分布映射到零和向量空间,同时完整保留类别之间的 log-ratio。这样一来,模型之间的差异可以被表示成方向,多个 teacher 的信息可以被组合,某种能力也可以相对于 reference model 被提取出来。

从这个视角看,蒸馏可以被拆成三个相互独立的问题:

  1. 数据从哪里来? On-policy 使用 student 自己访问到的 trajectories 或 contexts,off-policy 则使用其他 policy 或固定数据集产生的数据。
  2. 目标是什么? 在 CLR 空间中,我们既可以复制 teacher,也可以提取、缩放并组合不同的 information increments,从而构造真正想要的 target distribution。
  3. 如何逼近目标? 在目标确定后,再选择 Forward KL、Reverse KL、JSD 或其他相似度度量。

这个分解也带来两个直接的分析工具:teacher 之间的夹角可以揭示监督冲突,student 到 target 的距离与移动方向则可以帮助监测蒸馏是否真的朝预期目标推进。

最终,CLR 并没有替我们决定“最好的蒸馏目标”是什么。它做的是一件更基础、也更有用的事:把原本隐藏在 loss 和概率分布里的目标显式化,让我们能够先构造自己真正想要的 target,再选择方法去匹配它。

Distill what you want:先决定要蒸馏什么,再决定怎样蒸馏。

5. Citation

如果你希望在论文、博客或其他项目中引用本文,可以使用下面的格式:

Zhang, Zhenyu. “Distill What You Want: A Unified View of On-Policy Distillation.” Zhenyu Zhang’s Blog (Aug. 2026). https://zhenyusteven.github.io/blog/distill-what-you-want/.

或者使用 BibTeX:

@article{zhang2026distill,
  title   = {Distill What You Want: A Unified View of On-Policy Distillation},
  author  = {Zhang, Zhenyu},
  journal = {zhenyusteven.github.io},
  year    = {2026},
  month   = {August},
  url     = "https://zhenyusteven.github.io/blog/distill-what-you-want/"
}

6. References

[1] Agarwal, Rishabh, Nino Vieillard, Yongchao Zhou, Piotr Stanczyk, Sabela Ramos, Matthieu Geist, and Olivier Bachem. “On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes.” International Conference on Learning Representations (ICLR), 2024.

[2] Aitchison, John. “The Statistical Analysis of Compositional Data.” Journal of the Royal Statistical Society: Series B (Methodological), 44(2):139–160, 1982.

[3] Aitchison, John. The Statistical Analysis of Compositional Data. Chapman & Hall, 1986.

[4] Hinton, Geoffrey, Oriol Vinyals, and Jeff Dean. “Distilling the Knowledge in a Neural Network.” arXiv preprint arXiv:1503.02531, 2015.

[5] Feng, Shiyuan, Huan-ang Gao, Haohan Chi, Hanlin Wu, Zhilong Zhang, Zheng Jiang, Bingxiang He, Wei-Ying Ma, Ya-Qin Zhang, and Hao Zhou. “Weak-to-Strong Generalization via Direct On-Policy Distillation.” arXiv preprint arXiv:2607.05394, 2026.

[6] Xiaomi LLM-Core Team. “MiMo-V2-Flash Technical Report.” arXiv preprint arXiv:2601.02780, 2026.

[7] DeepSeek-AI. “DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence.” arXiv preprint arXiv:2606.19348, 2026.

[8] Kullback, Solomon, and Richard A. Leibler. “On Information and Sufficiency.” The Annals of Mathematical Statistics, 22(1):79–86, 1951.

[9] Lin, Jianhua. “Divergence Measures Based on the Shannon Entropy.” IEEE Transactions on Information Theory, 37(1):145–151, 1991.