从模型压缩的角度调查了有关蒸馏相关的进展。与视觉应用型论文不同模型压缩的论文开源的比例并不多,相比较之下蒸馏相关工作算是开源比例大的。下面主要从是否开源或实现两方面按照发表时间列出相关论文和实现。并在有源码实现了论文中做了进一步相关方法的调查。
##一、知识蒸馏相关论文和进展survey:(开源或有第三方实现)
-
2014-NIPS-Do Deep Nets Really Need to be Deep?
- 论文连接:点我
- 方法:文章采用一种模型压缩(model compression)的方法模拟深度网络训练浅层网络,新的浅层模型的准确率能够达到和深度模型几乎一样的效果。(但直接训练浅层网络得到的准确率和深度网络还是没法比的)
- 蒸馏类型:在softmax之前作特征匹配,Hinton称之为logit匹配
- 实现方式:
- 1、训练一个优秀的复杂的深度网络
- 2、用深度网络监督寻训练浅层网络(通过softmax前的特征作L2 loss监督训练)
- 复现性:当前我们使用的方法即为该方法
- 注意事项:
- 1、采用训练好的深度网络和 unlabeled data 共同训练浅层网络。unlabeled的样本最好不能只是将deep model的训练集中的label去掉而得到的样本,因为deep model往往在这些样本点上有overfitting;
- 2、unlabel的样本数需要比deep model的训练集中的样本数要多得多,这样才能更可能的近似原来的这个deep model,unlabeled set 比 train set更大时会work best。
-
2015-NIPS-Distilling the Knowledge in a Neural Network(Hinton系统诠释蒸馏)
- 论文链接:点我
- 方法: 该方法与之前论文方法不同的是采用在softmax层内特征匹配的策略。其本质上是使用softmax的输出得分作为监督,但为了使得到的得分vector更soft,在softmax层加上了蒸馏温度T,使蒸馏的性能显著提升。
- 蒸馏类型:在softmax层进行特征匹配
- 实现方式(分两阶段):
- 原始模型训练阶段:
-
- 根据提出的目标问题,设计一个或多个复杂网络(N1,N2,…,Nt)。
-
- 收集足够的训练数据,按照常规CNN模型训练流程,并行的训练1中的多个网络得到。得到(M1,M2,…,Mt)
-
- 浅层模型训练阶段:
- 原始模型训练阶段: