知识蒸馏之自蒸馏@TOC
本文整理了近几年顶会中的蒸馏类文章(强调self- distillation),后续可能会继续更新其他计算机视觉领域顶会中的相关工作,欢迎各位伙伴相互探讨。
Response-based侧重于学习teacher model最后一层的响应输出,如在两个模型的logit层建立蒸馏损失
feature-based 侧重于学习teacher model中各个hint layer的feature map,注意力蒸馏就属于feature-based distillation。
relation-based 更加强调teacher model中各个layer之间的关系或者teacher model对于data samples的关联性的响应。
有关知识蒸馏的更多了解可参考:**《Knowledge Distillation: A Survey》【1】*
早期的注意力蒸馏:最早提出注意力蒸馏的文章是发表于ICLR2017的《Paying more attention to attention: improving the performance of convolutional neural networks via Attention Transfer》
论文提出:教师模型和学生模型整体结构比较类似的情况下,在教师模型和学生模型的对应阶段建立注意力蒸馏损失。其中注意力特征图的构建方式可以选择Activation-based或Gradient-based 。
code link
Main contribution:论文提出一种自注意力蒸馏方法(Self Attention Distillation(SAD)),SAD允许一个网络利用从它自己的层得到的注意力地图作为它较低层的蒸馏目标,并在没有任何额外监督或标签的情况下获得实质性的改进。作者发现,从训练到合理水平的模型中提取的注意力地图可以编码丰富的上下文信息。有价值的上下文信息可以作为一种“免费”监督的形式,通过在网络本身内执行自顶向下和分层的注意蒸馏来进一步表示学习。在不增加推理时间的情况下,SAD可以很容易地融入到任何前馈卷积神经网络中。
这篇工作首次尝试使用网络自身的注意力地图作为蒸馏目标。
Visulization/问题引入:
对比上图(a)(b),作者认为当模型训练到一定程度时,来自不同层次的注意力map将捕捉到各种丰富的背景信息,因此作者在40epoch之后添加了SAD机制,使得block3→(mimic)block4、block2→(mimic)block3,从而得到(b)图所示的效果。(1)较低层的注意图得到了细化,视觉注意能够捕捉到更丰富的场景上下文;(2)较低层学习到的更好的表示反过来有利于较深层的注意力map。
注意力特征图的选取
效果展示:
Ablation Study
The mimicking path
作者分别在编码器各个阶段之间建立mimic path,探究何种mimic 路径是更好的
实验发现:(1)middle和higher layer的蒸馏效果更好;(2)增加shallow layer的蒸馏反而会降低性能; 作者分析,SAD在底层不起作用的原因是,这些层最初是用来检测场景的底层细节的。使它们模仿后几层的注意图将不可避免地损害它们检测局部特征的能力,因为后几层编码了更多的全局信息.(3)与模拟非相邻层的注意图相比,连续模拟相邻层的注意图能带来更大的性能提高。作者推测,相邻层的注意图在语义上比非相邻层的注意图更接近.
蒸馏方向:作者同样做了反向蒸馏实验,探究higher layer向low layer进行蒸馏.但意料之中的是,算法的性能明显降低了,因为浅层包含了更多的噪声信息且对全局语义信息的把握较差.
SAD vs Deep supervision
实验结果显示:SAD明显胜过Deep supervision.作者分析原因:首先,与稀疏和刻板的标签相比,SAD提供了更软的注意目标,捕捉更多的上下文信息,表明场景结构。从后一层的注意力图中提取信息有助于前一层掌握语境信号。其次,SAD路径提供了一个从深层到浅层的反馈连接。通过注意力蒸馏,这种联系有助于促进连续层次之间的交互学习。
The timepoint to introduce SAD in the training process
作者研究了在训练过程的不同阶段加入SAD的效果差异.作者发现,相比于早期加入SAD,后期加入的效果更好.
在一些要求不可容忍错误的应用中,如自动驾驶和医学图像分析,需要进一步提高预测和分析的准确性,同时需要更短的响应时间。传统的方法通常侧重于提高性能或减少计算资源(响应时间)。知识蒸馏是目前流行的一种压缩方法,其灵感来源于教师对学生的知识转移。其关键策略是将紧凑的学生模型的效果向大型参数化的教师模型近似。然而模型间的知识蒸馏存在以下缺陷:(1)知识迁移的低效性,即学生模型往往并不能充分学习到教师模型的全部知识;(2)如何设计并训练合适的教师模型,现有的蒸馏框架往往需要消耗大量的实验来找到最好的教师模型架构。下图为模型蒸馏与本文提出的自蒸馏策略在训练/推理效率及准确率上的直观对比。
训练策略的对比:各层classifier的结果、集成结果与不适用自蒸馏策略的性能差异
可以看出,首先本文提出的策略在各个数据集和各个模型下都有性能的提升;网络模型越深,这种策略取得的性能收益越大;Cifar100整体上比ImageNet取得的收益更大,主要是因为ImageNet中浅层的classifier性能太差
与其他蒸馏方法的对比
本文在CIfar10数据集上与其他模型间的蒸馏算法进行对比,效果明显更优
与深度监督的对比
这里本人认为:由于文章中提出的蒸馏策略相当于是在深度监督的基础上增加了logit层以及hint层间的自蒸馏,所以理论上来说也是应该比深度监督的监督力度更强的。(作者指出,特别是浅层的classifier提升明显)
性能与效率之间的trade-off(3/4的模型在classifier3/4上获得稳定的性能提升同时伴随着推理速度的加快)
从教师模型进行知识蒸馏,主要有三种方式:soft label(类别预测概率);倒数第二层的输出(如同一实例在倒数第二层的输出特征图之间建立余弦相似度);中间层的feature map。
在基于特征图的蒸馏方面,前人研究诱导学生模拟 1)教师网络的特征;2)教师网络的注意力图抽象;3)教师网络的FSP矩阵
自蒸馏主要分为两种:基于数据增强的(即网络对于同一个实例或同一类的一对实例产生一致的预测)和基于辅助网络的(利用分类器网络中间的附加分支,通过知识转移诱导这些附加分支做出相似的输出)
基于辅助网络的:这些方法依赖于辅助网络,辅助网络具有与分类器网络相同或更小的复杂度;因此,无论是通过特征(即卷积层的输出),还是通过分类器网络的软标签,都很难生成精细化的知识
基于数据增强的:基于数据增强的方法很容易丢失实例之间的局部信息,例如不同扭曲的实例或旋转的实例
与上述两篇文章不同的是,本文不是在不同深度特征图之间建立蒸馏,而是通过对各个深度特征层的整合与细化来指导建立同级的特征图蒸馏。
Reference
[1] Jianping Gou,Baosheng Yu, et al. Knowledge Distillation: A Survey.2021
[2] Paying more attention to attention: improving the performance of convolutional neural networks via Attention Transfer.ICLR2017
[3] Yuenan Hou, Zheng Ma,et al.Learning Lightweight Lane Detection CNNs by Self Attention Distillation,ICCV2019.
[4] Linfeng Zhang,Jiebo Song,et al.Be Your Own Teacher: Improve the Performance of Convolutional Neural
Networks via Self Distillation,ICCV2019.
[5] Mingi Ji,et al. Refine Myself by Teaching Myself :Feature Refinement via Self-Knowledge Distillation,CVPR2021.
[6]Hankook Lee,et al .Self-supervised Label Augmentation via Input Transformations,ICML2020.