模型训练 准确率下降_ACL 2020 | FastBERT:提升推理速度,推动模型落地

点击上方蓝字关注“ 人工智能热点 ” 全球最热门的人工智能前沿资讯平台  

全文共1821字,阅读时长需要5分钟

自从BERT出现后,似乎NLP就走上了大力出奇迹的道路。模型越来越大,参数越来越多,这直接导致我们需要的资源和时间也越来越多,对上线带来了极大的阻碍。发文章搞科研似乎没有什么,但是这些大模型很难在实际工业场景落地,不只是因为成本过高,也因为推理速度不支持线上实际情况。最近好多文章都开始针对BERT进行瘦身,不管是蒸馏还是减少层数还是参数共享等,都是为了BERT系列模型能够更小更快的同时不丢失精度。

458f285c03784efcc418f11e8daabaae.gif BEGIN 01  概述   FastBERT是ACL-2020新鲜出炉的一篇关于提高BERT推理速度的文章,这篇文章的思想还是很巧妙的,作者发现12层的BERT用来对一些简单问题做分类有点大材小用了。那么我们可不可以对于简单问题只用较少层数来解答,对于复杂问题采用全部层数的BERT呢?作者在这里对BERT的每层输出后面都接了分类器,如果在浅层模型就有很高的置信度对样本进行分类,那么久不再走后面的层了,如果置信度不高,那就继续走后面,这样就极大地缩短了推理的时间。这里每层的分类器并不是单独训练的,而是使用一个总的teacher classifier蒸馏出来的,从实验结果可以看出采用自蒸馏要比直接训练效果好。 02  模型详解  

BackBone

整个模型的骨架就是采用BERT来实现,所有BERT系列的模型都可以套用在这里。BERT在这里的作用还是一个强大的特征提取器的作用,在多层transformer堆叠的后面紧跟着一个teacher classifier,这个在fine-tune阶段会进行训练,后面用来蒸馏每一层的student classifier。整体的模型结构见下图:

d315ec7a2dd7cc61f6fcf2746b1bb339.png 图1 模型架构 图里面的Branch就是每个student classifier,它们具有和teacher classifier一样的结构。在实际推理的时候,从底层开始往上,如果有很高的置信度就early output,不再仅需往后面走了。

Model Training

模型的训练一共包括三个部分,一个是主要骨架模型的预训练,这里和传统的BERT模型是一样的;然后就是整个骨架模型的fine-tuning,这里会训练teacher classifier;最后是对teacher classifier进行蒸馏的到student classifier。预训练和fine-tuning没啥好说的,和BERT是一摸一样的,这里主要介绍一下self-distillation。自蒸馏和传统的蒸馏方式最大的不同就是teacher模型和student模型是一样的在一个模型里面,传统的方式往往需要单独设计student模型。见下图:

ea7487f62777c42b8eb804b4a645f860.png 图2 传统蒸馏方式 但是自蒸馏的话就不存在这个问题了,自蒸馏使用teacher classifier的输出Pt以及student的输出Ps,然后计算他们的KL散度,通过优化所有student KL散度loss的合来确保student和teacher的分布越来越相似。具体公式如下:

5b9def8c154c9699c5fbb1e9bc222528.png

9a203af2782a69c3561a255e6cfa46a3.png

Adaptive Inference 在推理阶段作者使用了自适应的推理,简单来说就是每层的BERT都会有一个结果,作者定义了一个输出结果不确定性的度量,用来衡量每层输出的结果是否可信,公式如下: 185698c0a10737e7bb715ccdcd070df7.png 根据公式我们可以发现,这个不确定性就是用熵来衡量的。熵越大代表结果越不可信,如果某一层的不确定性小于一个阈值,那么我们就对这层的结果进行输出,从而提高了推理速度。我们可能会发现一个问题,如果在浅层的准确率很低,后面也就没办法了。所以个人感觉这个模型效果好的原因应该是基于一个假设:“数据集中大部分样本都是简单样本”。 03  实验  

作者在12个数据集上对模型效果进行了对比,除了传统的BERT,也对比了DistilBERT。结果如下:

1658f1a8089bdd592aef671f4bc875a3.png 图3 12个数据集上的结果 从实验结果中可以看出来,FastBERT在提升速度的同时对于精度的减少还是比较小的。但是这个实验美中不足的是在一些数据集上FastBERT和DistilBERT并没有压缩到同等的数量级,这在一定程度上没法真实的比较两个模型的效果。

作者通过实验证明了自蒸馏的效果,结果如下:

a15a2118ce0e9236f9c035ab4589825c.png 图4 自蒸馏带来的影响

通过上图可以发现,加入自蒸馏后,计算复杂度下降了非常多,但是Acc几乎没有下降。同时文中提到的假设:不确定性低,准确率高。作者也通过实验证明了这一假设:

0d32fcbde490a2db895628137297f2b8.png 图5 不确定性和准确率的关系

同时作者也给出了每层不确定性分布的实验,结果如下:

11d1c6eb17e9211398a6f2c008e4040a.png 图6 每层不确定性数据的分布

通过这个实验结果结合不确定性低准确率高的假设,我们就可以发现,其实很多样本在浅层就有很低的不确定性,所以完全没有必要继续走到后面的层去进行分类。

04  总结   作者通过充分利用BERT每层的输出,发现很多简单的样本其实在浅层就已经可以很好的分类从而不需要走到最后,极大地提高了BERT的推理速度,这对于将BERT这种重量级模型应用到实际线上有很大的帮助。作者的实验只验证了此模型在分类场景上的效果,对于其它场景的应用还有待开发。文章的思路还是非常的新奇的,不是传统的减少模型参数量来提高速度的方法,而是将训练中的early stop思想用到了推理上。同时自蒸馏的想法也很有启发性,避免了传统蒸馏方式需要自己设计student model的情况。 Reference: https://arxiv.org/pdf/2004.02178.pdf https://zhuanlan.zhihu.com/p/143027221 3bf9fb0cdf2abdef3220e5368ae08d0a.gif 9978661c82986611fca35f2443aa6d54.png

喜欢本篇内容请给我们点个在看哟            

          90b4f38473b90aed14be6ee942dca378.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值