典型常见的知识蒸馏方法总结一
来源:https://github.com/HobbitLong/RepDistiller收录的方法
NeurIPS2015: Distilling the Knowledge in a Neural Network
知识蒸馏开山之作,从logits中蒸馏知识,KL散度损失
ICLR2015:FitNets: Hints for Thin Deep Nets
A hint is defined as the output of a teacher’s hidden layer responsible for guiding the student’s learning process,
we choose a hidden layer of the student, the guided layer, to learn from the teacher’s hint layer
Similarly, we choose the guided layer to be the middle layer of the student network
与输出的logits概率分布不同,hints最小化教师与学生之间的特征距离,采用L2距离。
ICLR2017:Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer
propose attention as a mechanism of transferring knowledge from one network to another 提出将注意力机制作为知识蒸馏的一种方式
propose the use of both activation-based and gradient-based spatial attention maps 提出同时使用基于激活和基于梯度的空间注意力图
show experimentally that our approach provides significant improvements across a variety of datasets and deep network architectures, including both residual and non-residual networks 实验展示了好的效果
show that activation-based attention transfer gives better improvements than full activation transfer, and can be combined with knowledge distillation 基于激活的注意力转移方式优于完全激活的转移
基于激活的注意力图
论文中定义了三种spatial attention的计算方式
并给出L1或者L2标准化之后的attention蒸馏损失,还强调it is worth emphasizing that normalization of attention maps is important for the success of the student training
基于梯度的注意力图
ICCV 2019:Similarity-Preserving Knowledge Distillation
在本文中,我们提出了一种新形式的知识蒸馏损失,其灵感源于这样一个观察结果:语义相似的输入往往会在经过训练的网络中引发相似的激活模式。
保持相似性的知识蒸馏会引导学生网络的训练,使得在教师网络中能产生相似(不相似)激活情况的输入对,在学生网络中也能产生相似(不相似)的激活情况。与以往的蒸馏方法不同,学生网络不需要去模仿教师网络的表示空间,而是要在其自身的表示空间中保持成对的相似性。
本文提出了余弦自相似性表示矩阵,和Frobenius 范数来作为蒸馏损失
ICCV 2019:Correlation Congruence for Knowledge Distillation
1. propose a new framework named correlation congruence for knowledge distillation (CCKD), which transfers not only the instance-level information but also the correlation between instances.
2. a generalized kernel method based on Taylor series expansion is proposed to better capture the correlation between instances.
CVPR 2019:Variational Information Distillation for Knowledge Transfer
提出了variational information distillation,借助于最大化教师学生之间的互信息
mutual information between two networks based on the variational information maximization
CVPR 2019:Relational Knowledge Distillation
RKD aims at transferring structural knowledge using mutual relations of data examples
定义了两种relation,一种是基于距离的2个样本之间的relation,另一种是三个样本之间的余弦角度relation
Distance-wise
Angle-wise Distillation
ECCV 2018:Learning Deep Representations with Probabilistic Knowledge Transfer
本文提出一个 基于概率的知识转移 (probabilistic knowledge transfer) 的方法。通过概率分布来建模数据的关系,然后通过最大化互信息,将teacher的概率分布知识传递给学生。
使用Teacher的数据之间的条件概率分布,作为知识的载体,传递给Student。
核心思想就是,建模 Teacher和Student的输出之间分布。通过Kernel Density Estimation可以将两个样本i与j之间的概率表示为
考虑到概率和为1,可以构造成:
利用KL散度来最小化教师与学生模型之间概率分布的差异
可以参考知乎
AAAI 2019:Knowledge Transfer via Distillation of Activation Boundaries Formed by Hidden Neurons
在介绍方法之前,本文首先定义了两种feature-based的知识蒸馏方法。
第一种是在学生神经网络学习对输入图像进行分类的过程中传递神经元响应,在这种情况下,交叉熵损失和传递损失会结合起来,形成一个单一的综合损失,用于整个训练过程。
第二种方法是在用标签训练学生之前,通过传递教师神经元响应来初始化学生网络。在基于蒸馏损失完成网络初始化后,再依据交叉熵损失对学生网络进行分类训练。
本文讨论第二种feature-based的知识蒸馏方法,即将这种知识蒸馏用于学生网络的初始化学习或者预训练。
所提出的知识传递方法的概念。所提方法聚焦于神经元的激活情况,而非神经元响应的幅度。这种聚焦能够实现对激活边界更精准的传递。
普通的特征激活蒸馏损失函数
论文所提出的基于激活边界的蒸馏损失函数
用 max(0,1)来取代ReLU,用L1来取代L2
但是max(0,1)不连续可微,因此公式(3)中的损失函数不可导,所以不能作为可微分的损失函数
激活传递损失适用于激活边界的传递。然而,由于max(0,1)是一个离散函数,激活传递损失无法通过梯度下降法来最小化。因此,我们提出了一种可通过梯度下降法最小化的替代损失。
最小化激活传递损失与学习一个二元分类器类似。教师神经元的激活情况对应着类别标签。如果教师神经元处于激活状态,那么学生神经元的响应应该大于 0;如果教师神经元处于未激活状态,那么学生神经元的响应应该小于 0。受这种相似性的启发,该替代损失的设计与支持向量机(SVM)(科尔特斯(Cortes)和瓦普尼克(Vapnik)1995 年)中使用的合页损失the hinge loss(罗萨斯科(Rosasco)等人 2004 年)类似。
将所提出的损失应用于H*W的特征图蒸馏,损失函数可以定义为H和W维度的累加
NeurIPS 2018:Paraphrasing Complex Network: Network Compression via Factor Transfer
在本文中,我们提出了一种新颖的知识迁移方法,该方法运用卷积操作对教师的知识进行释义,并将其转化以便学生网络使用。这一过程通过两个卷积模块来实现,它们分别被称作 “释义器” 和 “转换器”。“释义器” 通过无监督的方式进行训练,以提取 “教师因子”,“教师因子” 被定义为教师网络的释义信息。位于学生网络的 “转换器” 会提取 “学生因子”,并通过模仿 “教师因子” 来帮助实现对其的转化。
我们观察到,采用我们所提出的因子迁移方法训练的学生网络,其性能优于采用传统知识迁移方法训练的学生网络。
常言道,如果一个人完全理解某样事物,那么他 / 她应该能够自行对其作出解释。相应地,如果学生网络能够通过训练来复制所提取的信息,这就意味着该学生网络很好地掌握了相关知识。
在本节中,我们将释义器中间层的输出定义为教师网络的 “教师因子”,而对于学生网络,我们利用由若干卷积层构成的转换器来生成 “学生因子”,并训练这些 “学生因子” 去复制 “教师因子”,如图 1 所示。借助这些模块,我们的知识迁移过程主要包含以下两个步骤:
第一步,通过重建损失对释义器进行训练。然后,利用释义器从教师网络中提取 “教师因子”。
x是教师网络的特征,P是paraphraser的函数,类似于auto-encoder的自监督重建损失。
第二步,将这些 “教师因子” 迁移转化为 “学生因子”,以便学生网络从中学习。
第二步,教师网络和教师的paraphraser权重冻结,利用FT蒸馏损失和交叉熵损失来训练学生网络
蒸馏损失为 将教师网络paraphraser输出的特征和学生网络translator输出的特征进行L2归一化之后,最小化他们之间的L1距离损失
CVPR 2017: A gift from knowledge distillation: Fast optimization, network minimization and transfer learning
我们引入了一种新颖的知识迁移技术,在该技术中,来自预训练深度神经网络(DNN)的知识会被提炼出来并迁移至另一个深度神经网络。由于深度神经网络是通过依次经过多个层将输入空间映射到输出空间的,我们将待迁移的提炼知识依据层间的 “流” 来进行定义,这种 “流” 是通过计算来自两层的特征之间的内积来得出的。
当我们将学生深度神经网络与和其规模相同但未经教师网络训练的原始网络进行对比时,所提出的将提炼知识作为两层之间的 “流” 进行迁移的方法呈现出三个重要现象:(1)学习了提炼知识的学生深度神经网络的优化速度比原始模型快得多;(2)学生深度神经网络的性能优于原始深度神经网络;(3)学生深度神经网络能够从针对不同任务训练的教师深度神经网络那里学习提炼知识,而且其性能优于从头开始训练的原始深度神经网络。
通过内积计算两个特征层的FSP矩阵
第一步,计算两个特征F1和F2之间的FSP矩阵G
第二步,对教师和学生网络的FSP矩阵进行蒸馏损失计算,损失为均方L2损失
蒸馏整体架构,多个特征阶段的FSP损失传递
训练过程,分为两个阶段,第一阶段通过蒸馏损失只优化教师与学生之间的FSP矩阵进行预训练,第二阶段通过标签优化学生的任务损失
arXiv 2017:Like what you like: Knowledge distill via neuron selectivity transfer
In this paper, we propose a novel knowledge transfer method by treating it as a distribution matching problem. 在本文中,我们提出了一种新颖的知识迁移方法,将其视为一个分布匹配问题来处理。具体而言,我们对教师网络和学生网络之间神经元选择性模式的分布进行匹配。为实现这一目标,我们通过最小化这些分布之间的最大均值差异(MMD)度量设计了一种新的知识迁移(KT)损失函数。将其与原始损失函数相结合,我们的方法能够显著提升学生网络的性能。
我们在多个数据集上验证了该方法的有效性,并进一步将其与其他知识迁移方法相结合,以探索最佳可能的结果。最后但同样重要的是,我们针对诸如目标检测等其他任务对模型进行微调。所得结果同样令人鼓舞,这证实了所学特征的可迁移性。
学生网络不仅依据真实标签进行训练,而且还会模仿教师网络中间层激活情况的分布。图中的每个圆点或三角形都代表其相应的滤波器激活图。
最大均值差异MMD损失的介绍
Minimizing the MMD loss is equivalent to transferring neuron selectivity knowledge from teacher to student
Linear 形式:
Polynomial形式
本文核心思想,就是让学生的中间特征与教师的中间特征之间的分布尽可能接近,采用MMD损失对将两者进行匹配,可视化结果为: