点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Sainbayar Sukhbaatar, Armand Joulin

编译:ronghuaiyang

导读

Transformer网络给深度学习的许多领域带来了巨大的进步,但它们在训练和推理过程中都非常需要计算资源,今天给大家带来两个使Transformer模型更简单、更高效的方法。

Transformer网络给深度学习的许多领域带来了巨大的进步,包括机器翻译、文本理解、语音和图像处理。尽管这些网络功能强大,但它们在训练和推理过程中都非常需要计算资源,这限制了它们的大规模的使用,尤其是对具有长期依赖关系的序列。Facebook人工智能的一项新研究正在寻找使Transformer模型更简单、更高效的方法。

为了更广泛地使用这种强大的深度学习体系结构,我们提出了两种新方法。第一,adaptive attention span,这是一个让Transformer网络对于长句子更有效率的方法。使用这种方法,我们能够在不显著增加计算时间或内存占用的情况下,将Transformer的注意广度增加到8000多个令牌。第二,all-attention layer,这是一种简化Transformer模型结构的方法。即使是一个简单得多的结构,我们的all-attention网络也可以匹配Transformer网络的性能上。我们认为,这项提高Transformer网络效率的工作是朝着使Transformer网络具有更广泛的应用迈出的重要一步。

Adaptive attention span

本研究的目的是使Transformer网络的计算效率更高,特别是在处理非常长的序列时。我们发现数据中的长期关系的需要更长的注意力的范围。然而,增加注意范围也会增加Transformer的计算时间和内存占用。

在我们对Transformer的实验中,我们发现并不是所有的注意力heads都充分利用了它们的注意范围。事实上,在一项字符级语言建模的任务中,大多数heads只使用了他们注意力范围的一小部分。如果我们能在训练中利用这一特性,我们就能显著减少计算时间和内存占用,因为两者都依赖于注意力范围的长度。不幸的是,我们不知道每个head的注意力范围是多少。在多次尝试启发式地设置注意范围之后,我们意识到,如果我们能从数据本身学到这一点,那是最好的。

由于注意范围是整数(因此是不可微的),我们不能像模型的其他参数那样通过反向传播直接学习它。但是,我们可以使用soft-masking函数将其转换为连续值。这个函数的值平滑地从1到0,这使得它可以对掩模长度求导。我们只需将这个掩模函数插入到每个注意力head中,这样每个head就可以根据数据确定不同的注意力范围。

通过我们的自适应注意范围机制,我们设法将Transformer的注意范围提高到超过8000个tokens,而不会显著增加它的计算时间和内存占用。在字符级语言建模任务上,这导致了性能的提高,从而改进了现有技术的状态,使用了更少的参数。

虽然模型中最长的注意力范围超过了8000步,但是平均的注意力范围只有200步左右,这使得模型运行起来更加高效。这反映在每一步的FLOPS上,这对于这些模型来说要小得多。在下面的图中,我们展示了一个这样的学习注意力范围,在一个12层的模型中,每层有8个heads。我们可以看到96个heads中只有5个有超过1000步的跨度。

我们已经发布了论文里的实验代码:https://l.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Ffacebookresearch%2Fadaptive-span&h=AT3JCYNSm6Vd_t22nJUI6LUGDJXadI9sASr5E2KXFeVuzC0vkzMFavpGFZNTMFnHjw01Y18-M4TwVhUERft8vEhUI9ntCvHtatJ6M1ByU7ynviyVSDqvNbELeV_yYECjdz9SrJvYC_mxf4KVirIeXA由PyTorch实现,可以方便的集成到其他模型中。

All-attention layer

接下来,我们着重于简化Transformer网络的结构。Transformer由两个子层组成:自注意层和前馈层。虽然自注意层被认为是主要的组件,但是前馈子层对于高性能非常重要,这就是为什么它的大小通常设置为网络其他部分的四倍。

从表面上看,自我注意和前馈子层看起来非常不同。然而,一个简单的改变,前馈子层可以变成一个注意层。将ReLU非线性函数替换为softmax函数,可以将其激活解释为注意权值。此外,我们可以把第一个线性变换看作key向量,把第二个线性变换看作value向量。

利用这个解释,我们将前馈子层合并到自注意层,创建一个统一的注意层,我们称之为“all-attention”层。我们所要做的就是在一个自我注意层的key和value中添加一组额外的向量。这些额外的向量就和前馈子层的权值是一样的:固定的、可训练的和上下文无关的。相反,根据上下文计算的key和value会根据当前上下文动态更改。

由于额外的向量可以充当一个前馈子层,并获取关于任务的一般知识,所以我们可以从网络中删除所有前馈子层。最终,我们的all-attention网络只是一堆全注意力层。在语言建模基准测试任务上,我们的all-attention网络与最先进的Transformer网络性能相当,并具有更简单的结构。我们希望这种简化的体系结构将为更好地理解和改进Transformer网络开辟道路。

—END—

英文原文:https://ai.facebook.com/blog/making-transformer-networks-simpler-and-more-efficient/

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧

