ACL2020 | FastBERT:放飞BERT的推理速度

FastBERT

自从BERT问世以来,大多数NLP任务的效果都有了一次质的飞跃。BERT Large在GLUE test上甚至提升了7个点之多。但BERT同时也开启了模型的“做大做深”之路,普通玩家根本训不起,高端玩家虽然训得起但也不一定用得起。

所以BERT之后的发展也比较清晰,一部分壕大佬们继续搞预训练提升效果,当你对BERT Large望而却步的时候,又出了GPT2,又双出了威震天Megatron-LM,又双叒出了T5,又双叒叕出了DeepSpeed。。。每次都是照着一个数量级去加,剩下的人只能默默观望,翻翻《显存不够,如何训练大型神经网络?》看哪个trick可以用上。

另一部分大佬着力于给BERT瘦身提升速度。比如剪枝,剪掉多余的连接、多余的注意力头、甚至LayerDrop[1]直接砍掉一半Transformer层;再比如量化,把FP32改成FP16或者INT8;还有蒸馏,用一个学生模型来学习大模型的知识,不仅要学logits,还要学attention score。。。

然而,大部分减肥方法都会带来精度的下降。剪枝会直接降低模型的拟合能力,量化虽然有提升但也有瓶颈,蒸馏的不确定性最大,很难预知你的BERT教出来怎样的学生。

但!是!

昨天刷到了一篇让我眼前一亮的文章《FastBERT: a Self-distilling BERT with Adaptive Inference Time》[2],是北大+腾讯+北师大的ACL2020。作者提出了一种新的inference速度提升方式,相比单纯的student蒸馏有更高的确定性,且可以自行权衡效果与速度,简单实用。

后台回复【0409】获取论文PDF噢~

FastBERT

模型结构

FastBERT的创新点很容易理解,就是在每层Transformer后都去预测样本标签,如果某样本预测结果的置信度很高,就不用继续计算了。论文把这个逻辑称为样本自适应机制(Sample-wise adaptive mechanism),就是自适应调整每个样本的计算量,容易的样本通过一两层就可以预测出来,较难的样本则需要走完全程。

那么问题来了,用什么去预测中间层的结果呢?作者的解决方案是给每层后面接一个分类器,毕竟分类器比Transformer需要的成本小多了:

注:FLOPs (floating point operations)是Tensorflow中提供的浮点数计算量统计

于是模型的整体结构就呼之欲出了:

作者将原BERT模型称为主干(Backbone),每个分类器称为分支(Branch)。

要注意的是,这里的分支Classifier都是最后一层的分类器蒸馏来的,作者将这称为自蒸馏(Self-distillation)。就是在预训练和精调阶段都只更新主干参数,精调完后freeze主干参数,用分支分类器(图中的student)蒸馏主干分类器(图中的teacher)的概率分布

之所以叫自蒸馏,是因为之前的蒸馏都是用两个模型去做,一个模型学习另一个模型的知识,而FastBERT是自己(分支)蒸馏自己(主干)的知识。值得注意的是,蒸馏时需要freeze主干部分,保证pretrain和finetune阶段学习的知识不被影响,仅用brach 来尽可能的拟合teacher的分布。

