内容纲要

文章目录

  1. 目的
  2. 分类
  3. 量化
  4. 剪枝
  5. 知识蒸馏
  6. 方法
  7. 实验

欢迎转载,作者:Ling,注明出处:深度学习:前沿技术-DistilBERT

简介

DistilBERT (Distilled version of BERT) 是一种压缩BERT模型的方法,它可以在保证模型性能不降很多的情况下,大幅度压缩模型大小。

动机

file

从图中可以看出,随着Deep learning在NLP领域的发展,其SOTA(State of the Art)模型也越来越大,参数也越来越大,在训练的经济和环境成本方面已经呈现出失控状态。所以我们需要研究如何压缩模型,同时又不损耗性能。

模型压缩的主要方法

目的

在尽可能不降低性能的前提下,压缩模型大小。从而提高模型的空间和时间上的效率。

file

分类

角度一

  • 训练过程中压缩模型:压缩后可能无法恢复性能,很容易under perform
  • 训练之后压缩模型:可以有机会恢复性能

角度二

  • 量化(Quantization):通过降低模型参数的精度来达到压缩模型的目的。
  • 剪枝(Pruning):通过移除部分模型内容来达到压缩模型目的。
  • 知识蒸馏(Knowledge Distillation):通过一种称为师生模型学习,来达到压缩模型目的。

量化

量化(Quantization):通过降低模型参数的精度来达到压缩模型的目的。

file

该方法也常用于输入法压缩模型。例如,将32-bit Float类型的模型参数,用最接近的8 bit的整形数值表示。又如,通过聚类的方式,将部分数值用该类别固定数值替代。

在训练过程中进行量化:

  • 量化weights
  • 计算量化网络的loss
  • 计算非量化weights的梯度loss
  • 更新非量化weights
  • 不断反复,得到最后量化后weights的模型

剪枝

剪枝(Pruning):通过移除部分模型内容来达到压缩模型目的。

file

删除部分weight connections

因为一个好的模型,可以尽可能让期望的结果概率接近1,而不期望的结果接近0。所以我们可能会有很多接近0的权值,我们可以删除这些接近0的权值,从而达到压缩模型目的。

删除部分neurons

我们可以通过评估某些神经元的重要性,删除一些不重要的神经元,从而达到压缩模型目的。

删除部分weight matrices

比如有的工作会删除整个Attentional heads,并且尽可能保证最小损失。

知识蒸馏

知识蒸馏(Knowledge Distillation):通过一种称为师生模型学习,来达到压缩模型目的。

file

所谓师生模型学习是指:我们首先训练一个大的,复杂的,慢的完整模型(Teacher),然后再训练一个小的,简单的,快的模型(Student),并且让学生模型(分布)尽可能接近老师模型(分布)。

DistilBERT

方法

DistilBERT是一种通过知识蒸馏压缩模型的方法。它首先训练一个大的,复杂的,慢的完整模型(Teacher),然后再训练一个小的,简单的,快的模型(Student),并且通过最小化Kullback-Leibler Divergence(KL)值让学生模型(分布)尽可能接近老师模型(分布)。

相对熵有一个性质:两个分布差异越大,KL散度越大。实际应用需要两个分布尽可能的相等,于是就需要KL散度尽可能的小

我们让KL尽可能小,就可以让学生模型尽可能接近教师模型。

我们通过如下代码进行理解:

file

我们首先训练了一个大的,复杂的,慢的完整教师模型,然后我们用该模型结果指导训练学生模型。上图代码,14行对学生模型进行训练,然后将相同输入,输入教师模型和学生模型,得到结果,然后通过KL计算之间误差,我们目标是通过不断训练student模型,减小这个误差。

实验

实验建立

  • 学生模型,使用相同隐藏层大小,但是将层数减去一半。
  • 采用了一些RoBERTa中的训练技巧:大批量,动态掩码,删除NSP

实验结果与分析

GLUE
性能分析

file

结果分析:

和BERT比,保留了 95% 以上的性能,同时将参数减少了 40%。

运行时间分析

file

结果分析:

DistilBERT 比 BERT 快 60%,体积比 BERT 小 60%,比 ELMo + BiLSTM 快 120% 且模型体积更小。

其他分析

file

EM表示Exactly Match

BERT vs RoBERTa vs DistilBERT vs XLNet

file