©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 最大的瓶颈在于芝麻街的主人公太少,快不够用了。

·

多快好省的预训练模型:你丢我也丢相关推荐

  1. 万字解读:预训练模型最新综述!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale学术 作者:太子长琴,Datawhale意向成员 如何在有限数据下训练出高效的 ...

  2. Paddle 基于预训练模型 ERNIE-Gram 实现语义匹配

    文章目录 1. 导入一些包 2. 加载数据 3. 数据预处理 3.1 获取tokenizer,得到 input_ids, token_type_ids 3.2 转换函数.batch化函数.sample ...

  3. 基于预训练模型 ERNIE 实现语义匹配

    基于预训练模型 ERNIE 实现语义匹配 本案例介绍 NLP 最基本的任务类型之一 -- 文本语义匹配,并且基于 PaddleNLP 使用百度开源的预训练模型 ERNIE1.0 为基础训练效果优异的语 ...

  4. 在线部分:werobot服务、主要逻辑服务、句子相关模型服务、BERT中文预训练模型+微调模型(目的:比较两句话text1和text2之间是否有关联)、模型在Flask部署

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 智能对话系统:Unit对话API 在线聊天的总体架构与工具介绍 ...

  5. 按照时间线帮你梳理10种预训练模型

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要25分钟 跟随小博主,每天进步一丢丢 作者: 林哲乐 方向: 知识图谱.问答 知乎专栏: https://zhuanlan.zhihu.com/ ...

  6. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  7. 超详细中文预训练模型ERNIE使用指南-源码

    作者 | 高开远,上海交通大学,自然语言处理研究方向 最近在工作上处理的都是中文语料,也尝试了一些最近放出来的预训练模型(ERNIE,BERT-CHINESE,WWM-BERT-CHINESE),比对 ...

  8. 最强 NLP 预训练模型库 PyTorch-Transformers 正式开源:支持 6 个预训练框架,27 个预训练模型...

    先上开源地址: https://github.com/huggingface/pytorch-transformers#quick-tour 官网: https://huggingface.co/py ...

  9. BERT的通俗理解 预训练模型 微调

    1.预训练模型       BERT是一个预训练的模型,那么什么是预训练呢?举例子进行简单的介绍       假设已有A训练集,先用A对网络进行预训练,在A任务上学会网络参数,然后保存以备后用,当来一 ...

最新文章

  1. 中setting怎么配置_maven的安装与配置(保姆级教学)
  2. 轮廓系数的应用:kmeans聚类理论篇K的选择(轮廓系数)
  3. 华为交换机修改radius服务器地址,华为交换机修改radius服务器地址
  4. 使用SourceOffSite时出现的问题及解决办法
  5. 北斗卫星导航系统基础篇之(三)——北斗缩略词详解
  6. layui 前端分页 后端分页
  7. x79主板不支持服务器内存条,x79主板支持什么内存
  8. 笔记本BIOS能检测到固态,进入系统后磁盘管理不显示固态硬盘
  9. mib文件在服务器的什么位置,MIB文件简单分析
  10. matlab上机作业,matlab上机作业(数字信号处理)
  11. 【小米助手备份】-----找回微信聊天记录
  12. 基于Python实现并测试Modularity算法
  13. 软件测试中的“保险项目”讲解
  14. 服务器声卡如何虚拟,服务器没声卡远程桌面连接怎么实现听到服务器的声音
  15. 徐姗玩赚中国:我用一个月时间做了一个几万粉的dy号,结果被限流了
  16. python 爬取歌曲程序_如何让程序像人一样的去批量下载歌曲?Python爬取付费歌曲...
  17. IOS课程期末项目报告
  18. 2023mathorcupA题量子计算机在信用评分卡组合优化中的应用思路
  19. 青蛙与蚊子——C++练习题
  20. 小程序使用Painter生成海报

热门文章

  1. ibe加密原理_ibe 基于身份的IBE加密源代码,采用C++语言编写,能够运行。 Crypt_De algrithms 解密 238万源代码下载- www.pudn.com...
  2. 阿卡迪亚大学的计算机科学,阿卡迪亚大学计算机科学
  3. php myadmin utf,phpmyadmin在哪里设置utf_8
  4. php5.6.30源码下载,PHP 5.6.30 正式发布,安全漏洞修复
  5. python中国内源_【文】Python更换国内镜像源
  6. django restful 请求_Django编写RESTful API(二):请求和响应
  7. 探索ASP.NET Core中的IStartupFilter
  8. Python基础--1.2 变量循环基础介绍
  9. 洛谷P1144-最短路计算【日常最短路,日常图论,SPFA】
  10. Oracle常用数据库系统表单以及SQL的整理