当前位置: 首页 > 科技观察

Transformer模型有多少种变体?复旦大学邱锡鹏教授团队全面回顾

时间:2023-03-21 17:19:56 科技观察

自2017年6月谷歌发布论文《Attention is All You Need》以来,Transformer架构给整个NLP领域带来了巨大的惊喜。Transformer诞生四年来,已经成为自然语言处理领域的主流模型,基于Transformer的预训练语言模型成为主流。随着时间的推移,Transformer也开始跨界到其他领域。得益于深度学习的发展,Transformer在计算机视觉(CV)、音频处理等多个人工智能领域大放异彩,并成功吸引了学术界和产业界研究人员的关注。迄今为止,研究人员已经提出了大量的异构Transformer变体(akaX-former),但仍然缺乏对Transformer变体进行系统全面的文献综述。去年谷歌发布的论文《Efficient Transformers: A Survey》回顾了高效的Transformer架构,但主要侧重于attention模块的效率,对Transformer变体的分类比较模糊。近日,复旦大学计算机科学与技术学院邱锡鹏教授团队审核了形形色色的X-former。首先,简要介绍了VanillaTransformer,并提出了X-former的新分类法。然后从架构修改、预训练和应用的角度介绍了各种X-former。最后,概述了未来研究的一些潜在方向。论文链接:https://arxiv.org/pdf/2106.04554.pdf回顾Transformer的发展Transformer最初是作为机器翻译的sequence-to-sequence模型提出的,后来的研究表明基于Transformer的预训练模型(PTM)在在各项任务中表现出色。因此,Transformer成为NLP领域的首选架构,尤其是PTM。除了语言相关的应用,Transformer还被用于CV、音频处理,甚至化学和生命科学领域。由于它的成功,研究人员在过去几年提出了各种Transformer变体(又名X-former)。这些X-formers主要从以下三个不同的角度来提高原始VanillaTransformer模型的效率。应用Transformer的一个关键挑战是它在处理长序列时效率低下,这主要是由于自注意力模块的计算和内存复杂性。改进的方法包括轻量级注意力(例如稀疏注意力变体)和分而治之的方法(例如循环和分层机制);模型泛化。由于Transformer是一种灵活的架构,并且几乎没有对输入数据的结构偏差做出假设,因此很难在小规模数据上进行训练。改进方法包括引入结构偏差或正则化、对大规模未标记数据进行预训练等;模型适应。这一系列工作旨在使Transformers适应特定的下游任务和应用程序。虽然X-formers可以根据上述观点进行组织,但许多现有的X-formers可能会解决一个或几个问题。例如,稀疏注意力变体不仅降低了计算复杂度,而且还在输入数据上引入了结构先验,以缓解小数据集上的过拟合问题。因此,比较有条理的主要是按照X-former对VanillaTransformer的改进方式来分类:架构修改、预训练和应用。考虑到本次综述的受众可能来自不同领域,研究人员主要关注通用架构变体,仅在预训练和应用方面简单讨论特定变体。VanillaTransformer架构VanillaTransformer是一个序列到序列模型,由一个编码器和一个解码器组成,两个堆栈都是相同的块。每个编码器块主要由一个多头自注意力模块和一个位置前馈网络(FFN)组成。为了构建更深层次的模型,在每个模块周围使用残差连接,然后是层归一化模块。与编码器块相比,解码器块在多头自注意力模块和位置方面的FFN之间额外插入了一个交叉注意力模块。此外,解码器中的自注意力模块用于防止每个位置影响后续位置。VanillaTransformer的整体架构如下图所示:UsageTransformer架构通常有三种不同的使用方式:使用encoder-decoder,通常用于sequence-to-sequence建模,比如神经机器翻译;仅使用编码器,编码器的输出被用作输入序列的表示,通常用于分类或序列标记问题;仅使用解码器,其中也删除了编码器-解码器交叉注意模块,通常用于序列生成,例如语言建模。Transformer变体的分类迄今为止,该领域的研究人员从架构修改类型、预训练方法和应用三个方面提出了基于vanillaTransformer的各种变体模型。下图展示了这些变体模型的类别:而下图展示了研究人员在这篇论文中的分类以及一些具有代表性的模型:AttentionmoduleSelf-attention在Transformer中非常重要,但在实际应用中存在两个挑战:复杂性。self-attention的复杂度是O(T^2·D)。因此,注意力模块在处理长序列时会遇到瓶颈;结构先验。Self-attention不假设输入有任何结构偏差,甚至指令信息也需要从训练数据中学习。因此,未经预训练的Transformer通常容易在中小型数据集上过度拟合。Attention机制的改进可以分为以下几个方向:Sparseattention。在注意力机制中引入稀疏偏差降低了复杂性;线性化注意力。展开注意力矩阵和内核特征图,然后以相反的顺序计算注意力以实现线性复杂度;原型设计和内存压缩。这些方法减少了查询或键值内存对的数量,以减少注意力矩阵的大小;低阶自注意力。这一行工作捕获了self-Attention的低级属性;注意和先验。本研究探索使用先验注意力分布来补充或替代标准注意力;完善多头机制。这一系列研究探索了不同的替代看涨机制。稀疏注意力在标准的自注意力机制中,每个标记都需要关注所有其他标记。然而,据观察,对于训练有素的Transformer,学习到的注意力矩阵A在大多数数据点上通常非常稀疏。因此,可以通过结合结构偏差来限制每个查询参加的查询密钥对的数量来降低计算复杂性。从另一个角度来看,标准注意力可以看作是一个完整的二分图,其中每个查询从所有内存节点接收信息并更新其表示。而稀疏注意力可以看作是一个稀疏图,其中去除了节点之间的一些连接。根据确定稀疏连接的指标,研究人员将这些方法分为两类:基于位置和基于内容的稀疏注意力。Atomicsparseattention基于位置的稀疏注意力的一种是原子稀疏注意力,主要有下图所示的五种模式。彩色方块代表计算出的注意力分数,空白方块代表放弃的注意力分数。复合稀疏注意力另一种基于位置的稀疏注意力是复合稀疏注意力,下图展示了它的五种主要模式,其中红色框表示序列边界。ExtendedSparsityAttention除了上述模式外,一些现有研究还探索了特定数据类型的扩展稀疏模式。下图(a)显示了全局注意力扩展的抽象视图,其中全局节点是分层组织的,任何一对标记都与二叉树中的一条路径相连。红色框表示查询位置,橙色节点/方块表示查询关注对应的token。还有一些视觉数据的扩展。ImageTransformer探索了两种类型的注意力:按光栅扫描顺序展平图像像素,然后应用块局部稀疏注意力;2Dblock-localattention,其中queryblocks和memoryblocks直接排列在一个2Dboard中,如上图(b)所示。视觉数据中稀疏模式的另一个例子,AxialTransformer在图像的每个轴上应用独立的注意力模块。每个注意模块混合沿一个轴的信息,同时保持另一个轴的信息独立,如上图(c)所示。这可以理解为按光栅扫描顺序在水平和垂直方向上展平图像像素,然后分别对图像宽度和高度间隙应用跨步注意力。Linearizedattention下图展示了standardself-attention和linearizedlinear-attention的复杂度差异。查询原型和内存压缩除了使用稀疏注意力或基于内核的线性化注意力之外,还可以通过减少查询或键值对的数量来降低注意力复杂度,这导致查询原型和内存压缩方法,分别。在查询原型设计中,几个查询原型是计算注意力分布的主要来源。该模型要么将分布复制到所表示查询的位置,要么用离散的均匀分布填充这些位置。下图(a)说明了查询原型的计算流程。除了通过queryprototype减少query的数量,在应用attention机制之前,还可以通过减少key-value对的数量(压缩key-value内存)来降低复杂度,如下图(b)所示。先前的注意力机制通常将期望值输出为向量的加权和,其中权重是注意力在值上的分布。传统上,分布是从输入生成的,例如VanillaTransformer中的softmax(QK?)。一般来说,注意力分布也可以来自其他来源,即先验。先验注意力分布可以补充或替代输入生成的分布。这种Attention的表示可以抽象为具有先验注意力,如下图所示。在大多数情况下,两个注意力分布的融合可以通过在应用softmax之前计算对应于先验注意力和生成注意力的分数的加权和来完成。改进的多头机制多头注意力的吸引力在于能够共同关注来自不同位置的不同表示子空间的信息。但是,没有机制可以保证不同的注意力头确实捕获了不同的特征。如下图所示,多头机制下有3种spanmaskingfunctions()。横轴代表距离,纵轴代表掩码值。其他模块级修改位置的重要性验证卷积网络和循环网络不是置换等变是很简单的。但是Transformer中的self-attention模块和positionfeed-forward层都是permutationequivariant,这在建模问题的时候可能会出现问题。例如,在对文本序列进行建模时,单词的顺序很重要,因此正确编码单词在Transformer架构中的位置至关重要。因此,需要一种额外的机制来将位置信息注入到Transformer中。一种常见的设计是首先使用向量来表示位置信息,然后将向量作为附加输入注入到模型中。LayerNormalizationLayerNormalization(LN)和残差连接被认为是一种稳定深度网络训练(例如缓解不适定梯度和模型退化)的机制。在VanillaTransformer中,LN层位于残差块之间,称为post-LN。后来的Transformer实现把LN层放在了attention或FFN之前的残差连接里面,在最后一层之后还有一个额外的LN来控制最终输出的大小,pre-LN。Pre-LN已被许多后续研究和实施所采用。pre-LN和post-LN的区别如下图所示。虽然FFN在位置方面很简单,但位置前馈网络(FFN)层对于Transformer取得良好性能至关重要。研究人员观察到,简单地堆叠self-attention模块会导致rankcollapse问题和tokenuniformityinductivebias,而前馈层是缓解这一问题的重要组成部分之一。本节探讨研究人员对FFN模块的修改。ArchitecturalLevelModifications在本章中,研究人员在架构级别上介绍了X-former变体模型。LightweightTransformer除了在模块层面努力减少计算开销外,该领域还出现了一些在更高层次上进行修改的轻量级Transformer模型,例如LiteTransformer、FunnelTransformer和DeLightT。加强跨块连通性在深度Transformer编码器-解码器模型中,解码器中的交叉注意块仅利用编码器的最终输出,因此错误信号必须沿着编码器的深度遍历。这使得变形金刚更容易受到梯度消失等优化问题的影响。TransparentAttention[8]在每个交叉注意模块中使用跨所有编码器层(包括嵌入层)的编码器表示的加权和。对于第j个编码器块,交叉注意力应该表示如下:自适应计算时间与大多数神经模型一样,VanillaTransformer对每个输入使用固定的(学习的)计算过程。一个有趣且有前途的修改是根据输入调节计算时间,即在Transformer模型中引入自适应计算时间(ACT)。如下图12(a)所示,UniversalTransformer(UT)结合了recurrence-over-depth机制,使用深度共享的模块迭代改进所有符号的表示;图12(b),ConditionalComputationTransformer(CCT)为每个self-attention和feed-forward层添加一个门控模块来决定是否跳过当前层;在图12(c)中,类似于UT中使用的动态关闭机制,有一行工作专门调整每个输入的层数,以达到良好的速度-精度权衡,称为“提前退出机制””。Transformerself-attention使用“分而治之”策略的序列长度的二次复杂度会显着限制一些下游任务的性能。研究人员确定了两种具有代表性的方法,即循环和分层Transformer,如下图13所示。在循环Transformer中,维护缓存内存以合并历史信息。当处理一段文本时,网络从缓存中读取作为附加输入。处理完成后,网络通过简单地复制隐藏状态或使用更复杂的机制来写入内存。分层转换器将输入分层分解为更细粒度的元素。低级特征首先被送入Transformer编码器,产生输出表示,然后使用池化或其他操作聚合以形成高级特征,然后通过高级Transformer进行处理。