那为什么不直接用标注数据训分支分类器呢?因为直接训效果不好呗(摊手~下面是作者在消融实验给出的结果:

可以看到,非蒸馏的结果没有蒸馏要好。个人认为是合理的,因为这两种方式在精调阶段的目标不一样。非自蒸馏是在精调阶段训练所有分类器,目标函数有所改变,迫使前几层编码器抽取更多的任务feature。但BERT强大的能力与网络深度的相关性很大,所以过早地判断不一定准确,致使效果下降。

同时,使用自蒸馏还有一点重要的好处,就是不再依赖于标注数据。蒸馏的效果可以通过源源不断的无标签数据来提升。

模型训练与推理

了解模型结构之后,训练与推理也就很自然了。只比普通的BERT模型多了自蒸馏这个步骤:

  1. Pre-training:同BERT系模型是一样的,网上那么多开源的模型也可以随意拿来~

  2. Fine-tuning for Backbone:主干精调,也就是给BERT加上分类器,用任务数据训练,这里也用不到分支分类器,可以尽情地优化

  3. Self-distillation for branch:分支自蒸馏,用无标签任务数据就可以,将主干分类器预测的概率分布蒸馏给分支分类器。这里使用KL散度衡量分布距离,loss是所有分支分类器与主干分类器的KL散度之和

  4. Adaptive inference:自适应推理,及根据分支分类器的结果对样本进行层层过滤,简单的直接给结果,困难的继续预测。这里作者定义了新的不确定性指标,用预测结果的熵来衡量,熵越大则不确定性越大:

效果

对于每层分类结果,作者用“Speed”代表不确定性的阈值,和推理速度是正比关系。因为阈值越小 => 不确定性越小 => 过滤的样本越少 => 推理速度越慢。

模型最终在12个数据集(6个中文的和6个英文的)上的表现还是很好的:

可以看到,在Speed=0.2时速度可以提升1-10倍,且精度下降全部在0.11个点之内,甚至部分任务上还有细微提升。相比之下HuggingFace的DistillBERT的波动就比较剧烈了,6层模型速度只提升2倍,但精度下降最高会达到7个点。

总结

FastBERT是一个在工程上十分实用的模型,通过提前输出简单样本的预测结果,减少模型的计算负担,从而提高推理速度。虽然每层都多了一个分类器,但分类器的计算量也比Transformer小了两个数量级,对速度影响较小。后续的分支自蒸馏也设计的比较巧妙,可以利用无监督数据不断提升分支分类器的效果。

另外,Sample-wise adaptive mechanism和Self-distillation这两个idea也是在本文首次提出,相信会起到抛玉引玉的作用,衍生更多此类工作。论文本身也还有一些想象空间,比如分别优化每层分类器,因为在主干被freeze的情况下各个分支是独立的;或者自蒸馏unfreeze主干,再加上数据自蒸馏一把,说不定还会有性能提升。

值得一提的是,本文的一作刘伟杰(北大)正是K-BERT[3]的作者,那也是一篇我很喜欢的文章,把知识融入到BERT的方式比较优雅,真心期待作者有更多的idea~

最后再回来夸一下,FastBERT着实很实用,而且完全不会影响到手头调好的BERT,只需要蒸馏几个浅层分类器,再把判断机制加上就可以了。而且比起不太稳定的蒸馏来说放在线上也更有底,稳稳的幸福。

唯一的遗憾是源码要在文章发表时才会放出来,一起去催更吧~

https://github.com/autoliuweijie/FastBERT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2017年双十一最全面的大数据分析报告在此!+2018年双十一已经开始,厚昌竞价托管教你如何应对流量流失?+2019年双十一大战一触即发:阿里、京东都有哪些套路和玩法

首先说一个众所周知的数据:2017年双十一天猫成交额1682亿。 所以今天,从三个角度带你一起去探索1682亿背后的秘密: 1、全网热度分析:双十一活动在全网的热度变化趋势、关注来源、媒体来源以及关联词分析。 2、各平台对比分析&…

阿里P8架构师谈:大数据架构设计(文章合集)

架构师进阶有一块很重要的内容,就是需要掌握大数据的架构设计,主要涵括: MySQL等关系式数据库,需要掌握数据库的索引、慢SQL、以及长事务的优化等。 需要掌握非关系式数据库(NoSQL)的选型,以及…

论文浅尝 | 利用 RNN 和 CNN 构建基于 FreeBase 的问答系统

Qu Y,Liu J, Kang L, et al. Question Answering over Freebase via Attentive RNN withSimilarity Matrix based CNN[J]. arXiv preprint arXiv:1804.03317, 2018.概述随着近年来知识库的快速发展,基于知识库的问答系统(KBQA )吸引了业界的广…

positional encoding位置编码详解:绝对位置与相对位置编码对比

本文转载自公众号“夕小瑶的卖萌屋”,专业带逛互联网算法圈的神操作 -----》我是传送门 关注后,回复以下口令: 回复【789】 :领取深度学习全栈手册(含NLP、CV海量综述、必刷论文解读) 回复【入群】&#xf…

## 作为多目标优化的多任务学习:寻找帕累托最优解+组合在线学习:实时反馈玩转组合优化-微软研究院+用于组合优化的强化学习:学习策略解决复杂的优化问题

NIPS 2018:作为多目标优化的多任务学习:寻找帕累托最优解多任务学习本质上是一个多目标问题,因为不同任务之间可能产生冲突,需要对其进行取舍。本文明确将多任务学习视为多目标优化问题,以寻求帕累托最优解。而经过实验…

手把手教你求职进入BAT

“ 最近利用部分的时间,帮助了好几位读者朋友进入了自己心仪的公司,以下我会谈到,求职简历方面给到他们的建议。 如果你本身具备很强的实力,不要因为对求职简历细节不重视,反而痛失良机。 求职加薪,除了…

one-hot(独热)、bag of word(词袋)、word-Embedding(词嵌入)浅析

目录 词袋模型 one-hot word-embedding 我们知道,传统的数据挖掘任务面向的是结构化数据。结构化数据很好理解,就是很有结构的数据嘛。 比如下面这张银行客户数据库中的表格: 编号 姓名 年龄 年收入 职业 有无欠贷 01 夕小瑶 16(…

德勤发布《 2020 亚太四大半导体市场的崛起》报告,美国收入占比达到47%,中国大陆仅占 5%

德勤发布《 2020 亚太四大半导体市场的崛起》报告(以下简称《报告》),《报告》指出: 亚太地区半导体市场正在全球加速崛起,中国大陆、日本、韩国和中国台湾,占据全球半导体总收入前六大国家/地区的四席。美…

干货 | 机器学习算法在饿了么供需平衡系统中的应用

干货 | 机器学习算法在饿了么供需平衡系统中的应用 image:url(https://ask.qcloudimg.com/avatar/1292807/6341kxs4h2.png?imageView2/2/w/72)">用户1292807发表于携程技术中心订阅830作者简介陈宁,饿了么人工智能与策略部高级算法专家,负责供…

研讨会 | “人工智能与行业知识图谱技术实战”研讨会

人工智能时代2017年7月,国务院《新一代人工智能发展规划》明确提出“建立新一代人工智能关键共性技术体系”的重点任务和设立“新一代人工智能重大科技项目以及“1N”人工智能项目群”,特别强调“研究跨媒体统一表征、关联理解与知识挖掘、知识图谱构建与…

Sigmoid函数与Softmax函数的区别与联系

目录 缘起逻辑回归 Sigmoid Softmax 缘起逻辑回归 逻辑回归模型是用于二类分类的机器学习模型(不要说逻辑回归可以做多类分类啊喂,那是二类分类器的组合策略问题,而与逻辑回归分类器本身的构造没有半毛钱关系啊)。 我们知道&…

数据挖掘算法(logistic回归,随机森林,GBDT和xgboost)-腾讯云社区

机器学习就是样本中有大量的x(特征量)和y(目标变量)然后求这个function。(了解更多可以看: https://zhuanlan.zhihu.com/p/21340974?refermlearn ) 求函数的方法,基于理论上来说&am…

阿里P8高级架构师教你如何通过BAT面试顺利拿到offer

“ 在开始面试之旅之前还是要多说几句,选公司是要看时机的 ,建议先去小公司试试水,找找感觉,其次建议选熟人内推,也是对面试成功率有帮助的,那么就开始今天的面试之旅吧。 一:招聘方式 BAT技术…

论文浅尝 | SenticNet 5: 借助上下文嵌入信息为情感分析发现概念级别的原语

Citation: Cambria E, Poria S, Hazarika D, et al.SenticNet 5: discovering conceptual primitives for sentiment analysis by meansof context embeddings[C]//AAAI. 2018.概述目前大部分的人工智能的研究都集中在基于统计学习的方法,这些方法需要大量的训练数据…

文本匹配(语义相似度)综述

本文转载自公众号“夕小瑶的卖萌屋”,专业带逛互联网算法圈的神操作 -----》我是传送门 关注后,回复以下口令: 回复【789】 :领取深度学习全栈手册(含NLP、CV海量综述、必刷论文解读) 回复【入群】&…

大型网站架构设计

“ 大型网站的架构设计,涉及到的面非常多,并不像大家想象的那样,就是一个网站这么简单,今天抛砖引玉,希望能给想从事互联网行业的同学一点初步的概念。 架构设计,其实就要清楚整个大型网站技术架构的演变…

强化学习之原理与应用

PaddlePaddle原创2019/02/20 17:23强化学习之原理与应用强化学习特别是深度强化学习近年来取得了令人瞩目的成就,除了应用于模拟器和游戏领域,在工业领域也正取得长足的进步。百度是较早布局强化学习的公司之一。这篇文章系统地介绍强化学习算法基础知识…

论文浅尝 | 基于多原型mention向量的文本-实体联合学习

链接:http://anthology.aclweb.org/P/P17/P17-1149.pdf概述在知识库和文本的联合表示中,歧义是个困扰的难题。同一个 mention 可能在不同的语境下表述不同实体,同一个实体又有多种 mention 表示,如下图。本文提出了一个新的表示方…

NLP预训练模型综述:从word2vec, ELMo到BERT

目录 前言 word2vec 模型 负采样 char-level与上下文 ELMo BERT 深层双向的encoding 学习句子与句对关系表示 简洁到过分的下游任务接口 前言 还记得不久之前的机器阅读理解领域,微软和阿里在SQuAD上分别以R-Net和SLQA超过人类,百度在MS MARCO…

一篇文章了解架构设计的本质

“ 大型网站的架构设计,涉及到的面非常多,并不像大家想象的那样,就是一个网站这么简单,今天抛砖引玉,希望大家正确看待架构设计。 什么是架构设计的本质? 任何系统,自然情况下,都是…