引言
- 模型蒸馏是一种将大模型的知识传递给小模型的过程,"大模型"通常是一个性能较好的复杂模型,而"小模型"则是一个更简单、计算量较小的模型。
- 通过模型蒸馏,可以让小模型学到大模型的一些关键知识,从而在保持较高性能的同时,降低计算成本和存储需求。
- 蒸馏算法的关键问题是如何从老师模型转换的知识传授给学生模型。
- 一个知识蒸馏系统由三个主要部分组成:知识,蒸馏算法,和师生架构。

标签

- 软标签和硬标签:在机器学习和深度学习中,硬标签(Hard Labels)和软标签(Soft Labels) 是两种不同的标签表示方式。
- 硬标签(Hard Labels)在模型蒸馏中,硬标签是指 真实数据的标注,通常是 独热编码(One-Hot Encoding) 的形式。硬标签表示每个样本的真实类别,用于 监督学习。
- 特点 是离散性和明确性:
- 离散性:硬标签是离散的,每个样本只有一个类别被标记为1,其余类别为0。
- 明确性:硬标签直接反映了数据的真实类别,没有概率信息。
- 特点 是离散性和明确性:
- 软标签(Soft Labels) 在模型蒸馏中,软标签是指教师模型的输出概率分布。教师模型对每个样本进行预测,输出每个类别的概率值,这些概率值构成了软标签。
- 暗知识:指的是教师模型学到的、无法通过人工标注的 "硬标签" 直接体现的隐性规律与关联信息 ,是教师模型在海量数据上训练后内化的 "经验"。
- 举例如下:判断句子 "苹果发布会即将召开" 的类别是
[科技, 美食, 体育]。- 硬标签:
[1,0,0](科技) - 暗知识:教师输出
[0.85, 0.1, 0.05]。其中0.1的美食概率,就是暗知识 (因为 "苹果" 也可以指水果,模型捕捉到了这个一词多义的隐性关联。)
- 硬标签:
- 举例如下:判断句子 "苹果发布会即将召开" 的类别是
- 暗知识的核心特点
- 隐含性:无法通过人工标注得到,是模型从数据中自主学习到的模式。
- 泛化性:包含类别间的相似性、关联性,能帮助学生模型更好地处理模糊样本。
- 温度依赖:暗知识的提取需要通过**温度系数 T **软化教师模型的输出概率。T 越大,概率分布越平滑,暗知识的体现越充分
- logits:logits(对数几率)指的是模型最后一层全连接层的原始输出------ 它是还没经过 Softmax 激活函数、没有被归一化成概率的数值,通俗理解就是比如比赛评委打分:此时刚进行打分,还没有根据分数进行分组的阶段输出
- 暗知识与知识蒸馏的关系: 知识蒸馏的核心就是把暗知识从教师模型迁移到学生模型 。
- 如果只让学生学习硬标签,学生只能学会 "分类结果",但学不会 "分类的逻辑";
- 结合软标签学习暗知识,学生不仅能判断 "是什么",还能理解 "为什么像",从而在样本分布复杂、数据量少的场景下,达到接近教师模型的泛化性能。
- 硬标签(Hard Labels)在模型蒸馏中,硬标签是指 真实数据的标注,通常是 独热编码(One-Hot Encoding) 的形式。硬标签表示每个样本的真实类别,用于 监督学习。
蒸馏过程
- 变量以及公式详解:
- Zi(T) :表示教师模型对第 i 类的 logits; Zi(S)同理表示学生模型的 logits
- yi 表示真实标签,也就是硬标签
- Softmax(Zi) = Pi = e^(zi ) / ∑j e ^ (zj)
- 软化概率公式(带有温度 T 的 softmax 公式,生成软标签的工具):Pi_T = e^(zi / T ) / ∑j e ^ (zj / T)
- 交叉熵损失函数(多分类为例):L_CE= - ∑i yi * log(y^)
- 图像任务:T=2 ~ 4;NLP 任务:T=5~10
- 蒸馏损失的计算:L_total = α * L_hard + (1-α) * L_soft α ∈ [0,1]) 是损失权重,通常取 (0.3)(侧重软损失传递暗知识)。
- 软损失 L_soft 是传递教师的"暗知识",分别结算教师模型和学生模型的软化概率:
- 1.4 中的软化概率公式分别计算得到 Pi_T 和 Qi_S
- 注:其实就是模型最后一层全连接成的原始输出 logits,不使用 softmax 而是带有 T 的 softmax 得到每个类别的概率值
- 计算交叉熵损失:L_soft = - ∑i Pi_T * log(Qi_S)
- 使用 1.5 中的公式,其实这就是一个计算教师模型输出概率和学生概率分布的差值后,反向传播来训练学生模型的过程
- 硬损失 L_hard 是保证任务正确性:
- 此时 T=1,也就是说硬化概率公式就是原本的 softmax 函数得到的
- Pi_S:硬标签也就是 softmax 得到的结果, L_hard = - ∑i yi * log(Pi_S),此时不需要教师模型计算,因为用的是真实标签
- softmax 函数此时也可以用 MSE 函数来代替,原因如下:
- 当前计算损失直接使用预测值和真实值的均方和,同样可以进行反向传播训练,而且不经过 softmax 还可以避免 Softmax 的数值压缩,更直接传递教师的原始判断信息。
- 此时的 MSE 不是为了分类,而是单纯为了让学生分布和教师分布接近的更快
- MSE 使用场景:(快速验证、小模型蒸馏) CE 使用场景: (核心蒸馏场景,优先选择)
- 总结: logits --> Pi --> L ,教师模型参数冻结,只更新学生模型参数
- 软损失 L_soft 是传递教师的"暗知识",分别结算教师模型和学生模型的软化概率:
1 知识

