多快好省的预训练模型:你丢我也丢
©AI学术前沿原创 · 作者 | IanChi
研究方向 | 机器学习、NLP
本文将罗列几篇通过 Drop 一些组件来提升预训练模型效率的工作。
▍STRUCTURED DROPOUT Pruning
论文标题:
Reducing Transformer Depth on Demand with Structured Dropout
论文链接:
https://arxiv.org/abs/1909.11556
代码链接:
https://github.com/pytorch/fairseq/tree/master/examples/layerdrop
idea 非常简单,类似 Huang Gao 的 Stochastic Depth,在 Train 和 Test 阶段利用结构化的 Dropout,对网络结构的一些 layer 进行丢弃操作。
文章提出了三种丢弃策略:
1. Every Other:每隔几层丢一层;
2. Search on Valid:在valid set搜索一些layer丢弃组合;
2. Data Driven Pruning:将丢弃任务建模成一个函数拟合任务,来学习如何丢弃。
结果发现最简单的 Every Other 效果最好,简单太秀了……
这里起名字为 DropLayer,和一般的 Dropout 不同,是丢弃 weight 的(DropConnect),本质上就是在权重矩阵中乘个 Mask 矩阵({0,1} 矩阵)。
很多问题的本质都是一个 subset selection 的问题,包括一些工作是做 sparse attention,提高 Transformer 的时间和空间效率。
▍Dynamic Early Exiting
论文标题:
DeeBERT: Dynamic Early Exiting for Accelerating BERT Inference
论文链接:
https://arxiv.org/abs/2004.12993
代码链接:
https://github.com/castorini/DeeBERT
这个工作乍一看和上面的思路一模一样,同样也是受启发于 Huang Gao 的工作。大概的思路是,作者认为 BERT 中堆叠了这么多的 Transformer Layer,有很多的冗余。所以,想尝试着,在每个 Transformer 之后,都做一次预测,试试看是不是 ok,这里 ok 不 ok 是用 prediction entropy 来度量的(手动设定个阈值,一顿调)。如果 ok 直接给出预测,后面的 transformer 就不计算了,所以可以省下不少 inference time。
当然作者也尝试了 ensemble 一下多个 layer 的 prediction,貌似没啥效果。
实验方面,也和论文 1 中的 LayerDrop 进行了对比,在有限的对比实验中,提升效率上不如 LayerDrop。
这个工作有点像更加粗糙的 LayerDrop,人家 drop 的是 layer,这里 drop 的 transfomer,粒度更大一些。
▍Scheduled DropHead
论文标题:
Scheduled DropHead: A Regularization Method for Transformer Models
论文链接:
https://arxiv.org/abs/2004.13342
本文也是 Drop 的思想,不同于上面的两篇文章,这里关注的是 Head 的位置。多头是 Transformer 成功的重要原因之一,有些研究表明只有一部分 attention 对于结果影响很大,其他的 attention 是冗余的,所以 drop 掉一些 attention 一方面可以 prevent overfitting,另一方面可以达到 prune 的效果,提升 efficiency。
当然这里,drop 的时候,颗粒度比较大,直接对整个 head attention 进行 drop。除了这个点之外,本文另一个重要的点,是提出了一种 V 字 dropout rate scheduler,而不是 fixed rate,通过烧蚀实验验证了这种 scheduler 的作用。
▍Big Bird Transformers
论文标题:
Big Bird: Transformers for Longer Sequences
论文链接:
https://arxiv.org/abs/2007.14062
代码链接:
https://github.com/google-research/bigbird
这个工作不同于文章 3 的粗暴,而是更加细腻的做 sparse attention,drop 的更加精细,self-attention 也好,encoder-decoder attention 也罢,最大的问题是效率问题,但其实并不是所有的 token 都有直接联系,这里存在着巨大的冗余。此次作为一个引子,回头专门针对 sparse attention 写一篇文章,这里先不赘述。
▍总结
简单总结几句,因为 transformer based models 已经横扫了这么多 NLP task,也包括 CV 和 speech 的一些 task,那么 More Efficient Transformer 一定是个大趋势。本文节选了几篇通过 drop 的思路来 improve transformer 的工作,肯定不够全面,但基本上说清了一个趋势。
如果我们将 neural network 从结构上拆解成不同粒度的组件来看,可以写个简单的伪代码如下:
for component in [neuron, weight, layer, block, head, attention, ...]:
performance, time = drop(component)
if performance is sota:
a novel drop based transformer is proposed
elif time is sota:
a novel prune method of transformer is proposed
elif performance and time both sota:
a big news is coming soon
else:
continue
Auto Drop will be a new direction to follow.
调侃完了之后,说句公道话,不管是黑猫还是白猫,抓住老鼠就是好猫咪。
抖个机灵,Transformer 最大的瓶颈在于芝麻街的主人公太少,快不够用了。
·
多快好省的预训练模型:你丢我也丢相关推荐
- 万字解读:预训练模型最新综述!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale学术 作者:太子长琴,Datawhale意向成员 如何在有限数据下训练出高效的 ...
- Paddle 基于预训练模型 ERNIE-Gram 实现语义匹配
文章目录 1. 导入一些包 2. 加载数据 3. 数据预处理 3.1 获取tokenizer,得到 input_ids, token_type_ids 3.2 转换函数.batch化函数.sample ...
- 基于预训练模型 ERNIE 实现语义匹配
基于预训练模型 ERNIE 实现语义匹配 本案例介绍 NLP 最基本的任务类型之一 -- 文本语义匹配,并且基于 PaddleNLP 使用百度开源的预训练模型 ERNIE1.0 为基础训练效果优异的语 ...
- 在线部分:werobot服务、主要逻辑服务、句子相关模型服务、BERT中文预训练模型+微调模型(目的:比较两句话text1和text2之间是否有关联)、模型在Flask部署
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 智能对话系统:Unit对话API 在线聊天的总体架构与工具介绍 ...
- 按照时间线帮你梳理10种预训练模型
点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要25分钟 跟随小博主,每天进步一丢丢 作者: 林哲乐 方向: 知识图谱.问答 知乎专栏: https://zhuanlan.zhihu.com/ ...
- 智能文档理解:通用文档预训练模型
预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...
- 超详细中文预训练模型ERNIE使用指南-源码
作者 | 高开远,上海交通大学,自然语言处理研究方向 最近在工作上处理的都是中文语料,也尝试了一些最近放出来的预训练模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比对 ...
- 最强 NLP 预训练模型库 PyTorch-Transformers 正式开源:支持 6 个预训练框架,27 个预训练模型...
先上开源地址: https://github.com/huggingface/pytorch-transformers#quick-tour 官网: https://huggingface.co/py ...
- BERT的通俗理解 预训练模型 微调
1.预训练模型 BERT是一个预训练的模型,那么什么是预训练呢?举例子进行简单的介绍 假设已有A训练集,先用A对网络进行预训练,在A任务上学会网络参数,然后保存以备后用,当来一 ...
最新文章
- 中setting怎么配置_maven的安装与配置(保姆级教学)
- 轮廓系数的应用:kmeans聚类理论篇K的选择(轮廓系数)
- 华为交换机修改radius服务器地址,华为交换机修改radius服务器地址
- 使用SourceOffSite时出现的问题及解决办法
- 北斗卫星导航系统基础篇之(三)——北斗缩略词详解
- layui 前端分页 后端分页
- x79主板不支持服务器内存条,x79主板支持什么内存
- 笔记本BIOS能检测到固态,进入系统后磁盘管理不显示固态硬盘
- mib文件在服务器的什么位置,MIB文件简单分析
- matlab上机作业,matlab上机作业(数字信号处理)
- 【小米助手备份】-----找回微信聊天记录
- 基于Python实现并测试Modularity算法
- 软件测试中的“保险项目”讲解
- 服务器声卡如何虚拟,服务器没声卡远程桌面连接怎么实现听到服务器的声音
- 徐姗玩赚中国:我用一个月时间做了一个几万粉的dy号,结果被限流了
- python 爬取歌曲程序_如何让程序像人一样的去批量下载歌曲?Python爬取付费歌曲...
- IOS课程期末项目报告
- 2023mathorcupA题量子计算机在信用评分卡组合优化中的应用思路
- 青蛙与蚊子——C++练习题
- 小程序使用Painter生成海报
热门文章
- ibe加密原理_ibe 基于身份的IBE加密源代码,采用C++语言编写,能够运行。 Crypt_De algrithms 解密 238万源代码下载- www.pudn.com...
- 阿卡迪亚大学的计算机科学,阿卡迪亚大学计算机科学
- php myadmin utf,phpmyadmin在哪里设置utf_8
- php5.6.30源码下载,PHP 5.6.30 正式发布,安全漏洞修复
- python中国内源_【文】Python更换国内镜像源
- django restful 请求_Django编写RESTful API(二):请求和响应
- 探索ASP.NET Core中的IStartupFilter
- Python基础--1.2 变量循环基础介绍
- 洛谷P1144-最短路计算【日常最短路,日常图论,SPFA】
- Oracle常用数据库系统表单以及SQL的整理