别再蒸馏3层BERT了变矮又能变瘦的D

白癜风药物治疗能好吗 http://baidianfeng.39.net/a_zczz/130911/4255078.html

作者

rumor酱

编辑

丛末

神经网络模型除了部署在远程服务器之外,也会部署在手机、音响等智能硬件上。比如在自动驾驶的场景下,大部分模型都得放在车上的终端里,不然荒山野岭没有网的时候就尴尬了。对于BERT这类大模型来说,也有部署在终端的需求,但考虑到设备的运算速度和内存大小,是没法部署完整版的,必须对模型进行瘦身压缩。

说到模型压缩,常用的方法有以下几种:

量化:用FP16或者INT8代替模型参数,一是占用了更少内存,二是接近成倍地提升了计算速度。目前FP16已经很常用了,INT8由于涉及到更多的精度损失还没普及。低轶近似/权重共享:低轶近似是用两个更小的矩阵相乘代替一个大矩阵,权重共享是12层transformer共享相同参数。这两种方法都在ALBERT中应用了,对速度基本没有提升,主要是减少了内存占用。但通过ALBRET方式预训练出来的Transformer理论上比BERT中的层更通用,可以直接拿来初始化浅层transformer模型,相当于提升了速度。剪枝:通过去掉模型的一部分减少运算。最细粒度为权重剪枝,即将某个连接权重置为0,得到稀疏矩阵;其次为神经元剪枝,去掉矩阵中的一个vector;模型层面则为结构性剪枝,可以是去掉attention、FFN或整个层,典型的工作是LayerDrop[1]。这两种方法都是同时对速度和内存进行优化。蒸馏:训练时让小模型学习大模型的泛化能力,预测时只是用小模型。比较有名的工作是DistillBERT[2]和TinyBERT[3]。实际工作中,减少BERT层数+蒸馏是一种常见且有效的提速做法。但由于不同任务对速度的要求不一样,可能任务A可以用6层的BERT,任务B就只能用3层的,因此每次都要花费不少时间对小模型进行调参蒸馏。

有没有办法一次获得多个尺寸的小模型呢?

今天就给大家介绍一篇论文《DynaBERT:DynamicBERTwithAdaptiveWidthandDepth》[4]。论文中作者提出了新的训练算法,同时对不同尺寸的子网络进行训练,通过该方法训练后可以在推理阶段直接对模型裁剪。依靠新的训练算法,本文在效果上超越了众多压缩模型,比如DistillBERT、TinyBERT以及LayerDrop后的模型。

论文


转载请注明:http://www.aierlanlan.com/cyrz/2409.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了