当前位置: 首页 > news >正文

论文阅读_知识蒸馏_MobileBERT

英文题目:MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices
中文题目:MobileBERT:面向资源有限设备的任务无关的压缩模型
论文地址:https://arxiv.org/pdf/2004.02984
领域:自然语言处理,模型蒸馏
发表时间:2020
作者:Zhiqing Sun,卡内基梅隆大学,谷歌
出处:ACL
被引量:162
代码和数据:https://github.com/google-research/google-research/tree/master/mobilebert
阅读时间:22.06.16

读后感

使用了瓶颈结构,同时微调模型实现加速,最终实现了任务无关的蒸馏BERT模型。

介绍

大模型效果好,但受资源限制。文中提出了MobileBERT模型对BERT模型进行压缩和加速,它和原始BERT一样,是任务无关的,可以泛化到不同下游任务。MobileBERT是对BERT LARGE的优化,使用瓶颈结构。具体实现分两步:先训练一个倒瓶颈的特殊的老师模型,然后再将知识转移到学生模型MobileBERT。它比BERT BASE模型小4.3倍,快5.5倍,在GLUE数据集上达到与BASE BASE类似的效果。

文中提出的MobileBERT模型与BERT LARGE的深度相同,用瓶颈结构使每一层更窄,如图-1所示:

与之前的模型相比,文中模型只在预训练阶段使用知识转移,在下游任务中不需要微调教师模型和数据增强;另外,它不修改模型层数,只改变了每层的宽度。

方法

图-1展示了模型参数的具体大小:

瓶颈和逆瓶颈

从表-1中可以看到,每块维度仅为128,另外,将全流程的层输入输出都调整为更窄的512。
在训练过程中,首先训练老师模型 IB-BERT ,再将知识转移到学生模型MobileBERT。老师模型设计如图-1(b)所示,它是一个逆瓶颈结构,师生模型的Feature map大小均为512,这样可以直接对比层输出。同时使用瓶颈和逆瓶颈使老师模型保持性能,学生模型足够紧凑。

多层前馈网络

注意力层和前馈网络功能不同:前者连接了不同空间数据,后者提升了模型的非线性表达能力。一般BERT的注意力层和前馈网络参数比例为1:2,而由于MobileBERT模型比较窄,注意力参数相对更多,为解决此问题,设计了多个叠加的前馈层,如图-1©所示。

操作优化

通过延迟分析发现,归一化层和 gelu 激活函数占延迟的很大比例,因此对其进行优化。

  • 去掉归一化层:用针对元素的线性变换替换n通道的隐藏层归一化。

  • 使用relu代替glue

嵌入分解

嵌入词表占了模型的很大比例,如表-1所示,MobileBERT将嵌入词表压缩到128维,再用核为3的卷积层将其扩展到512维。

训练目标

转移目标包含:feature map转移和注意力转移。

Feature map转移
BERT中每层的输出是下层的输入,因此,需要让学生的层输出尽量与老师结果一致。这里使用MSE作为损失函数。

公式中l为层索引,T为序列长度,N为feature map大小。

注意力转移
注意力提升了BERT模型的语言识别能力,因此也通过学习注意力层将知识更好地转移到MobileBERT模型。使用KL散度来计算注意力层的差异,作为损失函数:

预训练蒸馏
除了针对各Transformer层的转移,在预训练时,还使用了蒸馏的loss函数,最终损失函数由三部分组成:遮蔽的损失(MLM),下一句预测的损失(NSP)和针对MLM的蒸馏损失:

训练策略

下面讨论三种训练策略,如图-2所示:

辅助知识转移(AKT)
将中间层的知识转移作为知识蒸馏的辅助任务。损失函数是所有层的知识转移损失和预测蒸馏损失的线性组合。

联合知识转移(JKT)
将训练分成两步:先训练中间层知识转移,然后训练预训练的知识蒸馏。

递进知识转移(PKT)
下层的错误可能影响到上层的学习,因此设计了先训练下层,再训练上层的知识转移方法。一般在训练上层时冻结下层参数,也可以使用软化方法,训练上层时对下层参数使用较小的学习率。实验证明该方法效果最好。

实验

表-2展示了在SQuAD数据集上,使用不同参数大小的蒸馏结果:

图-3展示了堆叠前馈层的效果:

精调下游任务的方法与普通BERT一致,略有不同的是MobileBERT常需要更大的学习率和更多次迭代。主实验结果如表-8所示:

可以看到,由于是对BERT LARGE的蒸馏,MobileBERT与BERT BASE模型效果类似,而大小比BERT小4.3倍,速度是BERT的5.5倍。

表-8对比了三种不同策略的训练方法,可以看到递进训练效果更好。

文中用的每个优化技术都在实验中做了效果比较,这里只罗列了最重要的部分,其它详见论文正文。

相关文章:

  • No2.搭建基本的资源端解析token(资源服务端)
  • Vue入门【四】-- 事件机制与双向数据绑定
  • 小型超市管理系统的设计与实现 毕业设计-附源码011136
  • R语言缺失时间序列的填充:补齐时间序列数据中所有缺失的时间索引、使用na.locf函数将缺失值NA替换为前序时刻最近的值
  • 26.STM32 SPI通信接口
  • [JS] node.js 入门
  • 卸载mysq并重新安装教程
  • 合并后 ETH 的供应变化以及是否会出现通缩
  • 装饰器模式【Java设计模式】
  • Qt 学习(四) —— qrc资源文件介绍与使用
  • 【云原生之Docker实战】使用Docker部署Alist网盘直链程序
  • 数据结构与算法——左程云05
  • STM32——2.4G无线通信实验
  • 【C语言数据结构】03.双链表
  • 非零基础自学Java (老师:韩顺平) 第23章 反射(reflection) 23.2 反射机制
  • 4. 路由到控制器 - Laravel从零开始教程
  • C++入门教程(10):for 语句
  • EventListener原理
  • java小心机(3)| 浅析finalize()
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Phpstorm怎样批量删除空行?
  • Python3爬取英雄联盟英雄皮肤大图
  • Theano - 导数
  • webpack+react项目初体验——记录我的webpack环境配置
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 回顾2016
  • 目录与文件属性:编写ls
  • 前端技术周刊 2019-01-14:客户端存储
  • 算法-图和图算法
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 1.Ext JS 建立web开发工程
  • linux 淘宝开源监控工具tsar
  • 国内开源镜像站点
  • ​2021半年盘点,不想你错过的重磅新书
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #NOIP 2014# day.1 T2 联合权值
  • ${ }的特别功能
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (20050108)又读《平凡的世界》
  • (8)STL算法之替换
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (南京观海微电子)——COF介绍
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)【Hibernate总结系列】使用举例
  • (转)http协议
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .Mobi域名介绍
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net Signalr 使用笔记
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?