17种transformers

技术标签: 日常

萧箫 发自 凹非寺量子位 报道 | 公众号 QbitAI

可高效处理长文本的模型Longformer、和堪称“升级版”Transformer的BigBird模型,到底有什么区别?

打开百度APP,查看更多高清图片

Transformer的其他各种变体(X-former)到底都长什么样、又有哪些新应用?

由于Transformer模型的发展速度日新月异,一天一个样,哪怕是隔段时间回来研究,模型可能也已经多了不少。

Transformer模型,是谷歌在2017年推出的NLP经典模型(Bert就是用的Transformer)。在机器翻译任务上,Transformer表现超过了RNN和CNN,只需要编/解码器就能达到很好的效果,可以高效地并行化。

好消息是,这里有一篇Transformer模型的“最新动向”,它集中探讨Transformer新模型对于自注意力机制(Self-attention)的改进,并对这些模型进行对比。

此外,还有模型在NLP、计算机视觉和强化学习等各个领域的最新应用。

标准Transformer模型

首先来看看,标准的Transformer模型是什么样的。

Transformer的核心部分,是右边的两个黑色实线框圈起来的两部分,左边是编码器(Encoder),右边是解码器(Decoder)。

可以看见,编/解码器主要由两个模块组合成:前馈神经网络(图中蓝色的部分)和注意力机制(图中玫红色的部分),解码器通常多一个(交叉)注意力机制。

Transformer最重要的部分,就是注意力机制。

通俗来讲,注意力机制在图像处理中的应用,是让机器“像人一样特别注意图像的某个部分”,就像我们在看图时,通常会“特别关注”图中的某些地方。

这其中,自注意力机制是定义Transformer模型特征的关键,其中一个重点难题就在于它的时间复杂度和空间复杂度上。

由于注意力机制直接将序列(sequence)两两比较,导致计算量巨大(计算量变成O(n))。

最近,大量论文提出了新的Transformer“变种”,它们的根本目的都是加速模型的效率,但如果一篇篇去看,可能有点眼花缭乱。

为此,Google AI的研究人员特意整理了一篇Transformer模型的发展论文,仔细讲解它们的出处。

“变种”后的Transformer模型

2种分类方法

使用方法来分类的话,Transformer模型可以分成如下3类:

只用编码器:可用于分类只用解码器:可用于语言建模编码器-解码器:可用于机器翻译

但如果按这些变种的提高效率的原理,也就是“高效方法”来分类,那么Transformer模型的这些“变种”则可以被分成如下几类:

Fixed Patterns(固定模式):将视野限定为固定的预定义模式,例如局部窗口、固定步幅块,用于简化注意力矩阵;Learnable Patterns(可学习模式):以数据驱动的方式学习访问模式,关键在于确定token相关性。Memory(内存):利用可以一次访问多个token的内存模块,例如全局存储器。Low Rank(低秩):通过利用自注意力矩阵的低秩近似,来提高效率。Kernels(内核):通过内核化的方式提高效率,其中核是注意力矩阵的近似,可视为低秩方法的一种。Recurrence(递归):利用递归,连接矩阵分块法中的各个块,最终提高效率。

可以看见,近期Transformer相关的研究都被分在上面的图像中了,非常清晰明了。

了解完分类方法后,接下来就是Transformer模型的各种变体了。

17种经典“X-former”

1、Memory Compressed Transformer(2018)

这是让Transformer能更好地处理长序列的早期尝试之一,主要修改了两个部分:定位范围注意、内存压缩注意。

其中,前者旨在将输入序列分为长度相似的模块,并在每个部分中运行自注意力机制,这样能保证每个部分的注意力成本不变,**次数就能根据输入长度线性缩放。

后者则是采用跨步卷积,减少注意力矩阵的大小、以及注意力的计算量,减少的量取决于跨步的步幅。

2、Image Transformer(2018)

这是个受卷积神经网络启发的Transformer变种,重点是局部注意范围,即将接受域限制为局部领域,主要有两种方案:一维局部注意和二维局部注意。

不过,这种模型有一个限制条件,即要以失去全局接受域为代价,以降低存储和计算成本。

3、 Set Transformer(2019)

这个模型是为解决一种特殊应用场景而生的:输入是一组特征,输出是这组特征的函数。

它利用了稀疏高斯过程,将输入集大小的注意复杂度从二次降为线性。

4、Sparse Transformer(2019)

这个模型的关键思想,在于仅在一小部分稀疏的数据对上计算注意力,以将密集注意力矩阵简化为稀疏版本。