| 知识类型 | 迁移对象 | 适用场景 | 典型损失函数 |
|---|---|---|---|
| 基于响应的知识 | 教师模型全连接层输出 logits | 入门级蒸馏、小模型轻量化 | 交叉熵(软标签)、MSE(Logits 匹配) |
| 基于特征的知识 | 教师模型中间层的特征向量 | 复杂任务(检测 / 分割)、大模型蒸馏 | MSE、余弦相似度、Gram 矩阵损失 |
| 基于关系的知识 | 教师模型样本间的关联关系 | 细粒度分类、小样本学习 | 关系一致性损失、对比损失 |
-
基于响应的知识:最基础、最经典的蒸馏范式

- 核心定义:知识是教师模型在输出层的响应 ,即最后一层的 Logits 或经过 Softmax(带温度 T)的 概率分布。
- 通俗理解:相当于教师直接把 "最终答案 + 最终结果的思考" 告诉学生:
- 迁移方式:学生模型的输出层响应 对齐 教师模型的输出层响应
- 优势:实现简单,无需修改模型结构,适合入门和快速验证
- 基于软目标的响应型知识蒸馏通常用于监督学习的场景中。
-
基于特征的知识:函数通过最小化教师模型和学生模型之间的特征激活差异来进行优化

- 核心定义:知识是教师模型中间层的特征表示,这些特征是模型对输入数据的 "抽象理解"
- 通俗理解:教师不仅告诉学生 "答案",还把 "解题的草稿纸" 给学生看,让学生可以学习分析问题的关键步骤
- 迁移方式:选择教师与学生的对应中间层(需保证维度匹配,不匹配时用投影层转换),让学生的中间特征 对齐 教师的中间特征;
- 实现步骤拆解:
- 选定中间层:(目的:保证两者特征的语义层级一致)
- 选择方法:分层级(根据模型结构顺序分层级)和找对应(同结构对应比例,不同结构优先选输出维度相近 + 语义层级相近的层)
- 不用纠结 "选最准的层",优先选中层(底层太简单、高层太接近输出层,中层的知识迁移性价比最高);
- 若不确定,直接选模型的倒数第 3~ 第 5 层(大部分模型的核心语义都在这个区间)。
- 提取中间特征:通俗理解就是使用一个钩子函数或者修改模型,让模型在前向传播的时候在你选定的中间层进行"拦截",把中间层输出保存下来,不影响正常训练,只是从中间复制了一份数据。
- 特征维度匹配:加投影层
- 投影层的作用只有一个:解决师生特征 "维度不匹配" 的问题,本质是一个 "转换器"。
- 其实在 NLP 中就是加一个线性变换来改变维度,不破坏特征的语义信息。
- 此时结果就是教师模型中间层输出和学生模型中间层输出的维度是一致的
- 计算损失并优化:使用表格中的损失函数,并使用方向传播进行训练即可
- Gram 矩阵损失(Gram Matrix Loss):
- Gram 矩阵不关心特征的 "具体数值",只关心 "特征内部不同部分的关联程度"。
- 提取教师和学生的中层隐藏特征 :形状为
[批次大小, 序列长度, 隐藏层维度]; - 计算 Gram 矩阵:衡量 "词 A 的隐藏向量" 和 "词 B 的隐藏向量" 的相关性;
- 选定中间层:(目的:保证两者特征的语义层级一致)
-
基于关系的知识:突破了 "单样本知识" 的局限,关注教师模型对多个样本之间关系 的理解

