如果使用神经网络解决一个复杂的问题,它的规模可能非常庞大,其中包含数百万个参数。例如,著名的BERT模型大约有1.1亿个参数。
为了说阐明这一点,下图是(自然语言处理)NLP中最常见结构的参数数量,由Nathan Benaich和Ian Hogarth在2020年的AI报告中对此进行总结。 你可以在下面看到此内容:
在Kaggle竞赛中,获胜者模型通常是由多个预测变量组成的集合。 尽管就准确性而言,它们可以在很大程度上击败简单的模型,但它们巨大的计算成本使它们在实践中完全无法使用。
【阅读:哪些受众情报数据告诉我们有关2020年美国总统大选的信息】
有没有办法可以利用这些功能强大但规模庞大的模型训练成最先进的模型,而无需扩展硬件?
当前,有三种主要方法可以在保留预测性能的同时压缩神经网络:
- 权重剪枝(Weight pruning)
- 量化(Quantization)
- 知识蒸馏(Knowledge distillation)
本文要介绍知识蒸馏(Knowledge distillation)的基础知识,它是在训练小网络以逼近大网络的基础上进行的。
那么,什么是知识蒸馏(Knowledge distillation)?
让我们想象一个非常复杂的任务,例如对数千个类的图像进行分类。 通常,你不会只对ResNet50修改训练,并期望它达到99%的准确性。 因此,你建立了一组模型,以平衡每个模型的缺陷。 现在,你有了一个巨大的模型,尽管它具有出色的性能,但无法将应用到生产中在合理的时间内获得预测。
假设该模型很好地概括了看不见的数据,可以放心进行预测。
如果我们使用大型笨拙的模型预测来训练较小的学生模型来近似大型模型(教师模型),该怎么办?
这实际上就是知识蒸馏,由Geoffrey Hinton,Oriol Vinyals和Jeff Dean在论文《在神经网络中蒸馏知识》中介绍。
概括地说,过程如下。
训练一个很好执行和推广的大型模型,称为教师模型。
取得所有数据,然后计算教师模型的预测,具有这些预测的总数据集称为知识,而预测本身通常称为软标签,这就是知识蒸馏。
使用先前获得的知识来训练称为学生模型的较小网络。
为了使过程可视化,可以参考以下内容。
关注一个细节,知识如何获得?
在分类器模型中,类别概率由softmax层给出,将对数转换为概率: 最后一层产生的logits。 不用这些的话,可以使用一个稍微修改的版本: 其中T是温度的超参数,这些值称为软标签。
如果T大,则类别概率“较软”,也就是说,它们彼此之间将更接近。 在极端情况下,当T接近无穷大时, 如果T = 1,可以得到softmax函数。 为了达到目的,将温度设置高于1,因此这一过程称为蒸馏。
Hinton,Vinyals和Dean指出,蒸馏模型与10个大型模型的组合表现得一样好。
为什么不从一开始就训练一个小型网络?
你可能会问,为什么不从一开始就训练一个较小的网络? 会不会更容易? 当然可以,但不一定能有用。
经验表明,更多参数可导致更好的泛化和更快的收敛。 例如,Sanjeev Arora,Nadav Cohen和Elad Hazan在他们的论文《深度网络的优化:超参数隐式加速》中对此进行了研究。
对于复杂的问题,简单的模型很难学习,无法很好地概括给定的训练数据。 但是,我们不仅拥有训练数据,还拥有教师模型对所有可用数据的预测。
首先,教师模型的知识可以教给学生模型如何通过训练数据集之外的可用预测进行概括。 回想一下,我们使用教师模型所有的可用数据预测来训练学生模型,而不是原始的训练数据集。
其次,软标签提供了比类标签更多的有用信息:它指示两个类是否彼此相似。 例如,如果任务是对狗的品种进行分类,则“柴犬和秋田犬非常相似”之类的信息对于模型概括非常有价值。
迁移学习之间的区别
正如Hinton等人指出的那样,最早的通过传递知识来压缩模型的尝试之一是重复使用某些层的经过训练的整体,就像CristianBuciluǎ,Rich Caruana和Alexandru Niculescu-Mizil在其2006年的论文《模型压缩》中所做的那样。
用Hinton等人的话来说,
“……我们倾向于使用已学习的参数值在经过训练的模型中识别知识,这使我们很难看到如何更改模型的形式但保持相同的知识。 使知识脱离任何特定实例的更为抽象的观点是,它是从输入向量到输出向量的学习映射。” ——在神经网络中提取知识。
因此,与迁移学习相反,知识蒸馏不直接使用学习的权重。
使用决策树
如果你想进一步压缩模型,则可以尝试使用更简单的模型,例如决策树。 尽管它们不像神经网络那样具有表现力,但是可以通过单独查看节点来解释其预测结果。
这是由Nicholas Frosst和Geoffrey Hinton完成的,他们在论文中将神经网络提炼成软决策树进行了研究。
这表明,尽管更简单的神经网络的性能也优于蒸馏,但蒸馏的确起到了一点作用。 在MNIST数据集上,提炼决策树模型达到了96.76%的测试准确度,比基准94.34%的模型有所提高。 但是,一个简单的两层深度卷积网络仍然可以达到99.21%的精度。 因此,需要在性能和可解释性之间进行权衡。
BERT蒸馏
到目前为止,我们只看到理论结果,而不是实际例子。接下来,让我们考虑一下近年来最流行和有用的模型之一:BERT。
最初发表在Jacobi Devlin等人的论文BERT:《用于语言理解的深度双向变压器的预训练》中。 它从Google很快就被广泛用于各种NLP任务,例如文档检索或情感分析。 这是一个真正的突破,在多个领域推动了最先进的技术。
但是,有一个问题。 BERT包含约1.1亿个参数,并且需要大量时间进行训练。 作者报告说,训练需要4天,需要在4个Pod中使用16个TPU芯片。 以当前每小时可用的TPU Pod价格计算,训练费用约为10000美元,更不用说碳排放这样的环境成本了。
Hugging Face进行了一次成功的尝试,以减少BERT的大小和计算成本。 他们使用知识蒸馏技术来训练DistilBERT,它的尺寸是原始模型的60%,而速度却提高了60%,并保持了97%的语言理解能力。
较小的体系结构需要更少的时间和计算资源:在8个16GB V100 GPU上花费90小时。
如果您对更多细节感兴趣,可以阅读DistilBERT的原始论文,或者其中的摘要,它是BERT的提炼版本:更小,更快,更便宜,更轻巧。 我强烈建议你读一下。
结论
知识蒸馏是压缩神经网络并使它们适用于功能较弱的硬件的三种主要方法之一。
与权重剪枝和量化(另两种强大的压缩方法)不同,知识蒸馏不会直接减少网络。 相反,它使用原始模型来训练一个较小的模型,称为学生模型。 由于教师模型可以对未标记的数据提供预测,因此学生模型可以像教师一样学习如何概括。
在这里,我们研究了两个关键结果:介绍了该思想的原始论文和后续研究,表明可以将诸如决策树之类的简单模型用作学生模型。
来源https://towardsdatascience.com/can-a-neural-network-train-other-networks-cf371be516c6