Knowledge transfer summary-2

所谓“知识精炼”我的理解就是将一个训练好的复杂模型的“知识”迁移到一个结构更为简单的网络中,或者通过简单的网络去学习复杂模型中“知识”或模仿复杂模型的行为。当然“知识”的定义方式并不是唯一的,见仁见智。KD不同于迁移学习和多任务学习的地方在于它是单一任务在同一个域下的知识传递。随着深度网络的层数和参数的迅速增长,深度学习在实际应用中的部署越来越困难。因此,结合KD来压缩和加速网络的推理就显得尤为重要。目前关于KD的文章大致分为三类:

如何定义知识

  • outputs: logits / soften probability
    《Distilling the knowledge in a neural networks》
    知识精炼方法最早可以追溯到2006年的这篇文章,作者的做法是用小网络去拟合复杂网络的logits。Hinton在这个工作的基础上做了改进,他提出了soft target的做法。拟合soft target的优点是很多的,一方面可以提供更多信息,弥补监督信号不足的问题;另一方面可以恢复类内variance和类间distance。其本质是打散原来压缩到了一个点的监督信息,让小模型的输出尽量match 复杂模型的输出分布;另外soft target还可以看作一个正则项,起到防止过拟合的作用。soft target其实就是软化的softmax,比常规的softmax多了一个温度系数T,以达到蒸馏的目的。而且当T充分大的时候,拟合soft target的做法和logits其实是等价的。文章的不足在于只将网络输出作为知识传递给小网络的做法过于简单,teacher模型理论上是有很多知识可以传递给student模型的;而且这种做法只适合有softmax的分类任务,并且要求类别数比较多,对于二分类问题就没有太大效果;最后一点不足是student模型不能是太深的网络。

  • feature map
    《Fitnets: hints for thin deep nets》
    本文试图将一个复杂网络的知识传递给一个深度更深但是参数更少的网络,因为作者认为深度对于网络的表达能力至关重要。训练一个深层网络的难度在于优化,即如何克服梯度消失的问题。文章提出了intermediate-level hints的概念,即先用student模型学习teacher 模型的中间表示,目的是让student模型取得一个较好的局部最优点作为初始参数。第二阶段的训练把整个student模型作为优化目标,让student模型学习teacher模型的soft targets。得益于网络的深度,student模型的性能甚至超过teacher模型。文章的不足在于用student模型粗暴地学习teacher模型中间层的feature map,这有可能发过来影响student模型的性能和收敛,而且teacher模型和student模型的中间层的选取有很大的人为因素。

    《Knowledge Projection for DNN》
    这篇文章的做法和fitnet的做法几乎完全相同,两点改变:中间层的选取上采用了迭代选择的方案,选择标准是联合loss最小;teacher模型的中间输出不只监督student模型的底层,也被继续利用监督student模型的高层训练。

  • attention map
    《Pay more attention to attention》
    本文将attention map作为知识从teacher模型迁移到student模型。注意力机制很早就被用在NLP中,后来被证明将attention应用在CNN中也可以取得不错的效果。作者提出attention map的原因是feature map的做法太多生硬,表现不佳。定义attention map的做法是将feature map不同通道的feature plane取绝对值然后相加。损失函数也做了改变,即在原损失函数的基础上加上teacher和student模型的attention maps之间的欧氏距离。attention map的做法可以看作全激活feature map的summary,所以拟合attention map的效果略好于feature map也是容易理解的。虽然比feature map的做法有进步,但是仍然存在要人为选取中间层的问题。

  • mini-batch MMD
    《Like What You Like: Knowledge Distill via Neuron Selectivity Transfer》
    这篇文章在attention transfer的基础上引入了kernel trick,insight来自于风格迁移的做法,当kernel取线性核的时候attention transfer只是MMD的特例。作者之所以利用kernel trick将feature map映射到高维空间,是因为他认为attention map的做法粒度还是比较大。当kernel取二阶多项式核的时候,根据gram矩阵的性质,feature map的channel之间的内积可以转化为feature map空间的相关性,即让student模型学习teacher模型的feature map通道之间的关系或者空间像素点之间的关系。具体的方法和attention transfer相同。

  • layers relation
    《Gift from Knowledge Distillation》
    这篇文章定义的知识不是模型的输出而是层与层之间的关系,相当于把MMD中的同一层feature map的相关性用到了不同层的feature map上,这里的关系用FSP矩阵表示。因为层之间的关系相比输出更本质,更能反映网络的knowledge。其中FSP矩阵(i,j)位置的值等于第i个channel和第j个channel的内积,然后让student和teacher模型的FSP矩阵之间的距离最小。感觉这篇文章的做法不是直接学结果,而是学习得到这种结果的方法和过程,是一个不错的思路。

  • gradient map
    《Pay more attention to attention》
    基于gradient的attention map和基于activation的attention map的思想来自于同一篇文章,输出对于输入的梯度也反映了输入和输出层之间的关系,而且直接考虑输入输出的关系省去了很多人为选择中间层的操作。文中提到把teacher模型中loss对input的导数作为知识传递给student模型,因为loss对input的导数反映了网络output的变化对于input的敏感程度,如果某个像素一个小的变化对于对于网络输出有一个大的影响,我们就可以认为网络"pay attention"那个像素。具体做法和基于activation的attention map相同,不过这里在反传梯度的时候相当于对student模型的input求了两次导数。

    《Sobolev training for neural network》
    这是NIPS'17的文章,作者提出在sobolev空间中近似两个函数,即不光match两个函数的输出,还match输出对于输入的梯度,即梯度也提供了非常丰富的信息。把teacher和student模型分别看作两个函数,采用sobolev训练的方式比只match输出要好很多。

  • mini-batch rank
    《DarkRank: Accelerating Deep Metric Learning via Cross Sample Similarities Transfer》
    之前的工作都是考虑teacher模型和student模型的输出以及中间结果的匹配,insight来源于Hinton的soft target,即让student模型学习teacher模型的不同样本之间的排序关系。假设1个batch有7个样本进来,输出端得到7张feature map,但这7张feature map是有亲疏远近关系的,对于类别6, 样本0到它的距离小于5到它的距离。换句话说,在teacher模型中这7个样本在类别6上的排序关系也可以作为知识传递给student模型。

