文章目录
- 一、完整代码
- 二、论文解读
- 2.1 介绍
- 2.2 Distillation
- 2.3 结果
- 三、整体总结
论文:Distilling the Knowledge in a Neural Network
作者:Geoffrey Hinton, Oriol Vinyals, Jeff Dean
时间:2015
一、完整代码
这里我们使用python代码进行实现
# 完整代码在这里
# 就是一下softmax
# 有时间再弄
二、论文解读
2.1 介绍
使用一系列模型预测概率的平均值即软投票机制能显著改善模型的性能,但是部署起来是比较不方便的:因为要预测很多的模型结果,再求平均;论文中提到可以把所有模型预测结果的平均值部署在一个模型里面,然后利用这一个模型来预测,这样就可以大大减少部署的难度,这种方法被称为Knowledge Distillation
,即知识蒸馏
;
在知识蒸馏中,我们不需要关心参数数量和大小的变化,我们只需要关心经过这一系列的参数得到的结果变化,如果参数变少,一般来说100%
复刻这个结果是很难的;但是我们可以以一定的比例如80%
去还原当时的结果,尽管可能得到错误答案,但是错误答案的相对误差可以稍微控制;错误答案的相对误差告诉了我们很多关于繁琐的模型是如何泛化的。例如,一个宝马的形象可能被误认为垃圾车的可能性很小,但这个错误仍然比误认为胡萝卜的可能性大很多倍。
人们普遍认为,用于培训的目标函数应该尽可能接近地反映用户的真实目标。尽管如此,当真正的目标是很好地推广到新数据时,模型通常被训练以优化训练数据的性能。显然,训练模型进行泛化良好会更好,但这需要关于正确的泛化方法的信息,而这些信息通常是不可用的。然而,当我们将知识从大模型中提取出来到小模型中时,我们可以训练小模型以与大模型相同的方式进行泛化。如果繁琐的模型概括,例如,它是一个大型的平均不同的模型,一个小模型训练推广以同样的方式通常会做更好的测试数据比一个小模型训练的正常方式在相同的训练集用于训练集成。
将繁琐模型的泛化能力转移到小模型的一个明显方法是使用麻烦模型产生的类概率作为训练小模型的“软目标”。在这个转移阶段,我们可以使用相同的训练集或一个单独的“转移”集。当繁琐的模型是一个更简单的模型的大型集合时,我们可以使用它们各自的预测分布的算术或几何平均值作为软目标。当软目标高熵,他们提供更多的信息比硬目标和更少的方差之间的梯度训练情况下,所以小模型通常可以训练的数据比原始繁琐的模型和使用更高的学习率。
2.2 Distillation
在多分类问题上,神经网路依赖于softmax
产生各个类别的概率,其中T
是一个参数可以让输出概率变得平滑;
T
越大,输出的概率越平滑;
在最简单的蒸馏形式中,知识通过在转移集上训练模型并在传输集中的每个情况下使用软目标分布来转移到蒸馏模型,该分布是通过在其softmax
中使用高T
的原模型或者原模型集合产生的;我们可以在在训练蒸馏模型时使用相同的T
,但经过训练后,把T
变为1;
当我们知道输入的正确输出时,我们可以利用对目标函数简单加权的方式去构造最终的目标函数,第一个目标函数是与软目标的交叉熵,这个交叉熵是用与蒸馏模型的softmax
相同的T
来生成软目标来计算的。第二个目标函数是具有正确标签的交叉熵。这是用蒸馏模型的softmax中完全相同的类来计算的,但T
为1;因为在预测的时候T
便是1;
对第一个目标函数求导:
当T
很大的时候,我们有:
在 ∑ z j = ∑ v j = 0 \sum z_j=\sum v_j=0 ∑zj=∑vj=0的时候,我们又有:
所以,在高T
,同时
∑
z
j
=
∑
v
j
=
0
\sum z_j=\sum v_j=0
∑zj=∑vj=0的时候,蒸馏的本质相当于如下:
∂
C
∂
z
j
≈
∂
(
z
j
−
v
j
)
2
2
N
T
2
∂
z
j
\frac{\partial C}{\partial z_j} \approx \frac{\partial \frac{(z_j-v_j)^2}{2NT^2}}{\partial z_j}
∂zj∂C ≈∂zj∂2NT2(zj−vj)2
在较低的T
下,蒸馏模型几乎不去关心那些比平均数更小的负值(平均数为0),这是潜在的优势,因为这些数几乎不受用于训练模型集合的代价函数的限制,因此它们可能非常有噪声;另一方面,那些很小的负值可能会传递关于由模型集合所获得的知识的有用信息。其中哪一种影响占主导地位是一个经验问题;我们表明,当蒸馏的模型太小,无法捕获繁琐模型中的所有知识时,不大不小的T
效果最好,这强烈表明忽略大的负对数是有用的;
2.3 结果
原模型和原模型集合可以部署在一个小的蒸馏模型中,并且准确性可观:
利用soft targets
即软投票机制可以达到regularization
即防止过拟合的效果;
可以利用部分模型在部分类中的高准确率提高权重进而提高模型的准确度;或者对一些表现非常好的模型,给予其较高的T
;
三、整体总结
蒸馏可以很好地将知识从一个集成或从一个大的高度正则化的模型转移到一个更小的蒸馏模型中;