自蒸馏

关注
义项:模型训练方法

自蒸馏(Self-distillation)是知识蒸馏的一类特殊形式,指教师与学生由同一个网络担任、模型从自身输出中获得监督信号来完成训练的方法[1][2]。与传统知识蒸馏需要预先训练并固定一个大容量教师模型不同,自蒸馏省去了这一环节,可以降低训练所需的时间与算力,同时避免师生之间能力不匹配的问题[3]。它常用于在参数量不增加的前提下提升模型精度,也被用作自监督学习中的预训练手段[4]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

自蒸馏是一类以模型自身充当教师的训练方法:教师网络与学生网络使用同一个模型,学生从自己产生的输出分布中获取监督信号,因此不需要预先训练并固定一个容量更大的教师网络[1][2]。在蒸馏方法的分类体系里,它通常被看作在线蒸馏的一个特例,与离线蒸馏、在线蒸馏并列,而知识蒸馏原本是用于模型压缩的师生式知识迁移技术[2][3]。

按照教师来源的不同,常见的自蒸馏可分为两类:一类在同一网络内部进行,把网络深处部分的知识传递给较浅的部分;另一类沿着时间维度进行,用模型较早阶段的参数或检查点作为教师,指导后续阶段的训练[5][4]。

原理

与经典知识蒸馏相同,自蒸馏传递的不是真实标签,而是教师给出的软标签,也就是模型在各个类别上的概率分布;训练时让学生输出的分布去逼近教师的分布,损失函数通常取交叉熵或KL散度[6]。一种常见做法是同时保留真实标签上的交叉熵项和蒸馏项,两者通过超参数加权,其形式可写为 $L = T^{2}L_{KL}(y_{t}, y_{s}) + L_{CE}(y, y_{s})$,其中 $y_{t}$ 与 $y_{s}$ 分别对应教师和学生的输出分布,$T$ 为温度系数[6]。


flowchart LR

A[同一个网络] --> B[教师输出 软标签]

A --> C[学生输出 预测分布]

B --> D[蒸馏损失]

C --> D

D --> E[更新参数]

对于自蒸馏为何有效,一种解释认为它起到正则化作用:软标签包含样本层面的不确定性信息,其中反映的类间相似度结构比独热标签更丰富,因此可以理解为逐样本的标签平滑[4][1]。也有工作从希尔伯特空间中正则化增强等角度给出理论分析,并结合实验说明其性能改进[1]。

在无标签场景中,DINO 是较有代表性的一种实现:学生与教师结构相同,教师参数由学生参数的指数滑动平均得到,学生需要匹配教师在不同图像视图上的输出,训练中通过中心化与锐化来避免表示塌陷,损失取两者的交叉熵[7][8]。

发展历程

知识蒸馏最初由 Hinton 等人提出,用于把大模型的知识迁移到小模型中,自蒸馏是这一框架下发展出的变体,早期工作集中在师生结构完全相同的情形[3][4]。单步自蒸馏带来的性能提升,最早由 Li 等人在 AlexNet 与 YFCC100M 数据集上展示[4]。

2018 年,Furlanello 等人在 ICML 上发表 Born-Again Networks,研究师生结构完全一致的蒸馏,发现这样训练出的第二代模型反而优于其教师,基于 DenseNet 的模型在 CIFAR-10 和 CIFAR-100 上的验证误差分别达到 3.5% 和 15.5%;该工作把这种同构蒸馏称为自蒸馏[9][10]。

2019 年,Zhang 等人在 ICCV 上提出把网络划分为若干段、将深层知识压缩到浅层的自蒸馏框架,在多种网络上平均提升精度 2.65%,最低 0.61%(ResNeXt)、最高 4.07%(VGG19),并可在资源受限的边缘设备上按深度伸缩推理[5]。同年出现的快照蒸馏把同一网络早期阶段视为教师,用于指导该网络后期的训练[2]。

2020 年前后,研究者把自蒸馏扩展到类别级预测正则化、数据增强等方向,并从标签平滑与正则化角度解释其作用[1]。2021 年,DINO 把自蒸馏用于无标签的表征学习,自监督学习中的这一思路随后被更多模型延续[7]。

此后自蒸馏继续扩展到新的模型与任务:2024 年有研究分析重复施加自蒸馏能够带来的增益,并把检查点式教师、无教师协作学生等变体纳入讨论[4];也有工作用自蒸馏缩小大语言模型微调时预训练数据与下游数据之间的分布差距[11]。面向扩散语言模型的自蒸馏框架随后被提出,通过不同的掩码程度构造教师与学生两种模式[12]。

应用