改进学习框架

《Rocket Launching: A Universal and Efficient Framework》
这篇文章在定义知识上没有大的创新,使用的仍然是logits,但是在学习框架上和之前有所不同。它不用预训练teacher模型,而是student和teacher模型同时训练;另外一点是共享网络参数,共享一部分参数相当于火箭发射点火助推器的作用。所以student模型不是向一个已经完全学好的teacher模型学习,每次都去学习一个相对正确的输出,而是和teacher模型一起学习成长,连同teacher模型犯错后纠错的过程也一并学习了。

特定场景应用

《Mimicking Very Efficient Network for Object Detection》
在检测任务中,直接拟合logits或者feature map都是不可行的。所以作者采用匹配proposal的做法。

《Cross Modal Distillation for Supervision Transfer》
作者提出跨模态迁移知识的做法,即在RGB数据集学习到的知识也能迁移到深度场景中来。

《Face Model Compression by Distilling Knowledge from Neurons》
人脸识别中,迁移的知识更具针对性,选择特定的特征去拟合,尽量做到特征选择的均匀性。

《Data-free knowledge distillation for deep neural networks》
这篇文章的应用场景是当训练数据由于隐私等问题对于student模型不可用的时候,如何通过extra metadata的方式解决。

经典方法结合

《Learning loss for knowledge distillation with conditional adversarial networks》
这篇文章将GAN和KD做了一个结合,取得了不错的效果。作者认为student模型的容量远小于teacher模型,让student模型完全匹配teacher的做法有点困难,而且采用l2损失逼近的方式一定程度上限制了student模型的自主学习空间。学生网络是生成器,判别器是一个多层感知机网络,生成器和判别器迭代优化,生成器的目标是生成让判别器无法辨别的logits。某种程度上,这个工作也可以理解成对损失函数做了改进。

《Using Knowledge Distillation To Improve Low-Precision Network Accuracy》
本文将KD和网络量化做了一个结合,用高精度teacher模型指导低精度student模型的训练。网络参数精度下降后准确率势必会受到影响,在获得teacher模型的知识之后或许可以从一个坏的局部最优点爬上来。作者提出了3种思路:teacher模型和量化后的student模型联合训练;预训练的teacher模型指导量化的student模型从头开始训练;teacher模型和student模型均进行了预训练,不过student模型在全精度权重基础上做了量化,然后student在teacher模型的指导下进行finetuning。

《Moonshine: Distilling with Cheap Convolutions》
这篇工作将KD和设计轻便的网络结构方法做了结合。当复杂网络结构被简化的卷积模块替换的时候,计算更加高效,精度势必受到影响。此时,将原网络作为teacher模型,简化之后的网络作为student模型,然后通过teacher模型指导student模型的训练。

推荐阅读更多精彩内容