本文来源公众号“深度学习爱好者”,仅用于学术分享,侵权删,干货满满。
如果你曾经用神经网络来解决一个复杂的问题,你就会知道它们的尺寸可能非常巨大,包含数百万个参数。例如著名的BERT模型约有1亿1千万参数。
为了说明这一点,参见下图中的NLP中最常见架构的参数数量。
各种模型结构的参数数量
在Kaggle竞赛中,胜出的模型通常是由几个模型组成的集合。尽管它们在精确度上可以大大超过简单模型,但其巨大的计算成本使它们在实际应用中完全无法使用。
有没有什么方法可以在不扩展硬件的情况下利用这些强大但庞大的模型来训练最先进的模型?
目前,有三种方法可以压缩神经网络,同时保持预测性能:
-
权值裁剪
-
量化
-
知识蒸馏
在这篇文章中,我的目标是向你介绍“知识蒸馏”的基本原理,这是一个令人难以置信的令人兴奋的想法,它的基础是训练一个较小的网络来逼近大的网络。
什么是知识蒸馏?
让我们想象一个非常复杂的任务,比如对数千个类进行图像分类。通常,你不能指望ResNet50能达到99%的准确度。所以,你建立一个模型集合,平衡每个模型的缺陷。现在你有了一个巨大的模型,尽管它的性能非常出色,但无法将其部署到生产环境中,并在合理的时间内获得预测。
然而,该模型可以很好地概括未见的数据,因此可以放心地相信它的预测。(我知道,情况可能不是这样的,但我们现在就开始进行思维实验吧。)
如果我们使用来自大而笨重的模型的预测来训练一个更小的,所谓的“学生”模型来逼近大模型会怎么