背景

知识蒸馏(knowledge distillation)指的是将预训练好的教师模型的知识通过蒸馏的方式迁移至学生模型,一般来说,教师模型会比学生模型网络容量更大,模型结构更复杂。对于学生而言,主要增益信息来自于更强的模型产出的带有更多可信信息的soft_label。

自蒸馏 - 图1

而自蒸馏是自己蒸馏自己,同传统蒸馏类似,自蒸馏中也可以通过一定的方式提供增益信息,使得蒸馏时能够学习到原始信息不包含的信息,因此得到收益。

简介

自蒸馏(self knowledge distillation)是指不通过新增一个大模型的方式找到一个教师模型,同样可以提供有效增益信息给学生模型,这里的教师模型往往不会比学生模型复杂,但提供的增益信息对于学生模型是有效的增量信息,以提升学生模型效率。该方式可以避免使用更复杂的模型,也可以避免通过一些聚类或者是元计算的步骤生成伪标签。目前该方法在学术界较为新颖,从2020年开始逐渐有顶会浮现相关论文,主要探索任务也较为丰富,在CV、NLP、GNN上均有尝试、任务类型也包括self supervised、unsupervised、semi supervised。

由于没有现成综述论文,在对学术界近两年所有自蒸馏先关论文阅读后做下述粗糙概述,便于对该方向更深入地理解。

根据目前了解到的信息,自蒸馏的方法可以从“增益信息的来源”为维度进行分类,主要分为三大类:

  • 伪孪生网络。孪生网络是指两个weighted share的网络,自监督任务中较为流行;伪孪生网络便是两个较为相似且权重独立的网络,在自蒸馏中,一般伪孪生网络使用的teacher和student模型是同一个模型 在这个大类中,可以在时间维度细分为两个子类:
    • 同步蒸馏。例如类似自监督学习的方式,在同一个step中,使用两个一样的model作为伪孪生网络进行自蒸馏
    • 多阶段蒸馏。例如可以使用前几个epoch的model作为teacher蒸馏后几个epoch的student model
  • 类Deep Supervision。即将模型中较深层网络结构作为teacher去蒸馏原模型中较浅层的网络结构
  • 第三类就是上述两类的混合使用。

参考:自蒸馏:一种简单高效的优化方式-阿里云开发者社区 (aliyun.com)

与知识蒸馏的区别

学习方式

自蒸馏是知识蒸馏的一种特殊情况,当知识蒸馏的teacher模型和student模型为同一个模型时就是自蒸馏

应用

知识蒸馏是用于在保证准确率不大幅下降的条件下压缩模型,加快集成网络模型的测试速度,但不会减少训练时间。

自蒸馏是提高模型学习效率,提高准确率。

自蒸馏: 集成与知识蒸馏的隐性结合

这个解释也可以用到知识自蒸馏中——训练一个模型来匹配另一个相同的架构的模型(但使用不同的随机种子)的输出,在某种程度上也能提高性能。
简单来理解,自蒸馏是知识蒸馏的一种特殊情况。

我们假设使用模型model2 从一个随机的初始化开始,来匹配另外一个模型model1 的输出。在这个过程中model2 一方面会学习model1 已经学习到特征子集,另一方面其能够学习到的特征子集也会受其随机初始化的影响。
这个过程,可以看做是:首先对两个单独的模型 model1,model2进行集成学习,然后蒸馏成 model2。

最终的 model2 可能不一定涵盖数据集中所有可学习的视图,但它至少有学习所有视图(通过两个单个模型的集成学习数据库来覆盖)的潜力。这就是自蒸馏模型测试时性能提升的来源!