Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self Distillation论文阅读
这是一篇ICCV2019的论文,提升模型精度一直是DL界在追求的目标。一般情况下,在模型结构上面的改进可以归纳为三个方面:depth,width,cardinality。但这样一味地将模型结构复杂化,也会让计算成本呈指数级上升。本论文则提出了一种叫做
self distillation
的训练方式,在没有增加任何推理计算成本的情况下,显著提升模型的精度。
1. Introdution
传统的方法要么关注于提升精度,要么关注于减少计算成本。例如,一般通过将模型结构复杂化去提升精度,通过知识蒸馏去压缩模型从而减少计算成本。但是传统的方法仍有它的不足之处,前者提升一点精度的代价可能就是计算成本会指数级地增加,例如:ResNet100和ResNet150;后者也面临着精度下降、Teacher模型选择较为困难和过多超参数需要调整的问题。
有了以上的motivations,这篇论文就提出了self distillation
这种训练方式。总体而言,作者的contributions如下:
-
提出了一种one-step的自我知识蒸馏的框架,不仅能够显著增加精度,还不会增加任何推理时的计算成本
-
作者在五种卷积网络架构和两种数据集上跑了实验,验证了self distillation这种方法的泛化能力。
2. Related work
这篇论文引的一些Related work比较有意思,所以在这里记录一下。主要分为以下三类:
-
Knowledge Distillation:知识蒸馏就不解释了,可以看看Hinton的Distilling the Knowledge in a Neural Network以及Romero的FitNets(第一次提出了hint learning,本文也借鉴到了这个思想)
-
Adaptive Computation:一些researchers会选择性地去掉模型中的一些计算过程从而达到节省计算资源的目的。可去掉的过程主要是以下三类:layers, channels and images
-
Deep Supervision:深度监督这个和本论文的self distillation最为相似,主要的不同就在于self distillation浅层的classifiers是通过distillation来学习的,而Deep Supervision则是通过label来学习
3. Self Distillation
如上图所示,整体来看整个训练过程的思想就是最深层layer去蒸馏和监督浅层的各个Blocks。黑色虚线下方的Bottlenecks、FC Layers、Softmaxs这些都是训练时为了方便蒸馏和监督时加入的模块,在inference的时候是不需要这些的,因此不会增加任何推理计算成本。
整个模型的监督和蒸馏的loss分为三大部分:
Loss source 1: Cross entropy loss from labels(绿色线),公式如下:
l
1
=
(
1
−
α
)
∗
C
r
o
s
s
E
n
t
r
o
p
y
(
q
i
,
y
)
(1)
l_1 = (1 - \alpha) * CrossEntropy(q^i, y) \tag{1}
l1=(1−α)∗CrossEntropy(qi,y)(1)
其中,
q
i
q^i
qi就是第i个softmax层分类器的输出(包括最深一层softxmax)。
Loss source 2: KL divergence loss from distillation(蓝色线),公式如下:
l 2 = α ∗ K L ( q i , q C ) (2) l_2 = \alpha * KL(q^i, q^C) \tag{2} l2=α∗KL(qi,qC)(2)
其中, q i q^i qi就是第i个softmax层分类器的输出, q C q^C qC是最深层softmax层分类器的输出。
Loss source 3: L2 loss from hints(from features)(灰色线),这一部分是用来监督bottlenecks的,公式如下:
l 3 = λ ∗ ∣ ∣ F i − F C ∣ ∣ 2 2 (3) l_3 = \lambda * || F_i - F_C ||_2^2 \tag{3} l3=λ∗∣∣Fi−FC∣∣22(3)
其中, F i F_i Fi就是第i个bottleneck的feature输出, F C F_C FC就是最深bottleneck的feature输出。
综上,总体的loss公式如下:
l o s s = ∑ i C l o s s i = ∑ i C ( l 1 + l 2 + l 3 ) loss = \sum_i^Closs_i = \sum_i^C(l_1 + l_2 + l_3) loss=i∑Clossi=i∑C(l1+l2+l3)
当i=C,即最后一层时, α , λ \alpha, \lambda α,λ为0。
4. Marks
上面已经将self distillation的原理全部讲完了,但是博主觉得这篇论文中有关Flat Minimum和Sharp Minimum的实验与SSE/SSB的讨论十分有意思,这里mark一下,说不定以后可以用上。
PS:SSE: Sum of squares due to error; SSB: Sum of squares between groups.