-
核心定义:知识不是单个样本的输出或特征,而是样本之间的相对关系,比如 "样本 A 和样本 B 的相似性高于样本 A 和样本 C""样本 X 是样本 Y 的特例"。
-
通俗理解:教师教学生 "举一反三" 的能力,不是教学生 "这是猫""那是狗",而是教 "猫和老虎长得像,猫和狗长得不像""波斯猫是猫的一种"。
-
迁移方式:构建样本组(对),让学生模型学到的样本间关系 与 教师模型一致;
-
优势:能传递 "泛化性知识",解决小样本、细粒度分类等数据不足的问题。
-
实现步骤拆解:
-
构建样本组:
- 从批次中选子集构建 "样本对 / 样本组",比如批次 B=8(批次是样本集),选其中 4 个样本组成组(抽样),计算两两之间的关系;
- 目的:让模型学习 "样本 A 和 B 像,A 和 C 不像" 这类相对关系。
-
提取样本特征:方法同上,只是后续处理不太一致,一个是单个样本,一个是样本组,此时会得到教师模型的特征矩阵和学生模型的特征矩阵,计算矩阵距离,并训练让其距离拉近
-
计算关系矩阵:对教师 / 学生的样本特征,计算 "两两相似度矩阵"(比如余弦相似度),得到教师关系矩阵 (R_t)、学生关系矩阵 (R_s);
- 优先用余弦相似度(通用、鲁棒,大部分场景效果最好);
- 如果特征已经做了归一化(比如用
F.normalize),用点积相似度(计算更快,结果和余弦相似度一致)。
相似度方法 计算逻辑(通俗版) 适用场景 优点 余弦相似度 衡量两个特征方向是否一致,不关心长度(比如特征 A=[1,2], 特征 B=[2,4],方向相同,余弦相似度 = 1) 特征长度差异大的场景(如 NLP 的不同长度句子特征) 对特征缩放不敏感,通用型强 欧式距离(倒数) 衡量两个特征在空间中的直线距离,距离越小越相似(比如 A 和 B 坐标离得越近,越相似) 特征维度低、数值分布均匀的场景 计算简单,易于理解 点积相似度 衡量两个特征数值的乘积和,数值越大、对应维度越一致,相似度越高 特征已经归一化(长度为 1)的场景 计算速度最快,适合大规模样本 -
计算损失并优化:用关系一致性损失 / 对比损失,让 (R_s) 逼近 (R_t),仅更新学生参数。
- 关系一致性损失(Relation Consistency Loss):直接衡量教师和学生的样本关系矩阵 的差异,让学生学到的 "样本间相似性" 和教师完全一致。
- 余弦相似度:只做 "关系描述"(比如 "学生 A 和 B 像,相似度 0.9"),是一个 "静态数值",把 "特征矩阵" 转化为 "关系矩阵",只做 "数值转换",无优化能力
- 关系一致性损失:做 "关系优化"(衡量学生的描述和教师的描述差多少,再通过反向传播让学生修正),是一个 "动态优化过程",通俗讲就是这一步开始对 1 中得到的关系矩阵进行处理,其实就是进行归一化后的 MSE
- 优化目标:让学生的关系矩阵数值 逐元素逼近教师,依赖教师的 "标准答案"(关系矩阵)
- 使用场景:有高性能教师模型的场景,追求 "学生完全复刻教师的关系判断"
- 对比损失(Contrastive Loss ; 经典 InfoNCE 损失):不直接匹配相似度数值,而是通过 "拉近同类样本、推远异类样本" 的方式(物理意义:让正样本对的相似度尽可能大,负样本对的相似度尽可能小。),让学生学到教师的 "样本关系逻辑",是更鲁棒的关系蒸馏方式。
- 优化目标:让学生学会 "同类样本更像,异类样本更不像" 的相对关系,不追求数值完全一致;不依赖教师,只依赖样本的类别标签(正样本 / 负样本)
- 使用场景:教师模型效果一般,或样本标签充足的场景,追求 "学生自主学习合理的样本关系"
- 两种损失可以搭配使用
- 关系一致性损失保证学生 "复刻教师的经验";
- 对比损失保证学生 "学习通用的关系逻辑",避免过拟合到教师的误差
- 教师模型能力极强或者资源有限情况下不建议搭配使用
- 关系一致性损失(Relation Consistency Loss):直接衡量教师和学生的样本关系矩阵 的差异,让学生学到的 "样本间相似性" 和教师完全一致。
-
-
2 训练
- 离线蒸馏:离线蒸馏是最常见的方法,其中使用一个预训练的教师模型来指导学生模型。在这种方式中,教师模型首先在训练数据集上进行预训练,然后将教师模型中的知识蒸馏到学生模型中进行训练。
- 优缺点:
- 优点:教师性能稳定,学生的上限由教师决定;实现简单,工业界落地成熟。
- 缺点:需要分两步训练,耗时较长;教师一旦固定,无法在学生训练过程中优化。
- 典型应用:
- 大模型轻量化:如用 GPT-3 蒸馏小尺寸 GPT、用 ResNet-152 蒸馏 ResNet-18;
- 特定任务优化:如用中文预训练大模型蒸馏小模型,适配移动端文本分类。
- 优缺点:
- 在线蒸馏:在离线蒸馏中,预训练的教师模型通常是一个高容量的深度神经网络。然而,在某些情况下,可能无法获得适用于离线蒸馏的预训练模型。为了解决这一局限性,可以使用在线蒸馏,在这种方法中,教师模型和学生模型在一个端到端的训练过程中同时更新。在线蒸馏可以通过并行计算实现,因此是一种高效的方法。
- 实现步骤:
- 初始化多个模型:通常初始化一组结构相同或相似的模型(如 3 个 ResNet-18),互为 "教师" 和 "学生";
- 协同训练:每个模型在训练时,既作为 "学生" 学习其他模型的输出,也作为 "教师" 输出软标签指导其他模型;
- 动态更新:所有模型的参数都在训练中更新,没有固定的教师。
- 优缺点:
- 优点:无需预训练教师,训练流程一步到位;教师动态更新,避免过拟合;多个模型协同,性能通常优于单模型。
- 缺点:训练时需要同时运行多个模型,显存占用高;超参数调优复杂。
- 典型应用:
- 多模型集成系统:如推荐系统的多塔模型;
- 资源受限场景:如边缘设备的模型训练,无法承担预训练大模型的成本。
- 实现步骤:
- 自蒸馏:在自蒸馏中,教师模型和学生模型使用相同的模型。例如,可以利用深层神经网络的深层激活值来训练浅层网络。这可以视为在线蒸馏的一种特殊情况,并可以通过多种方式实现。例如,教师模型在早期训练轮次的知识可以转移到其后期训练轮次中,用于训练学生模型。
- 最轻量化的蒸馏范式
- 两种实现方式:
- 基于时间的自蒸馏:用模型不同训练阶段的输出作为软标签
- 基于结构的自蒸馏 用模型不同部分的输出作为软标签
- 优缺点:
- 优点:无额外教师开销,显存占用最低;训练流程简单,适合小模型和隐私保护场景(无需共享教师模型);
- 缺点:性能上限受限于模型自身,无法超越单模型的最优性能;对训练超参数敏感。
- 典型应用:
- 小模型性能提升:如移动端的轻量级 CNN 模型,通过自蒸馏提升分类精度;
- 隐私计算场景:如医疗数据训练,数据不能离开本地,无法训练独立教师模型。
- 训练效率:自蒸馏 > 在线蒸馏 > 离线蒸馏(自蒸馏无需额外训练教师);
- 性能上限:离线蒸馏 > 在线蒸馏 > 自蒸馏(离线蒸馏可使用超大模型作为教师)。
3 知识蒸馏的算法

