Knowledge Distillation Summary

最近看了几篇KD方法用于模型压缩的文章,现总结如下:

  • Knowledge Distillation 最先由 Hinton 提出的,大意是说:小模型在分类的时候,光用训练集里的 one-hot label 不好,因为这种标注把类别间的关系割裂开了。而如果让小模型跟着大模型输出的概率分布去学的话,就相当于给出了类别之间的相似性信息,提供了额外的监督信号,因此学起来更容易。比如说识别手写数字,同时标签为 3 的图片,可能有的比较像 8,有的比较像2,one-hot labels 区分不出来这个信息,但是一个 well-trained 大模型可以给出。因此,修改一下损失函数,让小模型在拟合训练数据的 ground truth labels 的同时,也要拟合大模型输出的概率分布。这个方法叫做 KD Training (Knowledge Distillation Training)。
  • 后来 Romero 又提出了 FitNet,大意是说:直接让小模型在输出端模仿大模型,这个对于小模型来说太难了,模型越深越难训,最后一层的监督信号要传到前面去还是挺难的。解决方案就是说,不如在中间加一些监督信号。于是训练的方法就是所谓的 hint training,把网络中间的输出也拿出来,让大模型和小模型中间层的输出也要尽量接近,让小模型去学习大模型做预测时的中间步骤。实际做的时候是用两阶段法:先用 hint training 去 pretrain 小模型前半部分的参数,再用 KD Training 去训练全体参数。
  • Sergey在ICLR‘17上发表了一篇文章,他将NLP里面的Attention机制也引入到KD方法中。具体做法是student网络不仅模仿teacher网络softmax输出,也模仿teacher网络的feature map中的attention map,attention map的获取方法并不是唯一的,文中的做法是将网络的feature map取绝对值。
  • 图森的王乃岩今年也出了两篇用KD思想做网络压缩的文章,其中一篇和Sergey的引入attention的做法十分类似,只不过在论文中作者换了个名词“Neuron Selectivity Transfer”,就是模仿teacher网络中的神经元激活值比较大的区域,但是并没有对feature map取绝对值,而是直接用子网络mimic母网络的feature map;另一篇文章“DarkRank”的做法比较新颖,作者试图将teacher网络中一种特殊的知识迁移到student网络中,文中叫“Cross Sample Similarities”,意思是说如果有N个样本,它们在student网络中提取的特征之间的相似性大小要和这些样本在teacher网络中保持一致。

References:
https://www.zhihu.com/question/63942461

推荐阅读更多精彩内容