知识蒸馏:深入理解温度的作用

参考文献:http://baijiahao.baidu.com/s?id=1598625949059208402&wfr=spider&for=pc

之前看过一遍知识蒸馏,当时应该是理解了的,但是过了俩月又忘了……因此特开一帖,用最简单的语言解释!

1.知识蒸馏的定义

首先,知识蒸馏是什么?这里对雷锋网的这篇做一个概括:

知识是什么?是由人工网络的结构、参数等共同构建的映射,而在大样本视角下,这种映射又能够被称为一种概率分布。也即:使用类似最大似然的方法,构建最满足训练样本的概率分布,从而基于训练与测试同分布假设将其应用于测试样本。

蒸馏是什么?大型人工网络的冗余问题已经是人尽皆知(剪枝50%效果几乎不下降),蒸馏的目的就是构建一个小网络,这个小网络的概率分布趋近于大网络。

需要注意的是,这里蒸馏的目的是小网络的概率分布趋近于大网络,而非单纯的正确率趋近于大网络。Hinton注意到,虽然我们最终分类依靠的是softmax后的最大概率结果,但其实那些概率很小类之间的差别蕴含着网络进行特征提取的很多信息。例如,猫、狗、狮子三个类的输出分别是0.99,0.001,0.009,则很明显:狮子与猫的相似程度比狮子与狗高。

因此,从理论上来说:只有小网络的所有大小输出与大网络都非常相近,才可以视为大小网络间概率分布非常接近。

 

2.知识蒸馏与普通训练之间的区别

在我们正常的训练过程中,我们只会关注概率最高结果与正确结果的差别。这种相似性完全是通过足够数量的样本构建的。

因此Hinton的想法是:如何充分利用大网络中的这种结果?如果只是构建所有类的传统损失函数的话,小概率结果对损失函数的贡献微乎其微。解决的方法无非是:在计算损失函数时放大其他类的概率值所对应的损失值。

Hinton用一个简单的方法解决了这一问题:加入温度系数T。改进后的softmax如下。

q_i=\frac{exp(\frac{z_i}{T})}{\sum_{j} exp(\frac{z_j}{T})}

 

我们可以用一个简单的例子看改进后的softmax的效果。

假设某个识别结果中猫、狗、狮子的节点中的值分别为0.9,0.1,0.01。

则他们对应的softmax分类概率分别为

\frac{e^{x}}{e^{0.9}+e^{0.1}+e^{0.01}}

计算可得是0.538,0.241,0.221

而添加了T=20以后,\frac{e^{\frac{x}{20}}}{e^{\frac{0.9}{20}}+e^{\frac{0.1}{20}}+e^{\frac{0.01}{20}}}

计算可得是0.3428,0.3293,0.3279

也即,这种方式使得不同类的输出结果被同等的考量了。Hinton用于训练小网络的损失函数,正是T=1的结果与真值的对比,和T=20时大小网络输出所构成的损失两部分组成。实验结果也证实,这种方法促进了小网络的训练效果。

3.知识蒸馏的用途

如果你认为知识蒸馏只能应用于大变小的场景,那实在是埋没了它的才华。

2018ICML上提出了再生神经网络,作者发现相同规模模型间的知识蒸馏过程中,学生网络超越了教师网络的实现效果。基于此,他们提出了一种再生方法,通过生长式的反复迭代取得性能较好的复杂网络。如下图所示,并验证了其有效性。

知识蒸馏:深入理解温度的作用_第1张图片

2019ICCV的一篇车道线检测文章中,深层图像的特征图提取结果被蒸馏用于浅层网络的特征提取过程,提高了其整体的实现效果。

知识蒸馏:深入理解温度的作用_第2张图片

 

 

你可能感兴趣的:(深度学习)