3.1 知识蒸馏(Knowledge Distillation, KD)简介
1 知识蒸馏(Knowledge Distillation, KD)简介
知识蒸馏(KD)是一类“教师—学生”(Teacher–Student)范式的模型训练技术:用一个性能更强、结构更大、表达能力更充足的教师模型,将其“知识”迁移到一个更小、更快、更省资源的学生模型中,使学生在较低推理成本下获得接近教师的效果。
在工程与研究中,KD 常用于:
- 模型压缩:把大模型的能力迁移到小模型,以满足端侧、低延迟或低成本部署需求。
- 性能增强:在相同参数量下,通过学习教师的“软目标/中间表征/样本关系”,提升学生的泛化性能。
- 迁移与对齐:让学生继承教师在特定任务、特定风格或特定能力(如推理、指令跟随)上的行为模式。
1)KD 的两种基本形态:白盒与黑盒
1.1 白盒知识蒸馏(White-box KD)
白盒 KD 通常假设你能直接访问教师模型的内部信息,至少包括:
- 教师的输出分布(logits 或 soft labels)
- 教师的中间层特征表示
- 教师对样本之间关系的隐式结构(如相似性、距离、相关矩阵)
常见场景:教师来自开源模型或可控训练体系,你能够在推理时拿到 logits / hidden states / attention 等。
1.2 黑盒知识蒸馏(Black-box KD)
黑盒 KD 通常只能访问教师模型的最终输出(文本、类别、打分),拿不到 logits 或中间层表示。典型场景是闭源大语言模型(LLM)作为教师,你能做的通常是:
- 设计 prompt,调用教师生成输出
- 收集教师输出构成“蒸馏数据集”
- 用该数据集去微调学生模型
对于大语言模型,黑盒蒸馏往往不仅仅是“学知识点”,还包括蒸馏教师展现出的涌现能力(Emergent Abilities),例如上下文学习(ICL)、链式思维(CoT)、指令跟随(Instruction Following)。
2)知识蒸馏由三部分组成
一个 KD 系统可以拆为三个核心要素:
- 知识(Knowledge):要从教师迁移什么信息?
- 蒸馏算法(Distillation Algorithm):用什么损失与训练策略把知识“写进”学生?
- 师生架构(Teacher–Student Architecture):教师与学生的模型结构、交互方式、是否同步更新等。
下面依次展开。
3)知识(Knowledge):三类经典“蒸馏知识”
白盒 KD 中,最常见的“知识类型”有三类:Response-based / Feature-based / Relation-based。
3.1 Response-based(基于输出响应的知识)
核心思想:让学生学习教师对输出类别/token 的概率分布(软目标),而不是只学习硬标签。
为什么“软目标”更有信息量?
硬标签只告诉你“正确答案是哪一个”。但教师的输出分布会告诉你:
- 哪些答案也“接近正确”
- 哪些错误更像“合理的混淆项”
- 类别之间的相对相似性(暗含“类结构”)
这类信息常被称为 dark knowledge。
典型形式:KL 散度蒸馏(分类场景)
设教师输出分布为 pT(y∣x)p_T(y|x)pT(y∣x),学生输出分布为 pS(y∣x)p_S(y|x)pS(y∣x),常用蒸馏损失之一是:
LKD=DKL(pT(⋅∣x) ∥ pS(⋅∣x))=∑ypT(y∣x)logpT(y∣x)pS(y∣x) \mathcal{L}_{KD} = D_{KL}\big(p_T(\cdot|x)\ \|\ p_S(\cdot|x)\big) = \sum_{y} p_T(y|x)\log \frac{p_T(y|x)}{p_S(y|x)} LKD=DKL(pT(⋅∣x) ∥ pS(⋅∣x))=y∑pT(y∣x)logpS(y∣x)pT(y∣x)
为了让分布更“软”,通常引入温度系数 TTT(temperature):
- 教师 logits 为 zTz_TzT
- 学生 logits 为 zSz_SzS
- softmax 温度化分布为:
pT(y∣x)=exp(zT(y)/T)∑y′exp(zT(y′)/T),pS(y∣x)=exp(zS(y)/T)∑y′exp(zS(y′)/T) p_T(y|x)=\frac{\exp(z_T(y)/T)}{\sum_{y'}\exp(z_T(y')/T)},\quad p_S(y|x)=\frac{\exp(z_S(y)/T)}{\sum_{y'}\exp(z_S(y')/T)} pT(y∣x)=∑y′exp(zT(y′)/T)exp(zT(y)/T),pS(y∣x)=∑y′exp(zS(y′)/T)exp(zS(y)/T)
温度 TTT 越大,分布越平滑,能暴露更多“次优类别”的概率,从而提供更丰富的学习信号。
实际案例(直观解释)
以图像分类为例:输入是一张哈士奇照片。
- 硬标签只说:类别=“husky”
- 教师分布可能是:husky 0.72、malamute 0.18、wolf 0.08、others 0.02
学生学习这个分布,会自然学到“husky 与 malamute 更接近,而不是与 car 接近”。
对于语言模型,Response-based 也对应“让学生学习教师对下一个 token 的概率分布”,使学生更像教师的生成行为,而不是只学一条参考答案。
3.2 Feature-based(基于中间特征的知识)
核心思想:不仅学教师的最终输出,还让学生模仿教师在网络中间层学到的表示(hidden states / feature maps)。
深度网络往往在不同层学习不同层次特征:
- 低层:局部模式、形状、词法线索
- 中层:组合结构、语义片段
- 高层:任务相关的抽象语义
因此,模仿中间层可以为学生提供“更密集、更结构化”的训练约束。
典型形式:特征匹配损失
设教师某层特征为 hT(l)(x)h_T^{(l)}(x)hT(l)(x),学生某层特征为 hS(m)(x)h_S^{(m)}(x)hS(m)(x)。常见做法是最小化二者距离:
Lfeat=∥ϕ(hS(m)(x))−hT(l)(x)∥22 \mathcal{L}_{feat}=\left\| \phi\big(h_S^{(m)}(x)\big)-h_T^{(l)}(x)\right\|_2^2 Lfeat=
ϕ(hS(m)(x))−hT(l)(x)
22
其中 ϕ(⋅)\phi(\cdot)ϕ(⋅) 常用于对齐维度(因为师生结构可能不同,特征维度不一定一致)。
难点:提示层与引导层(Hint/Guide)怎么选?
Feature-based 的关键难点在于:
- 教师哪一层的表征最适合作为“提示层”(hint layer)?
- 学生哪一层用来对齐(guide layer)?
- 若二者维度不同,如何映射对齐?
这些选择会显著影响蒸馏效果。一般经验包括:
- 若师生结构相似:对应层对齐通常有效
- 若结构差异较大:需要选择“语义层级相近”的层,或在多个层上联合约束
实际案例(直观解释)
在目标检测中,教师是大 backbone + FPN,学生是轻量 backbone。
- Response-based 只约束最终框与类别输出
- Feature-based 还能让学生学教师 FPN 中多尺度特征的“组织方式”,使学生更快学到稳定的多尺度表示,从而显著提升小模型性能。
3.3 Relation-based(基于关系的知识)
核心思想:蒸馏的不只是“单个样本的输出/特征”,还包括:
- 特征内部(如通道或空间位置之间)的关系结构
- 样本之间在表示空间中的相对关系
也就是把“结构信息”作为知识迁移。
形式 A:层内关系(Gram 矩阵等)
设某层特征(展平后)为矩阵 F∈Rd×nF \in \mathbb{R}^{d \times n}F∈Rd×n(nnn 可以理解为位置数或 token 数),可构造 Gram 矩阵表示相关性:
G=F⊤F∈Rn×n G = F^\top F \in \mathbb{R}^{n \times n} G=F⊤F∈Rn×n
Relation-based 蒸馏可以让学生匹配教师的关系矩阵:
Lrel=∥GS−GT∥F2 \mathcal{L}_{rel}=\left\|G_S-G_T\right\|_F^2 Lrel=∥GS−GT∥F2
这里 ∥⋅∥F\|\cdot\|_F∥⋅∥F 是 Frobenius 范数。
形式 B:样本间关系(pairwise similarity / distance)
给定一个 batch 的样本表示 {h(xi)}i=1N\{h(x_i)\}_{i=1}^N{h(xi)}i=1N,可以计算教师的相似度矩阵:
RT(i,j)=sim(hT(xi),hT(xj)) R_T(i,j)=\text{sim}\big(h_T(x_i),h_T(x_j)\big) RT(i,j)=sim(hT(xi),hT(xj))
学生同样得到 RS(i,j)R_S(i,j)RS(i,j),并让二者对齐:
Lpair=∑i,j(RS(i,j)−RT(i,j))2 \mathcal{L}_{pair}=\sum_{i,j}\left(R_S(i,j)-R_T(i,j)\right)^2 Lpair=i,j∑(RS(i,j)−RT(i,j))2
实际案例(直观解释)
在度量学习/检索任务中,教师已学到“哪些样本互为近邻、哪些属于同一簇”。
- Response-based:只能教你某个样本应该属于哪个类
- Relation-based:直接把“整体几何结构”迁移给学生
这对小模型的检索质量尤其关键,因为检索的本质就是保持表示空间结构。
4)蒸馏算法(Distillation Algorithm):三种训练范式
从训练组织方式看,KD 常分为:Offline / Online / Self-distillation。
4.1 Offline Distillation(离线蒸馏)
这是最主流、最常见的范式,通常分两步:
1)先训练(或获得)一个强教师模型
2)固定教师参数,用教师提供的知识训练学生
离线蒸馏的优势:
- 教师稳定,训练过程更容易调参、更可控
- 适用于“教师很强但训练很贵”的情况:一次训练教师,多次蒸馏不同学生
实际案例:TinyBERT(概念层面)
以 BERT 系列为例,常见做法是先有一个较大的 BERT 教师,然后通过 KD 得到 tinyBERT 或其他小模型,使小模型在速度与精度之间更平衡。
4.2 Online Distillation(在线蒸馏)
在线蒸馏中,教师和学生在训练过程中同时更新。常见动机是:
- 强教师不可得(没有一个固定、可用的预训练教师)
- 希望教师与学生共同进化,互相促进
在线蒸馏的难点:
- 教师本身也在变化,学生的学习目标会漂移
- 需要额外机制避免“两个弱模型互相误导”,否则易不稳定
4.3 Self-distillation(自蒸馏)
自蒸馏可看作在线蒸馏的特例:教师与学生是同一类网络(架构相同,甚至参数共享或相近)。
常见形式包括:
- 用同一模型在不同训练阶段/不同增强视角下产生“教师信号”
- 用模型的“历史版本”作为教师(类似 EMA teacher)
- 在多分支结构中,一支作为教师指导另一支
自蒸馏的一个核心价值在于:即便没有外部更强教师,也能通过训练策略与目标设计,让模型“自己教自己”,获得正则化和更好的泛化。
5)黑盒知识蒸馏:面向 LLM 的“能力蒸馏”
在大语言模型场景里,黑盒 KD 常常不是直接蒸馏 logits,而是让教师生成一个高质量数据集,用于训练学生。这类蒸馏常被描述为 Emergent Abilities-based KD:因为你蒸馏的是教师在大规模训练与对齐后呈现出的“能力形态”,尤其包括:
- In-Context Learning(ICL,上下文学习)
- Chain-of-Thought(CoT,链式推理)
- Instruction Following(IF,指令跟随)
下面分别展开。
6)ICL 蒸馏:把“少样本上下文学习”迁移给学生
6.1 ICL 是什么?
ICL 指模型在推理时通过 prompt 中的任务描述 + 少量示例,在不更新参数的情况下完成新任务。prompt 通常呈现为结构化自然语言格式,例如:
- 任务说明:你要做什么
- 示例:给出若干输入—输出对
- 测试:给出新输入,模型输出对应答案
6.2 ICL 蒸馏的目标
ICL 蒸馏希望让学生在参数较小的情况下也具备:
- 读懂任务说明的能力
- 从示例中归纳规则的能力
- 在新输入上泛化输出的能力
一个常见思路是把 ICL prompt 当作输入,把教师输出当作监督信号。训练目标可以是标准语言建模负对数似然(NLL):
LICL=−∑tlogpS(yt∣x,y<t) \mathcal{L}_{ICL}=-\sum_{t}\log p_S(y_t \mid x, y_{<t}) LICL=−t∑logpS(yt∣x,y<t)
其中训练数据中的 yyy 来自教师在 ICL prompt 下的生成。
6.3 实际案例(直观解释)
例如情感分类任务:
- prompt 中给 2–4 个示例,教师能在新句子上正确判断“正/负”
- 把这类带示例的输入和教师答案组成数据集训练学生
训练后,学生更可能在类似 few-shot prompt 下复现教师行为,而不是把任务当成普通对话胡乱生成。
7)CoT 蒸馏:把“可解释的推理过程”迁移给学生
7.1 CoT 是什么?
CoT(Chain-of-Thought)是在提示或输出中显式包含多步推理过程,使模型不仅输出答案,还输出中间推导步骤。与只提供输入—输出对相比,CoT 提供了更密集的监督信号,尤其适用于数学、逻辑、规划类任务。
7.2 CoT 蒸馏的基本训练形式
数据形态通常是:
- 输入:问题 xxx
- 教师输出:推理过程 rrr 与最终答案 aaa
学生学习生成整个序列 [r;a][r; a][r;a]:
LCoT=−∑tlogpS([r;a]t∣x,[r;a]<t) \mathcal{L}_{CoT}=-\sum_{t}\log p_S\big([r;a]_t \mid x, [r;a]_{<t}\big) LCoT=−t∑logpS([r;a]t∣x,[r;a]<t)
7.3 为什么 CoT 蒸馏常有效?
- 推理过程把“隐含的决策路径”显式化,学生更容易学到可迁移的解题策略
- 对复杂任务,单一答案信号过稀疏;CoT 提供了更长序列、更丰富约束
- 当教师能生成多样推理路径时,可缓解学生过拟合单一路径
7.4 典型 CoT 蒸馏工作思路(概念归纳)
####(1)多任务 CoT 蒸馏:MT-COT
核心思路:教师为多任务生成解释/推理过程,学生用多任务学习框架同时学习“解题 + 解释生成”。
效果直觉:学生不仅学会“做对”,还学会“怎么解释为什么对”,从而在推理任务上更稳健。
####(2)多解采样:Fine-tune-CoT
核心思路:对同一问题从教师随机采样多条推理解,扩充训练数据多样性。
效果直觉:学生在训练中看到不同合理路径,减少对单一模式的依赖,更可能在新题上找到可行推理链。
####(3)分解式蒸馏:SOCRATIC
核心思路:训练两个蒸馏模型:
- 问题分解器:把原问题拆成子问题序列
- 子问题求解器:逐个解决子问题并组合得到最终解
效果直觉:把“长推理链”结构化为可组合模块,降低单模型端到端学习的难度。
####(4)反事实蒸馏:DISCO
核心思路:通过工程化提示生成对原问题的短语扰动(反事实变体),再用任务特定教师过滤,保留高质量反事实数据用于训练学生。
效果直觉:反事实数据迫使学生学到更鲁棒的因果/逻辑依赖,而不是记模板。
####(5)对比解码与原理对齐:SCOTT
核心思路:把“原理/关键依据”和“答案”更紧密地绑定,用对比方式鼓励从教师输出中提取与答案高度相关的推理依据。
效果直觉:减少“看似很长但无关”的推理文本,让推理更聚焦、更可用。
8)IF 蒸馏:把“指令跟随能力”迁移给学生
8.1 Instruction Following 是什么?
指令跟随(IF)强调:模型仅根据自然语言任务描述,就能执行以前未见过的任务,不依赖少量示例。指令可以是:
- 约束性很强(格式、长度、风格)
- 多步骤要求(先总结再提取要点)
- 带条件(如果…则…)
8.2 IF 蒸馏的典型流程
1)构造或收集多样化指令集合 {xi}\{x_i\}{xi}
2)调用教师生成响应 {yi}\{y_i\}{yi}
3)用 (xi,yi)(x_i, y_i)(xi,yi) 对学生做监督微调
训练目标仍可写为标准 NLL:
LIF=−∑i∑tlogpS(yi,t∣xi,yi,<t) \mathcal{L}_{IF}=-\sum_{i}\sum_{t}\log p_S(y_{i,t}\mid x_i, y_{i,<t}) LIF=−i∑t∑logpS(yi,t∣xi,yi,<t)
8.3 “困难指令”增强
一个常见策略是让教师模型主动识别/生成更困难、更长尾的指令:
- 更复杂的格式约束
- 更罕见的领域知识
- 更长的多步骤任务链
然后用这些困难指令扩充训练集,促使学生在更具挑战的分布上提升。
8.4 实际案例(直观解释)
假设你希望学生学会“结构化信息抽取”:
- 指令:给定一段文本,抽取人物、地点、时间,并输出 JSON 格式
- 教师能稳定输出满足格式的结构化答案
- 学生通过 IF 蒸馏,会更倾向遵守格式约束与字段完整性
这在实际应用中非常重要:很多任务的核心不是“答对”,而是“按要求答”。
9)总结:不同 KD 方案解决什么问题?
从“知识类型”角度:
- Response-based:蒸馏输出分布,迁移类别/token 的细粒度概率结构
- Feature-based:蒸馏中间表示,迁移层级特征与抽象语义
- Relation-based:蒸馏关系结构,迁移表示空间几何与样本组织方式
从“训练范式”角度:
- Offline:教师固定,最稳定、最常用
- Online:师生共同更新,适用于强教师不可得但训练更难稳定
- Self-distillation:同构或同源模型自指导,常用于正则化与泛化提升
从“LLM 黑盒能力蒸馏”角度:
- ICL 蒸馏:迁移从少量示例中归纳规则的能力
- CoT 蒸馏:迁移多步推理过程与解题策略
- IF 蒸馏:迁移对自然语言任务描述的执行能力与格式遵循能力
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)