两个让Transformer网络变得更简单,更高效的方法相关推荐

  1. 干货!基于非递减分位数网络的值分布强化学习及其高效探索方法

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 尽管值分布强化学习在过去几年中得到了广泛的研究,但仍然存在两方面未能解决问题:一是如何保证估计出来的分位数函数的有效性,二是如何有效地利 ...

  2. 通过SQL即可让监控分析更简单更高效

    1.前言 阿里时序时空数据库TSDB最新推出TSQL,支持标准SQL的语法和函数.用户使用熟悉的SQL,不仅仅查询更简单易用,用户还可以利用SQL强大的功能,实现更加复杂的计算分析. 2. 为什么需要 ...

  3. TSQL:让监控分析更简单更高效

    1. 前言 阿里时序时空数据库TSDB最新推出TSQL,支持标准SQL的语法和函数.用户使用熟悉的SQL,不仅仅查询更简单易用,用户还可以利用SQL强大的功能,实现更加复杂的计算分析. 2. 为什么需 ...

  4. java简单手机脚本编写,Java认证:Java平台上更简单的脚本编写方法

    本文向各位介绍一下Java性能监控小技巧:"JDK附带分析器.远程连接进程.跟踪统计.为离线分析创建一个堆转储.JConsole并不是高深莫测的." 现在,许多 Java 开发人员 ...

  5. 比KMP算法更简单更快的字符串匹配算法

    我想说一句"我日,我讨厌KMP!". KMP虽然经典,但是理解起来极其复杂,好不容易理解好了,便起码来巨麻烦! 老子就是今天图书馆在写了几个小时才勉强写了一个有bug的.效率不高的 ...

  6. 51CTO.com 巅峰访谈:让远程接入访问变得更简单 更高效

    毫无疑问,在远程访问需求方面,SSL VPN技术在与IPsec的竞争中取得了胜利.Gartner报告称SSL VPN将成为大部分商业使用的.主要的远程接入方式.但是随着SSL VPN使用的增加,对接入 ...

  7. 深度学习工程师必看:更简单的超分辨重构方法拿走不谢

    作者 | Yong Guo, Jian Chen等 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 通过学习从低分辨率(LR)图像到高分辨率(HR)图像之间的非线性映射函数,深度 ...

  8. “乐高式”自动驾驶研发开放平台,让开发更简单灵活高效

    一.2周构建自动驾驶研发平台的秘诀详解 自动驾驶商业化落地加速 中国自动驾驶行业目前面临两个较大的变化.首先,去年11月北京正式开放自动化驾驶的商业化试点,这意味着自动化服务迈过了商业化门槛.与此同时 ...

  9. 自己写小工具 让工作更简单更效率

    2019独角兽企业重金招聘Python工程师标准>>> DBScarPro_DSTool.exe: #include <stdio.h> #include <std ...

最新文章

  1. 数据库基础笔记(MySQL)4 —— 基础约束
  2. Securing Session State
  3. SpringBoot(二)——实现一个基本的小网站
  4. 关于MySql插入数据的乱码问题
  5. sql多层嵌套别名无效_SQL之复杂查询
  6. LuckyDraw bot有幸被提名为微软2019的People's Choice app
  7. 如何用纯 CSS 创作一个文本淡入淡出的 loader 动画
  8. oracle dbra,资源供给:IO子系统之二
  9. python绘制3d坐标轴_matplotlib在python上绘制3D散点图实例详解
  10. 小技巧 ----- Java算法题中的输入输出
  11. 前端很慌!React 称霸,Vue 凶猛,TypeScript 威逼 JavaScript
  12. 软件开发人员,自身素质应该注意的问题!
  13. oracle中表为啥会死锁,Oracle数据表中的死锁情况解决方法
  14. 软件架构模式之管道-过滤器模式--分析
  15. 突破蓝牙壁垒:aptX技术完美解决无线音频的延时问题
  16. 261、Java基础38 - 接口与继承【对象转型】 2019.11.18
  17. ubuntu18.04应用图标怎么放到桌面
  18. js的数据类型和强制类型转换
  19. 坐标变换学习笔记—代码篇Matlab
  20. 语音信号处理第三章:

热门文章

  1. 无线网卡在服务器上不能启用,解决无线网卡突然不能启用的问题(事件ID4294)...
  2. C语言编程实现简易计算器
  3. 屏幕翻拍_带有现代翻拍的前5大经典合作游戏
  4. 苹果电脑如何使用Siri语音助手!
  5. 【堡垒机】堡垒机是啥?一线品牌有哪些?
  6. Hbuilder云打包安心打包错误问题总结(非法字符打包失败问题+win7非法选项:RSA导致不能生成签名)
  7. Parker - 最高效的自动标注工具
  8. 新栏目上线|我是戴小乐-集美貌与才华于一身~
  9. linux开启审计进程,系统运维|Auditd-Linux 服务器安全审计工具
  10. 为什么应对危机,企业倒闭比裁员好,裁员比降薪好?