图像分类是自蒸馏应用最集中的场景,在 CIFAR-100、Tiny ImageNet 以及多个细粒度数据集上,多种自蒸馏方法都被验证能在不增加参数量的前提下提高分类精度[5]。

在算力与存储受限的部署环境中,自蒸馏被用来提升轻量模型的性能。有研究报告,约 60 万参数的模型结合自蒸馏后在 Fashion-MNIST 上取得 94.14% 的准确率,接近约 890 万参数基线的 96.70%,参数量相差约 15 倍[13]。

自监督预训练是另一类主要用途。DINO 等方法以自蒸馏作为训练目标,在无标签的图像数据上学习表征,再迁移到分类、检索、分割等下游任务[7][8]。

在自然语言处理与生成任务中,自蒸馏被用于语言模型微调,以缓解预训练与下游数据之间的分布差异[11],也被用于改善扩散语言模型的生成质量[12]。此外,该方法在推荐系统、图神经网络等任务上也有尝试[14]。

局限

由于没有外部教师提供监督,学生可能不加区分地同时学到正确的与错误的知识,其学习范围也受自身容量限制[15]。

现有实现方式各有代价:借助辅助网络的方法会引入额外的计算开销,依赖历史信息的方法则需要保存模型过去的状态,带来存储负担[16]。

自蒸馏通常在训练结束后不再需要额外模块,推理阶段的开销并不增加,但训练过程本身的模块与计算仍然会带来成本。另外,只在单一表示空间内进行的自蒸馏会忽略其他域提供的互补结构信息,对高频成分的学习若缺少约束,还可能导致过拟合和泛化性能下降[3]。

收益并不总是稳定。在部分网络配置上,经自蒸馏训练的学生并未超过原始模型,多代自蒸馏的增益也会趋于饱和[9]。有研究在 CIFAR-100 上以 ResNet20 为学生模型对比,得到的结果与经典师生蒸馏相差约 1.1 个百分点,说明两类方法的优劣会随任务与设置而变化[15]。

参见

  • 知识蒸馏 —— 自蒸馏是其中一个特殊分支,教师与学生由同一个网络担任。

  • 自监督学习 —— DINO 等方法以自蒸馏作为训练目标,在无标签数据上学习表征。

  • 模型压缩 —— 知识蒸馏最初服务于模型压缩,自蒸馏则更多用于提升精度。

  • 标签平滑 —— 有研究把自蒸馏的效果解释为一种逐样本的标签平滑。

  • 集成学习 —— 多代自蒸馏产生的模型可以通过平均预测组合成集成。

参考资料

  1. 知识蒸馏综述:蒸馏机制 . baai.ac.cn [引用日期2026-09-29]
  2. 知识蒸馏综述:蒸馏机制 . zhuanzhi.ai [引用日期2026-09-29]
  3. S0950705126015832 . sciencedirect.com [引用日期2026-09-29]
  4. Understanding the Gains from Repeated Self-Distillation . nsf.gov [引用日期2026-09-29]
  5. thecvf.com 上的网页 . thecvf.com [引用日期2026-09-29]
  6. CN114611670A(PDF) . googleapis.com [引用日期2026-09-29]
  7. arxiv.org 上的网页 . arxiv.org [引用日期2026-09-29]
  8. SSL and Foundation Model(PDF) . inria.fr [引用日期2026-09-29]
  9. gyb97-qmz56 . caltech.edu [引用日期2026-09-29]
  10. huggingface.co 上的网页 . huggingface.co [引用日期2026-09-29]
  11. arxiv.org 上的网页 . arxiv.org [引用日期2026-09-29]
  12. SelFusion: Self-distillation for Diffusion Language Models . aclanthology.org [引用日期2026-09-29]
  13. j.procs.2026.06 . acm.org [引用日期2026-09-29]
  14. 自蒸馏技术在推荐模型优化中的应用与实践-开发者社区-阿里云 - 自蒸馏:一种简单高效的优化方式 . aliyun.com [引用日期2026-09-29]
  15. ieee.org 上的网页 . ieee.org [引用日期2026-09-29]
  16. s44443-026-00896-z . springer.com [引用日期2026-09-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-09-29T12:44:24Z

历史版本

完成率 = 阅读完成量 ÷ 阅读量,分母是阅读量不是浏览次数 —— 关了 JS 的、秒退的都在浏览次数里、不在阅读量里。 详细口径在后台的「数据统计」页。

本条目引用的词条
在线蒸馏 离线蒸馏 知识蒸馏 软标签 KL散度 标签平滑 自监督学习 大语言模型 图像分类 图神经网络 过拟合 知识蒸馏 自监督学习 模型压缩 标签平滑 集成学习
红色的还不存在。红链不是错误——它标出"这个概念被引用了但还没人写"。