| 蒸馏方法 | 核心定位 | 关键创新点 | 典型应用 |
|---|---|---|---|
| 对抗蒸馏 | 鲁棒性优化 | 引入 GAN 思想,让学生对抗性学习教师知识 | 噪声数据分类、防御对抗攻击(自动驾驶) |
| 多教师蒸馏 | 知识融合 | 多个教师模型协同指导,集成互补知识 | 医疗影像诊断(高精度要求,小样本场景) |
| 跨模态蒸馏 | 跨领域迁移 | 不同模态模型间传递知识(如视觉→文本) | 图文检测,字幕生成,某一模态数据不足 |
| 图蒸馏 | 图结构适配 | 针对图神经网络(GNN)的拓扑 + 节点知识迁移 | 社交网络分析、分子属性预测 |
| 注意力蒸馏 | 结构对齐 | 迁移教师模型的注意力权重,复刻决策逻辑 | 大语言模型轻量化、机器翻译。细颗粒任务 |
| 无数据蒸馏 | 隐私保护 | 无需原始数据,通过生成数据传递知识 | 隐私敏感场景(医疗 / 金融) |
| 量化蒸馏 | 硬件适配 | 结合模型量化,在压缩精度的同时保留性能 | 边缘设备部署(手机 / IoT)低资源情况 |
| 终身蒸馏 | 持续学习 | 模型在新任务上学习时,保留旧任务知识 | 机器人自主学习、推荐系统迭代 |
| NAS 蒸馏 | 架构搜索 | 蒸馏指导神经架构搜索,高效生成最优小模型 | 自动化模型设计、低算力场景 |
-
对抗蒸馏:将对抗生成网络(GAN) 的思想融入蒸馏,通过 "生成器 - 判别器" 的博弈,让学生模型不仅学习教师的软标签,还能抵抗噪声和对抗样本 ,提升鲁棒性。

- 实现流程:
- 使用干净数据和对抗数据训练判别器
- 使用教师模型生成干净数据
- 让学生模型去使用干净数据进行推理,得到结果后让判别器判断属于哪种数据(干净或者对抗)
- 学习干净数据的时候,可以使用教师模型的结果来优化,提高学生模型的精度
- 学习对抗数据的时候,精度提升了那对抗数据的结果也会提升,鲁棒性增强,判别器无法识别学生模型的输出到底是干净数据还是对抗数据
- 注:判别器只对输出数据进行判别,其实判别的是每个词向量位置,比如一个正常文本的词向量数值大小是不一样的,对抗数据就是不符合正常文本的向量值大小的,学生模型如何可以把这个位置对应的概率大小调整好,判别器就会认为这个文本是正常的。
- 实现流程:
-
多教师蒸馏:用多个不同的教师模型 协同指导一个学生模型,融合多个教师的互补知识,避免单教师的局限性。

- 教师选择策略:
- 同架构多教师:多个相同结构的模型,训练在不同数据子集上(如数据增强的不同版本);
- 异架构多教师:不同结构的模型,覆盖不同的特征提取角度。
- 知识加权策略:
- 加权平均:根据教师的性能权重,融合多个教师的软标签。
- 投票机制:对每个样本,取多个教师软标签的众数作为学生的学习目标;
- 分层融合:不同教师负责指导学生的不同中间层(如教师 A 指导低层特征,教师 B 指导高层特征)。
- 离线蒸馏的模式,随机森林的思想。
- 教师选择策略:
-
跨模态蒸馏:让不同模态的模型之间传递知识(如视觉模型→文本模型、语音模型→图像模型),实现跨领域的知识迁移。

