新知一下
海量新知
6 0 7 6 6 9 0

【BERT】BERT模型压缩技术概览

有三AI | 三人行,必有AI 2020/08/12 17:39

由于 BERT 参数众多,模型庞大,推理速度较慢,在一些实时性要求较高、计算资源受限的场景,其应用会受到限制。因此,讨论如何在不过多的损失BERT性能的条件下,对 BERT 进行 模型压缩 ,是一个非常有现实意义的问题。

本文先介绍模型压缩的概念及常见方法;随后,对目前出现的BERT剪枝的技术做一个整体的介绍。在后面的文章中,挑选一些典型的例子再进行深度的介绍。

作者&编辑 | 小Dream哥

1 模型压缩

所谓 模型压缩 ,就是在尽可能不改变模型效果的情况下,减少模型的尺寸,使得模型有更快的 推理 速度。

随着深度学习技术越来越多的得到应用, 模型压缩 越来越受到重视,因为当模型的准确度达到一定程度后,如何用更少的硬件成本去达到相同的效果,就变得很有价值;另一方面,随着深度学习模型变得越来越“大”,在很多涉及边缘计算的嵌入式设备中部署就变得困难,模型压缩就变成一个必须的事情。

新知达人, 【BERT】BERT模型压缩技术概览

目前,模型压缩主要有4种方法,包括如下:

1.parameter pruning and quantization

参数剪枝(parameter pruning),顾名思义,就是对模型的参数进行删减;

量化(quantization)是一种通过降低数值精度来提高模型推理速度的方法,例如将通常的64位浮点型,转化为16位浮点型进行运算。

2.low-rank factorization

通过低秩因式分解,将参数矩阵分解成两个较小矩阵的乘积来逼近原始参数矩阵,降低模型的参数量,ALBERT中就用了这种方法。

3.transferred/compact convolutional filters

设计特殊结构的卷积滤波器以减少存储和计算的复杂度。

4.knowledge distillation

知识蒸馏,即先训练一个大模型得到较好的效果;再设计和训练一个小模型来获得与大模型相当的效果。

[1] Cheng Y , Wang D , Zhou P , et al. A Survey of Model Compression and Acceleration for Deep Neural Networks[J]. 2017.

[2]  Cheng J , Wang P S , Gang L I , et al. Recent advances in efficient computation of deep convolutional neural networks[J]. Frontiers of Information Technology & Electronic Engineering, 2018, 19(01):64-77.

[3] Liu Z , Sun M , Zhou T , et al. Rethinking the Value of Network Pruning[J]. 2018.

[4] Frankle J , Carbin M . The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks[J]. 2018.

2 BERT模型压缩

BERT模型的参数量巨大,这导致几乎没有BERT或者 BERT-Large 模型可直接在GPU及智能手机上应用,因此模型压缩方法对于BERT的未来的应用前景非常有价值。下面介绍一些BERT模型压缩的工作,可作参考。

(1) BERT剪枝

去掉BERT中不必要的部分,剪枝的内容包括权重大小剪枝、注意力剪枝、网络层以及其他部分的剪枝等。还有一些方法也通过在训练期间采用正则化的方式来提升剪枝能力(layer dropout)。

BERT模型包括输入层(嵌入层),self-attention层,feed-forward等,针对BERT系列模型的结构,可采取的剪枝策略如下:

1)减少层数

在BERT模型的应用中,我们一般取第12层的hidden向量用于下游任务。可以根据不同的任务,接不同层进行finetune。

2)维度剪枝[1]

可以通过因式分解等方法,降低BERT隐藏层的维度,从而降低BERT的参数量。

3)Attention剪枝

在多头注意力中,每头维度是64,最终叠加注意力向量共768维。有研究[2]表明:在推理阶段,大部分头在被单独去掉的时候,效果不会损失太多;将某一层的头只保留1个,其余的头去掉,对效果基本不会有什么影响。

[1] Compressing BERT: Studying the Effects of Weight Pruning on Transfer Learning

[2] Are Sixteen Heads Really Better than One?

[3] Pruning a BERT-based Question Answering Model

[4] Reducing Transformer Depth on Demand with Structured Dropout

[5] Reweighted Proximal Pruning for Large-Scale Language Representation

2) BERT权重因子分解

通过低秩因式分解,将参数矩阵分解成两个较小矩阵的乘积来逼近原始参数矩阵,降低模型的参数量。最典型的就是ALBERT模型,其提出者认为,词向量只是记忆了相对少量的词语的信息,更多的语义和句法等信息时由隐藏层记忆的。因此,他们认为, 词嵌入 的维度可以不必与隐藏层的维度一致,可以通过降低词嵌入的维度的方式来减少参数量。

感兴趣的同学看这篇博文详细了解ALBERT的内容:

【NLP】ALBERT:更轻更快的NLP预训练模型

[1] Structured Pruning of Large Language Models

[2] ALBERT: A Lite BERT for Self-supervised Learning of Language Representations

3)BERT知识蒸馏

知识蒸馏的本质是让超大线下teacher模型来协助线上student模型的训练,本质上是一种超大模型的知识迁移过程。

对Bert的知识蒸馏,研究的是如何将一个大型网络的泛化能力,迁移到一个相对小型的网络,从而达到以下两个目标:

1) 不需要从零开始训练小模型;

2) 蒸馏学习得到的模型效果优于直接训练。

理论上来说,模型在训练的时候需要尽可能多的神经元连接,而一旦训练完成,其中的部分连接其实是冗余的,可以用一个相对紧凑的结构来代替。

新知达人, 【BERT】BERT模型压缩技术概览

[1] DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter

[2] Distilling Task-Specific Knowledge from BERT into Simple Neural Networks

[3] Distilling Transformers into Simple Neural Networks with Unlabeled Transfer Data

[4] Attentive Student Meets Multi-Task Teacher: Improved Knowledge Distillation for Pretrained Models

[5] Patient Knowledge Distillation for BERT Model Compression

[6] TinyBERT: Distilling BERT for Natural Language Understanding

[7] MobileBERT: Task-Agnostic Compression of BERT by Progressive Knowledge Transfer

4)BERT量化

量化(quantization)是一种通过降低数值精度来提高模型推理速度的方法,例如将通常的64位浮点型,转化为8位浮点型进行运算,BERT的量化的基本理论也是如此。

Q-BERT模型微调后的 BERT_BASE 模型同样包含三部分:嵌入、基于 Transformer 的编码器层、输出层。BERT_BASE 模型不同层的参数大小为:嵌入 91MB、编码器 325MB、输出 0.01MB,减少了非常多。

量化过程更多涉及具体的工程化问题,想了解同学可以参考如下的论文了解。

[1]  Q8BERT: Quantized 8Bit BERT

[2] Q-BERT: Hessian Based Ultra Low Precision Quantization of BERT

总结

BERT模型在多种下游任务表现优异,但庞大的模型结果也带来了训练及推理速度过慢的问题,难以满足对实时响应速度要求高的场景,模型轻量化就显得非常重要。


更多“BERT”相关内容

更多“BERT”相关内容

新知精选

更多新知精选