作者:Edison_G
ECCV 2020即将要开始,很多互联网络公司都有技术论文中标,腾讯优图就8篇入选,涵盖了目标跟踪、行人重识别、人脸识别等领域。 今天我们先预告下人脸识别相关的技术,我们会详细分析优图的“分布式知识蒸馏损失”应用在人脸识别领域,去较大程度改善了困难样本的技术,希望持续关注我们“计算机视觉研究院”!
1、背景
今天我们“计算机视觉研究院”先给大家讲讲什么是“知识蒸馏”,下一期我们再来深入解读优图的“分布式知识蒸馏损失改善人脸识别困难样本”技术。
知识蒸馏被广泛的用于模型压缩和迁移学习当中。开山之作应该是”Distilling the Knowledge in a Neural Network“。这篇文章中,作者的动机是找到一种方法,把多个模型的知识提炼给单个模型。
文章的标题是Distilling the Knowledge in a Neural Network,那么说明是神经网络的知识呢?
一般认为模型的参数保留了模型反复训练学习到的记忆或知识,因此最常见的迁移学习的方式就是在一个大的数据集上先做预训练,然后使用预训练得到的参数在一个小的数据集上做微调(两个数据集往往领域不同或者任务不同)。
小结:
知识蒸馏,可以将一个网络的知识转移到另一个网络,两个网络可以是同构或者异构。做法是先训练一个teacher网络,然后使用这个teacher网络的输出和数据的真实标签去训练student网络。知识蒸馏,可以用来将网络从大网络转化成一个小网络,并保留接近于大网络的性能;也可以将多个网络的学到的知识转移到一个网络中,使得单个网络的性能接近emsemble的结果。
2、知识蒸馏背景
我先从模型压缩开始!各种模型算法,最终目的都是要为某个应用服务。类似地,在工业应用中,除了要求模型要有好的预测以外,往往还希望它的消耗要足够小。具体来说,我们一般希望部署到应用中的模型使用较少的计算资源(存储空间、计算单元等),产生较低的时延。
在深度学习的背景下,为了达到更好的预测,常常会有两种方案:
1.)使用过参数化的深度神经网络,这类网络学习能力非常强,因此往往加上一定的正则化策略(如dropout);
2. )集成模型(ensemble),将许多弱的模型集成起来,往往可以实现较好的预测。
这两种方案无疑都有较大的「支出」,需要的计算量和计算资源很大,对部署非常不利。这也就是模型压缩的动机:我们希望有一个规模较小的模型,能达到和大模型一样或相当的结果。当然,从头训练一个小模型,从经验上看是很难达到上述效果的,也许我们能先训练一个大而强的模型,然后将其包含的知识转移给小的模型呢?如何做到呢?
3、为什么叫「蒸馏」?
4、与直接优化logits差异相比
5、实验与结论
Hinton等人做了三组实验,其中两组都验证了知识蒸馏方法的有效性。在MNIST数据集上的实验表明,即便有部分类别的样本缺失,小模型也可以表现得很不错,只需要修改相应的偏置项,就可以与原模型表现相当。
在语音任务的实验也表明,蒸馏得到的模型比从头训练的模型捕捉了更多数据集中的有效信息,表现仅比集成模型低了0.3个百分点。总体来说知识蒸馏是一个简单而有效的模型压缩/训练方法。这大体上是因为原模型的softmax提供了比onehot标签更多的监督信号[Kevin Clark et al., BAM! Born-Again Multi-Task Networks for Natural Language Understanding]。
知识蒸馏在后续也有很多延伸工作。在NLP方面比较有名的有Yoon Kim等人的Sequence-Level Knowledge Distillation 等。总的来说,对一些比较臃肿、不便部署的模型,可以将其「知识」转移到小的模型上。比如,在机器翻译中,一般的模型需要有较大的容量(capacity)才可能获得较好的结果;现在非常流行的BERT及其变种,规模都非常大;更不用提,一些情形下我们需要将这些本身就很大的深度模型集成为一个ensemble,这时候,可以用知识蒸馏压缩出一个较小的、「便宜」的模型。
另外,在多任务的情境下,使用一般的策略训练一个多任务模型,可能达不到比单任务更好的效果,文献[Kevin Clark et al., BAM! Born-Again Multi-Task Networks for Natural Language Understanding]探索了使用知识蒸馏,利用单任务的模型来指导训练多任务模型的方法,很值得参考。