不过这个模型对硬件有所要求,需要自定义GPU内核,且无法直接在TPU等其他硬件上使用。

5、Axial Transformer(2019)

这个模型主要沿输入张量的单轴施加多个注意力,每个注意力都沿特定轴混合信息,从而使沿其他轴的信息保持独立。

由于任何单轴的长度通常都比元素总数小得多,因此这个模型可以显著地节省计算和内存。

6、Longformer(2020)

Sparse Transformer的变体,通过在注意力模式中留有空隙、增加感受野来实现更好的远程覆盖。

在分类任务上,Longformer采用可以访问所有输入序列的全局token(例如CLS token)。

7、Extended Transformer Construction(2020)

同样是Sparse Transformer的变体,引入了一种新的全局本地注意力机制,在引入全局token方面与Longformer相似。

但由于无法计算因果掩码,ETC不能用于自动回归解码。

8、BigBird(2020)

与Longformer一样,同样使用全局内存,但不同的是,它有独特的“内部变压器构造(ITC)”,即全局内存已扩展为在sequence中包含token,而不是简单的参数化内存。

然而,与ETC一样,BigBird同样不能用于自动回归解码。

9、Routing Transformer(2020)

提出了一种基于聚类的注意力机制,以数据驱动的方式学习注意力稀疏。为了确保集群中的token数量相似,模型会初始化聚类,计算每个token相对于聚类质心的距离。

10、Reformer(2020)

一个基于局部敏感哈希(LSH)的注意力模型,引入了可逆的Transformer层,有助于进一步减少内存占用量。

模型的关键思想,是附近的向量应获得相似的哈希值,而远距离的向量则不应获得相似的哈希值,因此被称为“局部敏感”。

11、Sinkhorn Transformer(2020)

这个模型属于分块模型,以分块的方式对输入键和值进行重新排序,并应用基于块的局部注意力机制来学习稀疏模式。

12、Linformer(2020)

这是基于低秩的自注意力机制的高效Transformer模型,主要在长度维度上进行低秩投影,在单次转换中按维度混合序列信息。

13、Linear Transformer(2020)

这个模型通过使用基于核的自注意力机制、和矩阵产品的关联特性,将自注意力的复杂性从二次降低为线性。

目前,它已经被证明可以在基本保持预测性能的情况下,将推理速度提高多达三个数量级。

14、Performer(2020)

这个模型利用正交随机特征(ORF),采用近似的方法避免存储和计算注意力矩阵。

15、Synthesizer models(2020)

这个模型研究了调节在自注意力机制中的作用,它合成了一个自注意力模块,近似了这个注意权重。

16、Transformer-XL(2020)

这个模型使用递归机制链接相邻的部分。基于块的递归可被视为与其他讨论的技术正交的方法,因为它没有明确稀疏密集的自注意力矩阵。

17、Compressive Transformers(2020)

这个模型是Transformer-XL的扩展,但不同于Transformer-XL,后者在跨段移动时会丢弃过去的**,而它的关键思想则是保持对过去段**的细粒度记忆。

整体来说,这些经典模型的参数量如下:

更详细的解读(包括具体的模型参数等),以及对Transformer未来趋势的预测,可以看整篇论文。

作者介绍

论文一作Yi Tay,硕士和博士均毕业于新加坡国立大学计算机科学。

目前,Yi Tay在Google AI从事研究工作,主要方向是自然语言处理和机器学习。

来源:https://mbd.baidu.com/newspage/data/landingshare?context=%7B%22nid%22%3A%22news_9852260230902047315%22%2C%22sourceFrom%22%3A%22bjh%22%7D&isBdboxFrom=1&pageType=1&rs=3838041419&ruk=k8mkEzpp4L0tIQ-VpvUi2Q


智能推荐

Scaling Vision Transformers

本文改进了ViT的架构和训练,减少了内存消耗并提高了模型的准确性!最终成功训练了一个具有20亿参数的ViT模型:ViT-G,在ImageNet上达到了90.45%的 top-1准确率。 注1:文末附【视觉Transformer】交流群 想看更多CVPR 2021论文和开源项目可以点击: CVPR2021-Papers-with-Code ​ ViT-G Scaling Vision Transfo...

AWR文件的生成

