【Knowledge Distillation】知识蒸馏总结

Knowledge Distillation

背景

知识蒸馏(KD)是想将复杂模型(teacher)中的dark knowledge迁移到简单模型(student)中去,一般来说,teacher具有强大的能力和表现,而student则更为紧凑。通过知识蒸馏,希望student能尽可能逼近亦或是超过teacher,从而用更少的复杂度来获得类似的预测效果。Hinton在Distilling the Knowledge in a Neural Network中首次提出了知识蒸馏的概念,通过引入teacher的软目标(soft targets)以诱导学生网络的训练。近些年来出现了许多知识蒸馏的方法,而不同的方法对于网络中需要transfer的dark knowledge的定义也各不相同。

论文

1. Do Deep Nets Really Need to be Deep? 【NIPS2014】

动机

shallow net在参数较少或者一样的情况下能否和deep net达到相近的效果?

方法

1)softmax的输入是logits、输出是probability,文中提出训练shallow net的时候使用deep net的logits作为label,Hinton称之为logit匹配。

2)训练shallow net时在logits上使用L2 Loss监督训练。

思考

1)deep net更robust,可以对一些错误样本进行矫正,使shallow net学习更容易;同时 deep net学习能力更强,可以学习一些比较难的任务,并将其转换成更加容易的soft label给小模型进行学习。

2)为什么不使用probability作为标签呢?

假如[2e-9, 4e-5, 0.9999]是softmax的三个probability,用这个作为shallow net的目标,因为各个probability之间的差异太大,容易使shallow net注意力集中在较大的probability上,忽略值较小的probability。并且不同的logits通过softmax之后可能会有相近的表达,因此差别会被缩小,如[-10, 0, 10]和[10, 20, 30],显然模型对两者的特征表达是大不相同的。

3)logits比hard label包含更丰富的信息,其中包含deep net本身的知识提炼。

2. Distilling the Knowledge in a Neural Network【NIPS2015】(Hinton系统诠释蒸馏)

动机

ensemble模型部署代价太高,直接训练小模型效果不够

方法

该方法采用softmax层内特征匹配的策略,其本质是使用softmax的输出作为监督,但为了使得到的得分vector更soft,在softmax层加上了蒸馏温度T,使蒸馏的性能提升。



步骤:
1)在T=1训练teacher;
2)在高温下利用teacher softmax的输出概率作为soft label,与hard label进行融合来监督student,对两者的loss进行加权。

3. FITNETS:Hints for Thin Deep Nets【ICLR2015】

动机

deep是DNN主要的功效来源,之前的工作都是用较浅的网络作为student net,这篇文章的主题是如何mimic一个更深但是比较小的网络。

方法

使用的方法直觉上来讲也是直接的:既然网络很深直接训练会很困难,那就通过在中间层加入loss的方法,通过学习teacher中间层feature map来transfer中间层表达的知识,文章中把这个方法叫做Hint-based Training。


【Knowledge Distillation】知识蒸馏总结_第1张图片

训练分为两个stage:

stage1(Hints Training): 选取teacher的中间层作为guidance,对student的中间层进行监督学习,通常两者的维度不一样,所以需要一个额外的线性矩阵或卷积层去进行维度变换,达到维度一致,然后使用L2 Loss进行监督。

stage2(Knowledge Distillation): 采用论文2中KD对整个student进行知识迁移。

结果

1)小而深的网络可以达到比teacher更好的效果,并且在参数量28分之一的前提下,效果高于论文2中的方法;

2)作者做了其他实验:通过深度监督(添加额外的中间层直接进行分类的loss)去学习一个小而深的网络,发现无法正常学习。因此作者得出结论:添加teacher中间层的特征作为student学习对象能够帮助其学习一个deeper的网络,而直接使用hard targets的分类信号去监督中间层则难以起到帮助。

4. Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer【ICLR2017】

动机

将feature map作为知识直接从teacher transfer到student过于生硬,效果不佳。因此,文章提出将attention map作为知识从teacher transfer到student,希望让student关注teacher所关注的区域。

方法

文章中attention map定义如下:

,即将feature map不同通道的feature plane取绝对值进行power操作然后相加,拉近teacher和student的attention map之间的欧式距离。attention map可以看作全激活feature map的summary,因此会比直接transfer feature map效果好。

5. A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning【CVPR2017】

动机

过去的知识蒸馏均是利用soft targets或者利用中间特征做hint来进行知识的transfer,本文提出:神经网络的知识在于如何解决从一个输入到输出的映射,是一个从输入到输出的一个feature flow(即层与层之间的特征关系),teacher要将这个flow transfer给student。层与层之间的特征关系更能表达一种提取的手段,让student学到这种手段更加像授人以鱼不如授人以渔。

方法

文中定义了FSP Matrix矩阵来刻画层与层之间的特征关系。具体做法是:对于具有相同分辨率的特征图,低层和高层特征图的channel两两做内积,然后将结果填入FSP Matrix对应位置。FSP Matrix计算过程:


其中,F1、F2是低层、高层特征图,h、w是特征图的长宽,i、j是低层、高层特征图的channel index,x和W是当前的输入和参数。

然后用L2 Loss去拉近teacher和student的FPS matrix之间的距离,定义如下:


【Knowledge Distillation】知识蒸馏总结_第2张图片

文章采用resnet作为实验的backbone,对teacher和student对应的stage计算FSP Matrix,然后用L2 Loss去拉近FSP Matrix之间的距离,以达到知识迁移的目的。


【Knowledge Distillation】知识蒸馏总结_第3张图片

6. Knowledge Distillation in Generations: More Tolerant Teachers Educate Better Students【AAAI2019】

动机

硬标签会导致模型产生过拟合现象,soft label对于模型的泛化能力有所帮助。文中指出:一个更加tolerant的teacher(即使得teacher的输出更加soft一些),尽管在一定程度上降低了teacher的精度,但能给student更高的泛化学习的宽容度,反而能带来student的提升。常用的方法有label smoothing regularization(lsr)和confidence penalty(CP)两种方法,但其缺点是考虑了所有的类。本文提出了一个更合理的方法,没有计算所有类的额外损失,而是挑选了几个具有最高置信度分数的类。

方法

1)训练teacher时,对teacher的loss加了一项约束:置信度top1和topK其余K-1个平均值之间的gap,命名为top score difference。
【Knowledge Distillation】知识蒸馏总结_第4张图片

2)训练student时,用1)得到的teacher的soft label与hard label融合;
论文中实验在CIFAR-100和ILSVRC2012分类数据集上涨点3%~8%不等。

你可能感兴趣的:(【Knowledge Distillation】知识蒸馏总结)