深度学习:前沿技术-DistilBERT
欢迎转载,作者:Ling,注明出处:深度学习:前沿技术-DistilBERT
简介
DistilBERT (Distilled version of BERT) 是一种压缩BERT模型的方法,它可以在保证模型性能不降很多的情况下,大幅度压缩模型大小。
动机
从图中可以看出,随着Deep learning在NLP领域的发展,其SOTA(State of the Art)模型也越来越大,参数也越来越大,在训练的经济和环境成本方面已经呈现出失控状态。所以我们需要研究如何压缩模型,同时又不损耗性能。
模型压缩的主要方法
目的
在尽可能不降低性能的前提下,压缩模型大小。从而提高模型的空间和时间上的效率。
分类
角度一
- 训练过程中压缩模型:压缩后可能无法恢复性能,很容易under perform
- 训练之后压缩模型:可以有机会恢复性能
角度二
- 量化(Quantization):通过降低模型参数的精度来达到压缩模型的目的。
- 剪枝(Pruning):通过移除部分模型内容来达到压缩模型目的。
- 知识蒸馏(Knowledge Distillation):通过一种称为师生模型学习,来达到压缩模型目的。
量化
量化(Quantization):通过降低模型参数的精度来达到压缩模型的目的。
该方法也常用于输入法压缩模型。例如,将32-bit Float类型的模型参数,用最接近的8 bit的整形数值表示。又如,通过聚类的方式,将部分数值用该类别固定数值替代。
在训练过程中进行量化:
- 量化weights
- 计算量化网络的loss
- 计算非量化weights的梯度loss
- 更新非量化weights
- 不断反复,得到最后量化后weights的模型
剪枝
剪枝(Pruning):通过移除部分模型内容来达到压缩模型目的。
删除部分weight connections
因为一个好的模型,可以尽可能让期望的结果概率接近1,而不期望的结果接近0。所以我们可能会有很多接近0的权值,我们可以删除这些接近0的权值,从而达到压缩模型目的。
删除部分neurons
我们可以通过评估某些神经元的重要性,删除一些不重要的神经元,从而达到压缩模型目的。
删除部分weight matrices
比如有的工作会删除整个Attentional heads,并且尽可能保证最小损失。
知识蒸馏
知识蒸馏(Knowledge Distillation):通过一种称为师生模型学习,来达到压缩模型目的。
所谓师生模型学习是指:我们首先训练一个大的,复杂的,慢的完整模型(Teacher),然后再训练一个小的,简单的,快的模型(Student),并且让学生模型(分布)尽可能接近老师模型(分布)。
DistilBERT
方法
DistilBERT是一种通过知识蒸馏压缩模型的方法。它首先训练一个大的,复杂的,慢的完整模型(Teacher),然后再训练一个小的,简单的,快的模型(Student),并且通过最小化Kullback-Leibler Divergence(KL)值让学生模型(分布)尽可能接近老师模型(分布)。
相对熵有一个性质:两个分布差异越大,KL散度越大。实际应用需要两个分布尽可能的相等,于是就需要KL散度尽可能的小。
我们让KL尽可能小,就可以让学生模型尽可能接近教师模型。
我们通过如下代码进行理解:
我们首先训练了一个大的,复杂的,慢的完整教师模型,然后我们用该模型结果指导训练学生模型。上图代码,14行对学生模型进行训练,然后将相同输入,输入教师模型和学生模型,得到结果,然后通过KL计算之间误差,我们目标是通过不断训练student模型,减小这个误差。
实验
实验建立
- 学生模型,使用相同隐藏层大小,但是将层数减去一半。
- 采用了一些RoBERTa中的训练技巧:大批量,动态掩码,删除NSP
实验结果与分析
GLUE
性能分析
结果分析:
和BERT比,保留了 95% 以上的性能,同时将参数减少了 40%。
运行时间分析
结果分析:
DistilBERT 比 BERT 快 60%,体积比 BERT 小 60%,比 ELMo + BiLSTM 快 120% 且模型体积更小。
其他分析
EM表示Exactly Match
留言