本文正在参加「金石计划 . 瓜分6万现金大奖」

导读

常识蒸馏的简略介绍,让咱们了解常识蒸馏背面的直觉。

假如你从前用神经网络来处理一个杂乱的问题,你就会知道它们的尺度或许十分巨大,包括数百万个参数。例如著名的BERT模型约有1亿1千万参数。

为了阐明这一点,拜见下图中的NLP中最常见架构的参数数量。

知识蒸馏:如何用一个神经网络训练另一个神经网络

各种模型结构的参数数量

在Kaggle竞赛中,胜出的模型一般是由几个模型组成的集合。虽然它们在精确度上能够大大超越简略模型,但其巨大的计算本钱使它们在实践应用中彻底无法运用。

有没有什么办法能够在不扩展硬件的状况下运用这些强壮但巨大的模型来练习最先进的模型?

目前,有三种办法能够紧缩神经网络,同时坚持猜测功能:

  • 权值裁剪
  • 量化
  • 常识蒸馏

在这篇文章中,我的目标是向你介绍“常识蒸馏”的基本原理,这是一个令人难以置信的令人兴奋的想法,它的基础是练习一个较小的网络来逼近大的网络。

什么是常识蒸馏?

让咱们想象一个十分杂乱的使命,比如对数千个类进行图像分类。一般,你不能指望ResNet50能达到99%的准确度。所以,你建立一个模型集合,平衡每个模型的缺陷。现在你有了一个巨大的模型,虽然它的功能十分超卓,但无法将其部署到出产环境中,并在合理的时刻内取得猜测。

但是,该模型能够很好地概括未见的数据,因而能够放心肠信任它的猜测。(我知道,状况或许不是这样的,但咱们现在就开端进行思想试验吧。)

假如咱们运用来自负而粗笨的模型的猜测来练习一个更小的,所谓的“学生”模型来逼近大模型会怎么样?

这本质上便是常识的蒸馏,这是由Geoffrey Hinton、Oriol Vinyals和Jeff Dean在论文Distilling the Knowledge in a Neural Network中介绍的。

大致说来,进程如下。

  1. 练习一个能够功能很好泛化也很好的大模型。这被称为教师模型
  2. 运用你所具有的一切数据,计算出教师模型的猜测。带有这些猜测的悉数数据集被称为常识,猜测自身一般被称为soft targets。这是常识蒸馏步骤。
  3. 运用先前取得的常识来练习较小的网络,称为学生模型

为了使进程可视化,见下图。

知识蒸馏:如何用一个神经网络训练另一个神经网络

常识蒸馏

让咱们重视一下细节。常识是怎么取得的?

在分类器模型中,类的概率由softmax层给出,将logits转换为概率:

知识蒸馏:如何用一个神经网络训练另一个神经网络

其间:

知识蒸馏:如何用一个神经网络训练另一个神经网络

是最后一层生成的logits。替换一下,得到一个稍有修正的版别:

知识蒸馏:如何用一个神经网络训练另一个神经网络

其间,T是一个超参数,称为温度。这些值叫做soft targets。

假如T变大,类别概率会变软,也便是说会相互之间愈加挨近,极端状况下,T趋向于无穷大。

知识蒸馏:如何用一个神经网络训练另一个神经网络

假如T = 1,便是本来的softmax函数。出于咱们的意图,T被设置为大于1,因而叫做蒸馏

Hinton, Vinyals和Dean证明了一个通过蒸馏的模型能够像由10个大型模型的集成相同超卓。

知识蒸馏:如何用一个神经网络训练另一个神经网络

Geoffrey Hinton, Oriol Vinyals和Jeff Dean的论文Distilling the Knowledge in a Neural Network中对一个语音辨认问题的常识蒸馏的成果

为什么不重头练习一个小网络?

你或许会问,为什么不从一开端就练习一个更小的网络呢?这不是更简略吗?当然,但这并不一定有用。

试验成果标明,参数越多,泛化作用越好,收敛速度越快。例如,Sanjeev Arora, Nadav Cohen和Elad Hazan在他们的论文“On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization”中对此进行了研讨。

知识蒸馏:如何用一个神经网络训练另一个神经网络