- 共享特征空间:通过一个映射层,将源模态(如图像)的特征和目标模态(如文本)的特征投影到同一空间;
- 对齐损失:让学生模型(目标模态)的特征与教师模型(源模态)的特征在共享空间中对齐。
- 离线蒸馏的模式,统一不同模态的信息,完成在统一态上的迁移
-
图蒸馏:专门针对图神经网络(GNN) 设计的蒸馏方法,不仅迁移节点的特征知识,还迁移图的拓扑结构知识(如节点间的连接关系、子图的结构模式)。
- 本人内容不涉及,不做详解
-
注意力蒸馏:聚焦于迁移教师模型的注意力权重,让学生模型复刻教师的 "决策逻辑"------ 比如教师关注图像的哪个区域、文本的哪个词,而非仅学习输出层的软标签。
- 获取注意力权重:类比上面"基于关系的知识",区别在于这个蒸馏方法是针对样本,上面是针对样本组
- 蒸馏的损失设计:
- 直接匹配:学生的注意力矩阵与教师的注意力矩阵的 MSE 损失;
- 特征加权:用教师的注意力权重加权学生的中间特征,再计算与教师特征的
- 通俗讲就是把教师模型的注意力权重附加到学生模型的特征向量,要一一对应,这样学生就知道了向量的重要程度
-
无数据蒸馏:在没有原始训练数据 的前提下,实现教师模型到学生模型的知识迁移,核心解决数据隐私和数据缺失 的问题。

- 生成伪数据
- 用教师模型指导一个生成器(如 GAN),生成能够激活教师模型关键特征的伪数据(如让教师输出高置信度的图像);
- 伪数据的质量直接决定蒸馏效果。
- 蒸馏流程:
- 生成器生成伪数据→输入教师模型,得到软标签;
- 学生模型学习伪数据和对应的软标签,无需接触原始数据。
- 离线蒸馏模式
- 生成伪数据
-
量化蒸馏:将模型量化 与知识蒸馏结合,在把模型权重从高精度(如 FP32)压缩到低精度(如 INT8、INT4)的同时,通过蒸馏弥补量化带来的性能损失。

- 量化的核心问题:低精度量化会导致权重信息丢失,模型精度下降;
- 通过蒸馏进行补偿的策略:
- 教师:高精度的原始模型(FP32);
- 学生:量化后的低精度模型(INT8);
- 蒸馏目标:让量化学生的输出与高精度教师的输出对齐,同时优化量化误差。
- QAT:在训练过程中就模拟量化的误差 ,让模型提前适应低精度,最终量化后的精度损失大幅降低。
- 通俗讲并不是学生就一直用低精度来训练,而是在量化 / 反量化节点降低精确度进行训练,这样就可以让模型感受到丢失精确度带来的影响,从而降低这部分影响
-
终身蒸馏:也叫持续学习蒸馏 ,解决模型在连续学习新任务时的 "灾难性遗忘" 问题 ------ 让模型在学习新任务知识的同时,通过蒸馏保留旧任务的知识。
- 特有机制:
- 知识回放(Replay):训练新任务时,每隔 epoch 回放缓存的旧任务样本,让学生同时学新旧任务;
- 弹性权重固化(EWC):对旧任务重要的参数 "加权重惩罚",避免新任务训练时修改这些参数(比如识别猫的参数,学狗时不被篡改)。
- 知识缓存机制
- 学习新任务时,缓存旧任务的关键样本和教师模型(旧任务的最优模型);
- 新任务的学生模型同时学习:① 新任务的硬标签;② 旧任务教师模型的软标签。
- 增量蒸馏策略
- 每次学习新任务后,更新教师模型为 "新旧任务融合的模型";
- 后续任务的学生模型,始终学习最新的教师模型知识。
- 特有机制:
-
NAS蒸馏:将知识蒸馏与神经架构搜索(NAS) 结合,用教师模型的知识来指导 NAS 算法,高效搜索出性能接近教师、且计算量极小的学生模型架构
- 一种可以自动选择最优学生模型的算法。
-
方法选择:
- 看数据条件:数据隐私→无数据蒸馏;数据多模态→跨模态蒸馏;
- 看模型架构:图结构→图蒸馏;Transformer→注意力蒸馏;
- 看部署需求:边缘设备→量化蒸馏;自动化设计→NAS 蒸馏;
- 看任务特性:持续学习→终身蒸馏;鲁棒性要求→对抗蒸馏;高精度要求→多教师蒸馏。
- 常用程度:注意力蒸馏 / 量化蒸馏 / 多教师蒸馏 > 跨模态蒸馏 > 对抗 / 无数据 / 图 / 终身 / NAS 蒸馏;