1、数据库安装路径下,找到如下图这个awrrpt.sql 文件。 在plsql命令窗口,以sys管理员身份登录下,执行这个sql文件。 2、执行之后,弹出提示框,输入html后点击ok,即导出的文件为html格式 3、接下来弹出提示框如下,这里输入的数值就是 需要生成几天的报告数据,可以根据实际情况来调整,比如现在是12月22号,你要获取20号的数据,这里要填3(这样就会加载20号至22号3天的数...

Qt项目的发布(方法一)

文章目录 一、准备 二、建立空目录 三、拷贝缺失的库文件 四、发给别人不能运行的情况 五、通过工具加载库文件 1、配置环境变量 2、加载完成后的问题 想直接快速发布的可直接从目录五开始看,前面(1-3)是我自己的笔记(也可以算是一种发布方法,也是最慢的发布方法)。 一、准备 要发布的时候我们将自己的项目使用Release模式编译: 二、建立空目录 我们可以在桌面或者其他哪(你自己定)建立一个空目录...

【转载】数据结构之图(存储结构、遍历)

转载自:http://blog.chinaunix.net/uid-26548237-id-3483650.html 一、图的存储结构 1.1 邻接矩阵     图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。     设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:  ...

Drawable系列之-BitmapDrawable

这几乎是最简单的Drawable了,它表示的就是一张图片。在实际开发中,我吗可以直接引用原始图片即可,但是也可以通过XML的方式来描述它,通过XML来描述的BitmapDrawable可以设置更多的效果,如下所示: 下面是它的各个属性的含义。 android:src 这个很简单,就是图片的资源id。 android:antialias 是否开启图片抗锯齿功能。开启会让图片变得平滑,同时也会在一定程...

猜你喜欢

allegro学习之Database has a non-recoverable corruption. Contact Cadence customer support.该如何解决

尝试的解决方法:1.扩大 画布面积:未解决 2.dbdoctor :未解决 3.重新生成psm,以及device,未解决 4.如果以上都未解决,就重新画下那个封装以及焊盘,重新生成psm,以及device,我是通过这种方法解决的...

windows7安装Bitvise开启SSH服务

Windows7安装Bitvise开启ssh服务 Windows7安装Bitvise开启ssh服务 安装Bitvise SSH Server 配置Bitvise SSH Server 使用xshell连接ssh服务验证 结语 by:铁乐猫 在Liunx和windows10上配置SSH服务是一件很容易的事,毕竟系统己经自带了ssh的服务功能。 不过在windows7上可不容易,也有几种实现的方案,今...

永远不要忘记数据库测试 数据库测试的重要性和测试要点说明

为什么80%的码农都做不了架构师?>>>    译者导读:本文分为三部分,第一部分是第1节,即说明“对数据库测试的根本误解”;第二部分从第2节至倒数第4节,详述“数据库测试测什么”的问题;第三部分是最后3节,引出“数据库测试怎么测”的问题,提出自动部署、自动化测试、持续集成的思路及工具。另...

jquery 实现过滤器(转载)

本文转载自:http://abruzzi.iteye.com/blog/519288 公司产品的一个新功能中涉及到一个过滤器:通过关键字快速的对结果集进行过滤,获得比较少的结果,方便用户选择。在网上找了找,有很多jQuery的插件,要么就是auto complete, 要么就是没有高亮的quick search,都不是很适合我们的场景,于是就自己实现了一个。用起来倒是还过得去,呵呵。  ...

2019.03.27开发遇到的细碎小问题:mybatis等

问题一:将Bigdecimal取三位小数之后传入数据库,始终都变成了整数,最后发现忘记了再数据库中设置小数点后位数   问题二:mybatis传参的问题 2.1 解决办法1 在接口参数里加上mybatis中的@param注解 2.2 解决办法2 在xml的if里用”_parameter” 代表参数 问题三:js文件中 将某个变量名和方法名写成了一样的, 怎么调用都...

问答精选

list.append(something) unicode - ascii

code result I don't want to convert unicode. How can I stay in korean language I wish to print like this Your code from the question produces: This output is different from what you have shown in the ...

Create database schema from WSDL file

right now im accessing a soap web service using generated code from a wsdl file via wsimport the objects generated by wsimport are quite complex my goal is to persist these complex objects into a data...

MiniProfiler with multilayered WCF services

I have a set of WCF services that call each other I would like to use the MiniProfiler to profiles the complete stack, right the way down to the MVC site that uses them. It looks something like this: ...

Using accented symbols on VIM

Few hours ago I changed from my old Debian box to a new one, when I did that I bring with me the .vimrc I use on the old unit. On the old one I can use : áéóçã&ntild...

Prepopulating grails app mysql database in cloud foundry

I need to prepopulate mysql database which is the backend for a Grails Application. This is working fine in local and I need to move to cloud foundry. I used to prepopulate mysql database in local by ...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答