左:单层网络与4层和8层的线性网络。右:运用TensorFlow教程中的MNIST分类的参数化和基线模型。

关于杂乱的问题,简略的模型很难在给定的练习数据上很好地泛化。但是,咱们具有的远不止练习数据:教师模型对一切可用数据的猜测。

这对咱们有两方面的好处。

  • 首先,教师模型的常识能够教学生模型怎么通过练习数据集之外的可用猜测进行泛化。回想一下,咱们运用教师模型对一切可用数据的猜测来练习学生模型,而不是原始的练习数据集。
  • 其次,soft targets供给了比类标签更有用的信息:它标明两个类是否彼此类似。例如,假如使命是分类狗的种类,像“柴犬和秋田犬十分类似”这样的信息关于模型泛化是十分有价值的。

知识蒸馏:如何用一个神经网络训练另一个神经网络

左:秋田犬,右:柴犬

与搬迁学习的差异

Hinton等人也提到,最早的测验是复用练习好的集成模型中的一些层来搬迁常识,从而紧缩模型。

用Hinton等人的话来说,

“……咱们倾向于用学习的参数值在练习过的模型中辨认常识,这使得咱们很难看到怎么改动模型的形式而坚持相同的常识。常识的一个更抽象的观点是,它是一个从输入向量到输出向量的学习好的映射,它将常识从任何特定的实例化中解放出来。—— Distilling the Knowledge in a Neural Network

因而,与转移学习相反,常识蒸馏不会直接运用学到的权重。

运用决策树

假如你想进一步紧缩模型,你能够测验运用更简略的模型,如决策树。虽然它们的表达能力不如神经网络,但它们的猜测能够通过单独观察节点来解说。

这是由Nicholas Frosst和Geoffrey Hinton完结的,他们在他们的论文Distilling a Neural Network Into a Soft Decision Tree中对此进行了研讨。

知识蒸馏:如何用一个神经网络训练另一个神经网络

他们的研讨标明,虽然更简略的神经网络的表现比他们的研讨要好,但蒸馏确实起到了一点作用。在MNIST数据集上,通过蒸馏的决策树模型的测试准确率达到96.76%,较基线模型的94.34%有所提高。但是,一个简略的两层深卷积网络依然达到了99.21%的准确率。因而,在功能和可解说性之间存在权衡。

Distilling BERT

到目前为止,咱们只看到了理论成果,没有实践的比如。为了改动这种状况,让咱们考虑近年来最流行和最有用的模型之一:BERT。

来自于谷歌的Jacob Devlin等人的论文BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,很快被广泛应用于各种NLP使命,如文档检索或情绪分析。这是一个真正的突破,推动了几个范畴的技术发展。

但是,有一个问题。BERT包括约1.1亿个参数,需要很多的时刻来练习。作者陈述说,练习需要4天,运用4个pods中的16个TPU芯片。练习本钱将约为10000美元,不包括碳排放等环境本钱。

Hugging Face成功地测验减小BERT的尺度和计算本钱。他们运用常识蒸馏来练习DistilBERT,这是原始模型巨细的60%,同时速度提高了60%,言语理解能力坚持在97%。

知识蒸馏:如何用一个神经网络训练另一个神经网络

DistilBERT的功能。

较小的架构需要更少的时刻和计算资源:在8个16GB V100 gpu上花费90小时。假如你对更多的细节感兴趣,你能够阅览原始论文”DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter”或许文章的综述,写的很精彩,强烈推荐。

总结

常识蒸馏是紧缩神经网络的三种主要办法之一,使其适合于功能较弱的硬件。

与其他两种强壮的紧缩办法权值剪枝和量化不同,常识蒸馏不直接对网络进行缩减。相反,它运用开始的模型来练习一个更小的模型,称为“学生模型”。由于教师模型甚至能够对未符号的数据供给猜测,因而学生模型能够学习怎么像教师那样进行泛化。在这里,咱们看到了两个要害的成果:开始的论文,它介绍了这个想法,和一个后续的论文,展示了简略的模型,如决策树,也能够用作学生模型。

英文原文:towardsdatascience.com/can-a-neura…