【大模型系列篇】Transformers综述--邱锡鹏

论文标题:A Survey of Transformers

论文作者:Tianyang Lin, Yuxin Wang, Xiangyang Liu, Xipeng Qiu

论文链接:https://arxiv.org/abs/2106.04554

Transformer 在许多人工智能领域(如自然语言处理、计算机视觉和音频处理)中取得了巨大成功,它很自然地引起了学术界和工业界研究人员的广泛兴趣。到目前为止,已经提出了各种 Transformer 变体(即 X-formers),然而,关于这些 Transformer 变体的系统性和综合性文献综述仍然缺失。在本次综述中,我们对各种 X-formers 进行了全面的回顾。首先简要介绍了原始的 Transformer,然后提出了一种新的 X-formers 分类法。接下来,我们从三个角度介绍了各种 X-formers:结构修改、预训练和应用。最后,概述了未来研究的一些潜在方向。

1、介绍

        Transformer [137] 是一种著名的深度学习模型,已在自然语言处理(NLP)、计算机视觉(CV)和语音处理等多个领域得到广泛应用。Transformer 最初被提出作为一种序列到序列模型 [130] 用于机器翻译。后来的研究表明,基于 Transformer 的预训练模型(PTMs)[100] 可以在各种任务上实现最先进的性能。因此,Transformer 已成为 NLP 尤其是 PTMs 的首选架构。除了语言相关的应用,Transformer 还被应用于计算机视觉 [13, 33, 94]、音频处理 [15, 31, 41],甚至其他学科,如化学 [114] 和生命科学 [109]。

        由于 Transformer 的成功,近年来提出了各种 Transformer 变体(即 X-formers)。这些 X-formers 从不同的角度改进了原始的 Transformer。

(1) 模型效率:应用 Transformer 的一个关键挑战是其在处理长序列时的低效性,主要是由于自注意力模块的计算和内存复杂性。改进方法包括轻量级注意力(例如稀疏注意力变体)和分治法(例如递归和分层机制)。

(2) 模型泛化:由于 Transformer 是一种灵活的架构,并且对输入数据的结构偏差几乎没有假设,因此在小规模数据上很难训练。改进方法包括引入结构偏差或正则化、在大规模未标注数据上进行预训练等。

(3) 模型适应:这条线的工作旨在使Transformer适应特定的下游任务和应用。

根据以上3个方面,改进原版 Transformer 的方式提出新的分类法,结构修改,预训练和应用

第2节介绍了Transformer的架构和关键部件。

第3节阐明了Transformer变体的分类。

第4、5节回顾了模块级的修改,包括注意力模块、位置编码、层归一化和前馈层。

第6节回顾了结构层面的变体。

第7节介绍了一些有代表性的基于Transformer的预训练网络(PTMs)。

第8节介绍了Transformer在各个不同领域的应用。

第9节讨论了研究人员可能会感兴趣的 Transformer 的一些方面,并对本文进行了总结。

2、背景

2.1 原始 Transformer

原始的 Transformer [137] 是一种序列到序列模型,由编码器和解码器组成,每个部分都是由 L 个相同的模块堆叠而成。每个编码器模块主要由一个多头自注意力模块(multi-head self-attention)和一个逐位置的前馈神经网络(FFN)组成。为了构建更深层次的模型,在每个模块周围使用了残差连接 [49],随后是层归一化 [4] 模块。与编码器模块相比,解码器模块在多头自注意力模块和逐位置的前馈神经网络之间额外插入了交叉注意力模块(cross-attention modules)。此外,解码器中的自注意力模块被调整为防止每个位置关注后续位置。原始 Transformer 的整体架构如图 1 所示。

图 1. 原始 Transformer 架构概览

在接下来的小节中,我们将介绍原始 Transformer 的关键模块。

2.1.1.注意力模块

Transformer 采用带有查询-键-值 (QKV) 模型的注意力机制。给定查询矩阵 Q \in \mathbb{R}^{N \times D_k}、键矩阵K \in \mathbb{R}^{M \times D_k}和值矩阵 V \in \mathbb{R}^{M \times D_v}​,Transformer 使用的缩放点积注意力由以下公式给出:

\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{D_k}}\right)V = AV

其中,N和 M 分别表示查询和键(或值)的长度;D_k和 D_v分别表示键(或查询)和值的维度;A = \text{softmax}\left(\frac{QK^\top}{\sqrt{D_k}}\right)通常被称为注意力矩阵;softmax 函数按行应用。查询和键的点积除以 \sqrt{D_k}以减轻 softmax 函数的梯度消失问题。

Transformer 并不是简单地应用单一的注意力函数,而是使用多头注意力,其中原始的D_m维查询、键和值分别被投影到 D_kD_k和 D_v 维度,并且有 H组不同的投影。对于每组投影后的查询、键和值,使用公式 (1) 计算出带有注意力的输出。然后,模型将所有输出连接起来,并将其投影回D_m维表示:

\text{MultiHeadAttn}(Q, K, V) = \text{Concat}(\text{head}_1, \cdots, \text{head}_H)W_O,     

\text where\ {head}_i = \text{Attention}(QW_{Q_i}, KW_{K_i}, VW_{V_i})。                

在 Transformer 中,根据查询和键值对的来源,有三种类型的注意力:

  • 自注意力:在 Transformer 编码器中,我们设置 Q = K = V = X在公式 (2) 中,其中 X 是前一层的输出。

  • 掩蔽自注意力:在 Transformer 解码器中,自注意力被限制为每个位置的查询只能关注到该位置及之前的所有键值对。为了实现并行训练,通常通过对未归一化的注意力矩阵 \hat{A} = \exp\left(\frac{QK^\top}{\sqrt{D_k}}\right)应用掩蔽函数来实现,其中非法的位置通过设置\hat{A}_{ij} = -\infty来掩蔽掉i<j的情况。这种自注意力通常称为自回归或因果注意力。

  • 交叉注意力:查询来自前一(解码器)层的输出,而键和值则使用编码器的输出进行投影。

2.1.2 逐位置前馈网络 (FFN)

逐位置前馈网络(FFN)[3]是一个全连接的前馈模块,它对每个位置独立且相同地进行操作:

\text{FFN}(H') = \text{ReLU}(H'W_1 + b_1)W_2 + b_2

其中,H′是前一层的输出,W_1 \in \mathbb{R}^{D_m \times D_f}W_2 \in \mathbb{R}^{D_f \times D_m}b_1 \in \mathbb{R}^{D_f}b_2 \in \mathbb{R}^{D_m}是可训练参数。通常,FFN 的中间维度D_f设置为大于D_m​。

2.1.3 残差连接和归一化

为了构建深层模型,Transformer 在每个模块周围使用残差连接 [49],并随后进行层归一化 [4]。例如,每个 Transformer 编码器块可以写作:

H' = \text{LayerNorm}(\text{SelfAttention}(X) + X)

H = \text{LayerNorm}(\text{FFN}(H') + H')

其中,SelfAttention(⋅) 表示自注意力模块,LayerNorm(⋅) 表示层归一化操作。

2.1.4 位置编码

由于 Transformer 不引入递归或卷积,它对位置信息(特别是对于编码器)并不感知。因此,需要额外的位置信息表示(第 5.1 节中有详细讨论)来建模token的顺序。

2.2 模型用途

通常,Transformer 架构可以以三种不同的方式使用:

  • 编码器-解码器:使用完整的 Transformer 架构,如第 2.1 节所介绍的。这通常用于序列到序列的建模(例如神经机器翻译)。
  • 仅编码器:只使用编码器,编码器的输出被用作输入序列的表示。这通常用于分类或序列标注问题。
  • 仅解码器:只使用解码器,并且移除了编码器-解码器的交叉注意力模块。这通常用于序列生成,例如语言模型。
2.3 模型分析

为了说明 Transformer 的计算时间和参数需求,我们在表 1 中分析了 Transformer 的两个核心组件(即自注意力模块和逐位置的前馈网络 (FFN))。我们假设模型的隐藏维度 D_m为 D,输入序列的长度为 T。FFN 的中间维度设为 4D,键和值的维度设为 D/H,如 Vaswani 等人 [137] 所述。

当输入序列较短时,隐藏维度 D主导了自注意力和逐位置的 FFN 的复杂度。因此,Transformer 的瓶颈在于 FFN。然而,随着输入序列长度 T的增加,这些模块的复杂度逐渐被序列长度 ​​​​​​​T所主导,在这种情况下,自注意力成为 Transformer 的瓶颈。此外,自注意力的计算需要存储一个T*T的注意力分布矩阵,这使得 Transformer 在长序列场景中的计算变得不可行(例如长文本文档和高分辨率图像的像素级建模)。因此可以想到,提高 Transformer 效率的目标通常包括使自注意力对长序列兼容性,以及在一般设置中提高逐位置 FFN 的计算和参数效率。 

2.4 比较transformer和其他网络类型
2.4.1 自注意力分析

作为 Transformer 的核心部分,自注意力具有处理可变长度输入的灵活机制。它可以被理解为一个全连接层,其权重是由输入之间的成对关系动态生成的。表 2 将自注意力与三种常用层类型在复杂度、顺序操作和最大路径长度方面进行了比较。我们总结了自注意力的优势如下:

  1. 自注意力具有与全连接层相同的最大路径长度,使其适用于长距离依赖建模。与全连接层相比,它在处理可变长度输入时更具参数效率和灵活性。
  2. 由于卷积层的感受野有限,通常需要堆叠一个深层网络以获得全局感受野。另一方面,恒定的最大路径长度使自注意力能够用恒定层数建模长距离依赖关系。
  3. 恒定的顺序操作和最大路径长度使自注意力比循环层更易于并行化,并且在长距离建模方面表现更好。

表2: 不同层类型的每层复杂性、最小序列运算数和最大路径长度。 T是序列长度, D是表示维度, K是卷积的核大小[136]。 

2.4.2 关于归纳偏置

Transformer 通常与卷积网络和循环网络进行比较。卷积网络以其共享的局部卷积核函数所引入的平移不变性和局部性归纳偏置而闻名。同样,循环网络通过其马尔可夫结构 [9] 具备了时间不变性和局部性的归纳偏置。另一方面,Transformer 架构对数据的结构信息几乎没有做出假设。这使得 Transformer 成为一种通用且灵活的架构。然而,缺乏结构偏置也使得 Transformer 在处理小规模数据时容易过拟合。

另一种密切相关的网络类型是带有消息传递的图神经网络(GNNs)[149]。Transformer 可以被视为定义在一个完全有向图(带有自循环)上的 GNN,其中每个输入是图中的一个节点。Transformer 和 GNNs 之间的关键区别在于,Transformer 不引入关于输入数据结构的先验知识——在 Transformer 中的消息传递过程完全依赖于对内容的相似性度量。

3、Transformer 的分类

迄今为止,已经基于原始 Transformer 提出了多种模型,这些模型从三个角度进行分类:结构修改类型、预训练方法和应用。图 2 展示了我们对 Transformer 变体的分类。

图 2. Transformer 变体的分类.

图 3 展示了我们的分类法和一些具有代表性的模型。在本次综述中,我们主要关注架构修改相关的工作。由于注意力模块是 Transformer 的关键组件,我们在第 4 节中专门描述了与注意力相关的变体,并在第 5 节介绍了其他模块级别的变体。然后,第 6 节描述了其他架构级别的变体。最后,我们在第 7 节简要回顾了预训练的工作,并在第 8 节讨论了应用领域。在后两类工作的综述中,有一些综合性文献综述,例如关于预训练模型(PTMs)[100] 和视觉 Transformers [47, 64]。

图 3. Transformer 的分类法

4、注意力机制

自注意力在 Transformer 中起着重要作用,但在实际应用中存在两个挑战。

  1. 复杂度:如第 2.3 节所讨论,自注意力的复杂度为 O(T^2\bullet D)。因此,在处理长序列时,注意力模块成为瓶颈。

  2. 结构性先验:自注意力不对输入假设任何结构偏置。即使是顺序信息也需要从训练数据中学习。因此,Transformer(没有预训练)通常容易在小规模或中等规模的数据上发生过拟合。

对注意力机制的改进可以分为几个方向。

  1. 稀疏注意力:这一方向的工作在注意力机制中引入了稀疏性偏置,从而减少了复杂度。

  2. 线性化注意力:这一方向的工作通过核特征映射解耦注意力矩阵。然后以反向顺序计算注意力,以实现线性复杂度。

  3. 原型和内存压缩:这类方法减少查询或键值内存对的数量,以减小注意力矩阵的大小。

  4. 低秩自注意力:这一方向的工作捕捉自注意力的低秩特性。

  5. 带有先验的注意力:这一研究方向探索了用先验注意力分布来补充或替代标准注意力。

  6. 改进的多头机制:这一研究方向探索了不同的多头机制替代方案。

我们将在本节其余部分详细描述这些注意力变体。

4.1 稀疏的注意力

在标准自注意力机制中,每个令牌需要关注所有其他令牌。然而,观察到对于训练好的 Transformer,学习到的注意力矩阵 A 在大多数数据点上通常非常稀疏 [17]。因此,通过引入结构偏置以限制每个查询关注的查询-键对的数量,可以减少计算复杂度。在这种限制下,我们根据预定义的模式计算查询-键对的相似性得分:

其中,\hat{A}是未归一化的注意力矩阵。在实现中,通常不会在内存中存储-\infty项,以减少内存占用。

从另一个角度来看,标准注意力可以视为一个完全二分图,其中每个查询从所有记忆节点接收信息并更新其表示。稀疏注意力可以被视为一个稀疏图,其中一些节点之间的连接被移除。

基于确定稀疏连接的度量,我们将这些方法分为两类:基于位置的稀疏注意力和基于内容的稀疏注意力。

4.1.1.基于位置的稀疏注意力

在基于位置的稀疏注意力中,注意力矩阵根据一些预定义的模式被限制。虽然这些稀疏模式在不同的形式上有所不同,但我们发现其中一些可以被分解为一些原子稀疏模式。

我们首先识别一些原子稀疏模式,然后描述这些模式是如何在一些现有工作中组合的。最后,我们介绍一些针对特定数据类型的扩展稀疏模式。

4.1.1.1 原子稀疏注意力

原子稀疏注意力模式主要有五种类型,如图4所示。


图 4.一些具有代表性的原子稀疏注意力模式。 彩色方块表示计算相应的注意力分数,空白方块表示丢弃注意力分数。
  1. 全局注意力 (Global Attention):为了缓解稀疏注意力中建模长距离依赖关系能力的退化,可以添加一些全局节点作为节点间信息传播的枢纽。这些全局节点可以关注序列中的所有节点,而整个序列也可以关注这些全局节点,如图 4(a) 所示。

  2. 带状注意力 (Band Attention)(又称为滑动窗口注意力或局部注意力):由于大多数数据具有较强的局部性特征,自然地将每个查询限制为只关注其邻近节点是一种有效的方式。这类稀疏模式中的一种广泛采用的模式是带状注意力,其中注意力矩阵是一个带状矩阵,如图 4(b) 所示。

  3. 膨胀注意力 (Dilated Attention):类似于膨胀卷积神经网络 [134],可以通过使用膨胀窗口(膨胀值 w_d \geq 1)来增加带状注意力的感受野,而不会增加计算复杂度,如图 4(c) 所示。这可以轻松扩展到步长注意力(strided attention),其中窗口大小不受限制,但膨胀值 w_d 设置为较大值。

  4. 随机注意力 (Random Attention):为了增加非局部交互的能力,为每个查询随机采样少量边缘,如图 4(d) 所示。这基于这样的观察:随机图(例如 Erdős–Rényi 随机图)可以具有类似于完全图的谱特性,这导致在图上的随机游走具有较快的混合时间。

  5. 块局部注意力 (Block Local Attention):这类注意力将输入序列划分为几个不重叠的查询块,每个块与一个局部记忆块相关联。查询块中的所有查询只关注相应记忆块中的键。如图 4(e) 所示,这种情况下记忆块通常与其对应的查询块相同。

4.1.1.2 复合稀疏注意力

现有的稀疏注意力通常由多个上述原子模式组合而成。图5展示了一些代表性的复合稀疏注意力模式。

图 5.一些代表性的复合稀疏注意力模式。 红色框表示序列边界。

Star-Transformer [43] 使用了带状注意力和全局注意力的组合。具体来说,Star-Transformer 仅包括一个全局节点和带宽为 3 的带状注意力,其中任何非相邻的节点通过共享的全局节点连接,而相邻的节点则直接相连。这种稀疏模式在节点之间形成了星形图。Longformer [10] 结合了带状注意力和内部全局节点注意力。全局节点被选择为用于分类的 [CLS] 标记以及用于问答任务的所有问题标记。他们还将一些带状注意力头替换为扩张窗口注意力,以在不增加计算量的情况下增加感受野。作为与 Longformer [10] 并行的工作,Extended Transformer Construction (ETC) [1] 结合了带状注意力和外部全局节点注意力。ETC 还包括一个掩码机制来处理结构化输入,并适应对比预测编码 (CPC) [135] 进行预训练。除了带状和全局注意力,BigBird [163] 还使用了额外的随机注意力来近似全局注意力。他们的理论分析还表明,使用稀疏编码器和稀疏解码器可以模拟任何图灵机,这解释了这些稀疏注意力模型的成功。

Sparse Transformer [17] 使用了分解的注意力,其中针对不同类型的数据设计了不同的稀疏模式。对于具有周期性结构的数据(例如图像),它使用了带状注意力和步幅注意力的组合。而对于没有周期性结构的数据(例如文本),它使用了块局部注意力与全局注意力的组合,其中全局节点来自于输入序列中的固定位置。

4.1.1.3 扩展稀疏注意力

除了上述模式外,一些现有研究还探讨了针对特定数据类型的扩展稀疏模式。

对于文本数据,BP-Transformer [158] 构建了一棵二叉树,其中所有的token都是叶节点,内部节点是包含多个标记的跨度节点。图中的边被构造为每个叶节点连接到其邻近的叶节点和包含更远距离标记的更高层次跨度节点。这种方法可以被视为全局注意力的扩展,其中全局节点以层级方式组织,任何两个标记都通过二叉树中的路径连接。该方法的抽象视图如图6(a)所示。

对于视觉数据,也有一些扩展。例如,Image Transformer [94] 探索了两种类型的注意力:(1) 将图像像素按栅格扫描顺序展平,然后应用块局部稀疏注意力。(2) 2D 块局部注意力,其中查询块和记忆块直接在 2D 平面上排列,如图6(b)所示。作为另一种视觉数据上的稀疏模式示例,Axial Transformer [54] 对图像的每个轴应用独立的注意力模块。每个注意力模块在一个轴上混合信息,同时保持在另一个轴上的信息独立,如图6(c)所示。这可以理解为将图像像素按栅格扫描顺序水平和垂直展平,然后分别应用步幅注意力,步幅的间隔为图像的宽度和高度。

图 6.其他类型的稀疏关注。 红色框表示查询位置,橙色节点/方块表示查询关注相应的标记。
4.1.2.基于内容驱动的稀疏注意力

另一条研究路径是基于输入内容创建稀疏图,即稀疏连接取决于输入内容。

构建基于内容的稀疏图的一种直接方法是选择那些与给定查询具有较大相似度的键。为了高效构建稀疏图,可以借助最大内积搜索(Maximum Inner Product Search, MIPS)问题,即尝试在不计算所有内积项的情况下找到与查询具有最大点积的键。

Routing Transformer [111] 使用 k-means 聚类将查询\{q_i\}_{i=1}^T和键\{k_i\}_{i=1}^T聚类到相同的质心向量集合 \{\mu _i\}_{i=1}^k 每个查询仅关注属于同一簇的键。在训练过程中,质心向量通过分配给它的向量的指数移动平均值更新,除以质心计数的指数移动平均值:

\tilde{\mu} \leftarrow \lambda \tilde{\mu} + (1 - \lambda) \left( \sum_{i: \mu(q_i) = \mu} q_i + \sum_{j: \mu(k_j) = \mu} k_j \right)
c_{\mu} \leftarrow \lambda c_{\mu} + (1 - \lambda) |\mu|

\mu \leftarrow \frac{\tilde{\mu}}{c_{\mu}}

其中 |\mu| 表示当前在簇 \mu 中的向量数量,\lambda \in (0, 1) 是一个超参数。设 P_i​ 表示第 i个查询关注的键的索引集合,在 Routing Transformer 中定义为:

P_i = \{ j : \mu(q_i) = \mu(k_j) \}

Reformer [66] 使用局部敏感哈希(Locality-Sensitive Hashing, LSH)来选择每个查询的键值对。所提出的 LSH 注意力允许每个 token 仅关注同一哈希桶中的 tokens。基本思想是使用 LSH 函数将查询和键哈希到若干桶中,相似的项具有较高概率落入同一桶中。具体地,他们使用随机矩阵方法来实现 LSH 函数。设 bbb 为桶的数量,给定一个大小为[D_k, b/2] 的随机矩阵 RRR,LSH 函数计算如下:

h(x) = \text{arg max}([xR; -xR])

LSH 注意力允许第 i个查询仅关注与其索引在相同哈希桶中的键值对:

P_i = \{ j : h(q_i) = h(k_j) \}

Sparse Adaptive Connection (SAC) [78] 将输入序列视为一个图,并通过自适应稀疏连接学习构建注意力边以提高任务特定的性能。SAC 使用 LSTM 边预测器在 tokens 之间构建边。由于没有边的真实值,边预测器通过强化学习进行训练。

Sparse Sinkhorn Attention [132] 首先将查询和键分成若干块,并将一个键块分配给每个查询块。每个查询仅允许关注分配给其对应查询块的键块中的键。键块的分配由排序网络控制,使用 Sinkhorn 归一化生成一个双随机矩阵作为表示分配的置换矩阵。他们将这种基于内容的块稀疏注意力与第 4.1.1 节中介绍的块局部注意力相结合,以增强模型建模局部性的能力。

4.2.线性化注意力

假设 Q, K, V \in \mathbb{R}^{T \times D},计算 softmax(QK^\top)V 的复杂度是序列长度 T 的平方级别,如图 7(a) 所示。如果softmax(QK^\top) 可以被解耦为 Q'K'^\top,我们可以按相反的顺序计算 Q'(K'^\top V),这将导致复杂度降为 O(T) [12]。

\hat{A} = \exp(QK^\top)表示未归一化的注意力矩阵,其中 \exp(\cdot)是逐元素应用的,常规注意力可以被重写为 Z = D^{-1} A \hat{V},其中 D = \text{diag}(A \mathbf{1}^\top_T)\mathbf{1}^\top 是长度为 T 的全1列向量; \text{diag}(\cdot)是一个对角矩阵,其对角线元素为输入向量。

线性化注意力是一类方法,它通过用 \phi(Q) \phi(K)^\top 来近似或替代未归一化的注意力矩阵 \exp(QK^\top),其中 \phi是逐行应用的特征映射。因此,未归一化的注意力矩阵的计算可以通过计算\phi(Q) (\phi(K)^\top V) 来线性化,如图 7(b) 所示。

图 7.标准自注意力和线性化自注意力之间复杂性差异的图示。

为了进一步了解线性化注意力,我们从向量形式推导其公式。我们考虑一般形式的注意力:
                                                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​       z_i = \sum_{j} \frac{\text{sim}(q_i, k_j)}{\sum_{j'} \text{sim}(q_i, k_{j'})} v_j

其中,\text{sim}(\cdot, \cdot)是测量输入向量相似性的评分函数。在普通的 Transformer 中,评分函数是内积的指数函数 \exp(\langle \cdot, \cdot \rangle)。一种自然选择的 \text{sim}(\cdot, \cdot) 是核函数 K(x, y) = \phi(x) \phi(y)^\top,这导致:

z_i = \sum_{j} \frac{\phi(q_i) \phi(k_j)^\top}{\sum_{j'} \phi(q_i) \phi(k_{j'})^\top} v_j

= \frac{\phi(q_i) \sum_{j} \phi(k_j) \otimes v_j}{\phi(q_i) \sum_{j'} \phi(k_{j'})^\top}

其中,⊗ 表示向量的外积。基于这一公式,通过首先计算突出项 \sum_{j} \phi(k_j) \otimes v_j\sum_{j'} \phi(k_{j'})^\top,可以实现注意力的线性化。这对自回归注意力尤其有益,因为累积和 \sum_{j=1}^{i} \phi(k_j) \otimes v_ju_i = \sum_{j=1}^{i} \phi(k_j) 可以从 S_{i-1}u_{i-1}中以常数时间计算。这有效地使 Transformer 解码器可以像 RNN 一样运行。

公式 (16) 的一个解释是模型通过聚合(特征映射后的)键和值的外积表示的关联来维护一个记忆矩阵,然后通过将记忆矩阵与特征映射的查询相乘并进行适当的归一化来检索值。

这个方法有两个关键组成部分:(1)特征映射\phi(\cdot),和(2)聚合规则。

4.2.1.特征映射

Linear Transformer [62] 提出了使用一个简单的特征映射\phi_i(x) = \text{elu}(x_i) + 1。这个特征映射并不旨在近似点积注意力,但经验上证明其性能与标准 Transformer 相当。Performer [18, 19] 使用随机特征映射来近似 Transformer 的评分函数。随机特征映射使用函数f_1, \ldots, f_l : \mathbb{R} \to \mathbb{R}h : \mathbb{R}^D \to \mathbb{R}

\phi(x) = \frac{h(x)}{\sqrt{m}} \left[ f_1(\omega_1^\top x), \ldots, f_m(\omega_m^\top x), \ldots, f_l(\omega_1^\top x), \ldots, f_l(\omega_m^\top x) \right]

其中 \omega_1, \ldots, \omega_m \overset{iid}{\sim} D 从某个分布 D \in \mathcal{P}(\mathbb{R}^D) 中抽取。

Performer [18] 的第一个版本受到随机傅里叶特征映射 [105] 的启发,这种映射最初用于近似高斯核。它使用三角函数,h(x) = \exp\left(\frac{\|x\|^2}{2}\right)l = 2f_1 = \sinf_2 = \cos。这种方法也被用于 Random Feature Attention (RFA) [95],不同之处在于 h(x) 设置为 1,因为在应用特征映射之前,查询和键被\ell_2归一化。

尽管三角随机特征映射可以提供无偏的近似,但它不保证非负注意力分数,因此可能导致不稳定的行为。为了缓解这个问题,Performer 的第二个版本 [19] 提出了正随机特征映射,使用 h(x) = \exp\left(-\frac{\|x\|^2}{2}\right)l = 1f_1 = \exp,从而保证了点积注意力的无偏和非负近似。这种方法比 Choromanski 等人 [18] 的方法更稳定,并报告了更好的近似结果。

除了使用随机特征映射来近似标准点积注意力之外,Peng 等人 [95] 和 Choromanski 等人 [19] 还探索了用 ,h(x) = 1, l=1, f_1 = \text{ReLU} 来近似 1 阶弧余弦核。这种特征映射在机器翻译和蛋白质序列建模等各种任务中被证明是有效的。

Schlag 等人 [113] 设计了一种特征映射,旨在促进特征空间中的正交性。具体而言,给定一个输入x \in \mathbb{R}^D,特征映射 \phi : \mathbb{R}^D \to \mathbb{R}^{2\nu D}定义为部分函数:

\phi_{i+2(j-1)D}(x) = \text{ReLU}([x, -x])_i \text{ReLU}([x, -x])_{i+j}

其中i = 1, \ldots, 2D, j = 1, \ldots, \upsilon

4.2.2.聚合规则

在公式 (16) 中,关联 \{\phi(k_j) \otimes v_j\} 通过简单求和聚合到记忆矩阵中。这种方法被几个研究 [18, 19, 62] 采用。然而,对于网络而言,更有益的做法可能是选择性地丢弃旧的关联,并在将新关联添加到记忆矩阵中时进行处理。

RFA [95] 引入了一个门控机制来对求和过程建模序列数据中的局部依赖性。具体来说,当在某个时间步将一个新的关联添加到记忆矩阵 S 时,他们用一个可学习的、依赖于输入的标量 g 对 S 进行加权,对新关联则用1 - g加权(类似的机制也应用于 u)。通过这种修改,历史关联会呈指数衰减,而每个时间步更倾向于最近的上下文。

Schlag 等人 [113] 认为简单的求和限制了记忆矩阵的容量,因此他们提出了通过写入和移除的方式来扩展容量。具体来说,给定一个新的输入键值对 (k_i, v_i),模型首先使用矩阵乘法检索当前与 kik_iki​ 关联的值 \bar{v}_i。然后,它用一个依赖于输入的门控标量 g 来写入记忆矩阵 \bar{v}_iv_i的凸组合,并移除关联\bar{v}_i。他们还提出了总和归一化(在更新记忆矩阵之前对\phi(q_i)\phi(k_i) 进行组件总和归一化),而不是用公式 (16) 中的分母来归一化这种聚合规则。

4.3.查询原型和记忆压缩

除了使用稀疏注意力或基于核的线性化注意力外,还可以通过减少查询或键值对的数量来降低注意力的复杂性,这分别涉及查询原型和内存压缩方法。

图 8.查询原型和记忆压缩。
4.3.1.带原型查询的注意力

在查询原型中,几个查询原型作为计算注意力分布的主要来源。模型要么将这些分布复制到表示查询的位置,要么用离散均匀分布填充这些位置。图8(a) 说明了查询原型的计算流程。Clustered Attention [138] 将查询分组到几个簇中,然后计算簇中心的注意力分布。簇中的所有查询共享与对应中心计算的注意力分布。

Informer [170] 使用显式的查询稀疏测量从查询中选择原型,该测量源自查询注意力分布与离散均匀分布之间的Kullback-Leibler散度的近似。注意力分布仅计算稀疏测量中排名前𝑢的查询。其余查询分配离散均匀分布。

4.3.2.压缩键值记忆的注意力

除了通过查询原型减少查询的数量外,还可以通过在应用注意力机制之前减少键值对的数量来降低复杂性,如图8(b) 所示。

Liu 等人 [84] 提出了一种记忆压缩注意力(MCA),通过使用步长卷积减少键和值的数量。该修改作为局部注意力的补充(在第4.1节中讨论),因为它可以捕获全局上下文。该机制通过卷积核大小𝑘的因子减少键和值的数量,因此可以在相同计算资源下处理比原始Transformer更长的序列。

Set Transformer [70] 和 Luna [90] 使用多个外部可训练的全局节点来总结输入的信息,然后将总结的表示作为压缩记忆供输入使用。这将自注意力的二次复杂性减少为线性复杂性。Linformer [142] 使用线性投影将键和值从长度𝑛投影到更小的长度𝑛𝑘。这也将自注意力的复杂性减少为线性。然而,这种方法的缺点是必须假设输入序列长度,因此不能用于自回归注意力。

Poolingformer [165] 采用了两级注意力,结合了滑动窗口注意力和压缩记忆注意力。压缩记忆模块在滑动窗口注意力之后使用,以增加感受野。他们探索了几种不同的池化操作作为压缩操作来压缩键和值的数量,包括最大池化和使用动态卷积 [146] 的池化。

4.4.低阶自注意力

一些实证和理论分析 [45, 142] 报告称,自注意力矩阵 A \in \mathbb{R}^{T \times T}通常是低秩的。这个特性的含义有两个方面:(1) 低秩特性可以通过参数化显式建模;(2) 自注意力矩阵可以被低秩近似替代。

4.4.1.低秩参数化

注意力矩阵的秩小于序列长度,意味着在输入通常较短的情况下,设置 D_k > T可能会导致过度参数化和过拟合。因此,限制D_k的维度以显式建模低秩特性作为归纳偏置是合理的。Guo 等人 [45] 将自注意力矩阵分解为一个低秩注意力模块,该模块具有小的 D_k来捕捉长距离的非局部交互,以及一个带状注意力模块来捕捉局部依赖关系。

4.4.2.低秩近似

自注意力矩阵的低秩特性还有另一个含义,即可以使用低秩矩阵近似来降低自注意力的复杂度。一种相关的方法是对核矩阵进行低秩近似。一些现有的工作受到核近似的启发。

在第4.2节提到的一些线性化注意力方法中,受到了使用随机特征映射进行核近似的启发。例如,Performer [18] 遵循了最初为近似高斯核而提出的随机傅里叶特征映射方法。该方法首先将注意力分布矩阵 A 分解为 C_Q G C_K,其中 G 是高斯核矩阵,随机特征映射用于近似 G。

另一类工作则遵循了 Nyström 方法的思想。这些基于 Nyström 的方法 [16, 152] 首先从 TTT 个输入中选择 mmm 个标志节点,使用下采样方法(例如,步幅平均池化)。令 \tilde{Q}​ 和 \tilde{K}为选定的标志查询和键,然后在注意力计算中使用以下近似:

\tilde{A} = \text{softmax} \left( Q \tilde{K}^\top \right) \left( \text{softmax} \left( \tilde{Q} \tilde{K}^\top \right) \right)^{-1} \text{softmax} \left( Q \tilde{K}^\top \right)

请注意,在公式 (19) 中,M^{-1} = \left( \text{softmax} \left( \tilde{Q} \tilde{K}^\top \right) \right)^{-1}不总是存在。为了解决这个问题,CSALR [16] 在 M 上添加了一个单位矩阵,以确保逆矩阵总是存在。Nyströmformer [152] 使用了 M 的 Moore-Penrose 广义逆,而不是逆矩阵,以便在 M 奇异的情况下也能进行近似。

4.5.带先验的注意力

注意力机制通常输出一个期望的关注值,这个值是向量的加权和,其中权重是值的注意力分布。传统上,分布是由输入生成的(例如,在标准Transformer中使用softmax(QK^T))。作为一种广义情况,注意力分布也可以来自其他来源,我们将其称为“先验”。先验注意力分布可以作为从输入生成的分布的补充或替代。我们将这种注意力的形式抽象为“带先验的注意力”,如图9所示。在大多数情况下,可以通过在应用softmax之前计算先验和生成注意力分数的加权和来融合两个注意力分布。

图9. 带先验的注意力。此类模型将生成的注意力分数与先验注意力分数融合,产生最终的注意力分数以用于注意力计算。
4.5.1.模型局部性的先验

某些类型的数据(例如文本)可能对局部性有强烈的偏好。这种特性可以作为先验注意力显式编码。一种简单的方法是使用高斯分布来表示位置。具体来说,可以将生成的注意力分布与某个高斯密度相乘,然后进行重新归一化,这相当于在生成的注意力分数 A 上添加一个偏置项 G,其中较高的 G_{ij}表示第 i个输入对第 j个输入的先验概率更高。

Yang 等人 [156] 提出首先使用简单的前馈网络预测每个q_i的中心位置p_i。然后,高斯偏置被定义为:

G_{ij} = -\frac{(j - p_i)^2}{2\sigma^2}

其中 σ 表示高斯分布的标准差,可以作为超参数确定或从输入中预测。

Gaussian Transformer [42] 假设每个 q_i的中心位置是 i,并定义偏置为:

G_{ij} = -|w(i - j)^2 + b|

其中 w \geq 0b \leq 0 是标量参数,分别控制偏差和减小中心位置的权重。

4.5.2.低层模块的先验

在Transformer架构中,通常观察到相邻层的注意力分布是相似的。因此,提供来自前一层的注意力分布作为注意力计算的先验是自然的。最终的注意力分数可以定义为:

\hat{A}^{(l)} = w_1 \cdot A^{(l)} + w_2 \cdot g(A^{(l-1)})

其中 A^{(l)}表示第 l 层的注意力分数,w_1w_2是应用于相邻层分数的权重,g: \mathbb{R}^{n \times n} \to \mathbb{R}^{n \times n}是一个将前一层分数转换为先验的函数。

Predictive Attention Transformer [143] 提出了将二维卷积层应用于前一层的注意力分数,并将最终的注意力分数计算为生成的注意力分数和卷积分数的凸组合。这等价于在公式 (22) 中设置w_1 = \alphaw_2 = 1 - \alpha,并将 g(\cdot) 设为卷积层。他们的实验显示,该模型在从头开始训练和在预训练BERT模型上微调时均有改进。

Realformer [51] 直接将前一层的注意力分数添加到生成的注意力分数中,从而类似于在注意力图上使用残差跳跃连接。这等价于在公式 (22) 中设置 w_1 = w_2 = 1并将 g(\cdot) 设为恒等映射。他们在该模型上进行了预训练实验,结果显示,该模型在多个数据集上优于基准BERT模型,并且在预训练预算显著较低的情况下仍表现出色。

作为极端情况,Lazyformer [159] 提出了在多个相邻层之间共享注意力图。这等价于在设置 w_1 = 0w_2 = 1w_1 = 1w_2 = 0 交替设置的同时,将 g(\cdot) 设为恒等映射。这种方法的好处是注意力图只计算一次,并在后续层中重复使用,从而减少了计算成本。他们的预训练实验表明,生成的模型在计算上更高效,但仍然有效。

4.5.3.作为多任务适配器的先验

适配器是任务依赖的、可训练的模块,附加在预训练网络的特定位置,用于跨任务的高效参数共享 [108]。Pilault 等人 [98] 提出了一个条件自适应多任务学习 (CAMTL) 框架,该框架使用一个可训练的注意力先验 M(zi)M(z_i)M(zi​),它依赖于任务编码z_i \in \mathbb{R}^{D_z}​:

M(z_i) = \bigoplus_{j=1}^m A'_j(z_i), \quad A'_j(z_i) = A_j \gamma_i(z_i) + \beta_i(z_i)

其中 ⊕ 表示直接求和,A_j \in \mathbb{R}^{(n/m) \times (n/m)}是可训练参数,\gamma_j\beta_j: \mathbb{R}^{D_z} \to \mathbb{R}^{(n/m) \times (n/m)}是特征化线性调制函数 [96]。实现中指定了最大序列长度 n_{\text{max}}。该先验被公式化为块对角矩阵,并添加到预训练Transformers的上层注意力分数中,作为参数高效的多任务归纳知识转移的适配器。

4.5.4.仅使用先验的注意力

一些研究探索了使用与输入之间的成对交互无关的注意力分布。换句话说,他们的模型仅利用先验注意力分布。

Zhang 等人 [164] 设计了一种高效的Transformer解码器变体,称为平均注意力网络,该网络使用离散均匀分布作为唯一的注意力分布来源。因此,值被聚合为所有值的累积平均。为了提高网络的表现力,他们进一步在平均注意力模块上添加了一个前馈门控层。这种方法的优点是,改编后的Transformer解码器可以像常规Transformer一样并行训练,并像RNN一样解码,从而避免了解码中的 O(T^2) 复杂度。

You 等人 [161] 使用高斯分布作为硬编码的注意力分布进行注意力计算。其直觉与 Yang 等人 [156] 和 Guo 等人 [42] 非常相似,即注意力分布应集中在某个局部窗口。不同的是,他们完全抛弃了生成的注意力,仅使用高斯分布进行注意力计算。在这种方法中,均值(中心位置)和方差被设计为超参数。实验表明,硬编码的注意力在仅应用于自注意力时,可以在机器翻译任务中达到与基准模型相当的性能。

Synthesizer [131] 提出了用以下方法替换生成的注意力分数:(1) 可学习的、随机初始化的注意力分数,(2) 由仅依赖于查询输入本身的前馈网络输出的注意力分数。对机器翻译和语言建模的实验表明,这些变体可以与标准Transformer取得竞争力的表现。尽管没有解释这些变体为何有效,但实证结果引人注目。

4.6.改进的多头机制

多头注意力因能够从不同的表示子空间中在不同位置同时关注信息而显得非常有吸引力。然而,没有机制可以保证不同的注意力头确实捕获了不同的特征。

4.6.1.头部行为建模

使用多头注意力的基本动机是允许模型在不同的位置同时关注来自不同表示子空间的信息 [137]。然而,在原始Transformer中,没有明确的机制来保证不同注意力头之间的行为差异,也没有机制允许注意力头之间相互作用。一系列工作致力于通过引入更复杂的机制来改善多头机制,这些机制引导不同注意力头的行为或允许注意力头之间的交互。

Li 等人 [73] 在损失函数中引入了辅助的不一致性正则化项,以鼓励不同注意力头之间的多样性。两个正则化项分别用于最大化输入子空间和输出表示的余弦距离,而最后一个正则化项则是通过对应的注意力矩阵的逐元素乘法来分散多个头所关注的位置。

一些探测性工作揭示了预训练Transformer模型展示出某些自注意力模式,这些模式在语言学上几乎没有支持。作为代表性工作,Kovaleva 等人 [68] 识别出BERT中的几种简单注意力模式。例如,许多注意力头只是关注特殊的BERT标记 [CLS] 和 [SEP]。因此,可以引入一些约束来提升Transformer模型的训练效果。为此,Deshpande 和 Narasimhan [27] 提出使用辅助损失,该损失定义为注意力分布图与预定义注意力模式之间的Frobenius范数。

Talking-head Attention [119] 使用了一种对话头机制,该机制将生成的注意力分数从 h_k 线性投影到 ℎ 个头部,在该空间中应用softmax,然后投影到 h_v 个头部以进行值聚合。其动机是鼓励模型以可学习的方式在注意力头之间移动信息。

Collaborative Multi-head Attention [21] 使用共享的查询和键投影 W^QW^K 以及一个混合向量 m_i,用于从投影参数中过滤第 𝑖 个头部,使得公式 (3) 适应为:

head_i = Attention(QW_Q diag(m_i), KW^K, VW^V_i)

其中 W^QW^K 由所有注意力头共享。

4.6.2.受限跨度的多头注意力
图 10.三种类型的跨度掩码函数m​(x)。 横轴表示距离x,纵轴表示掩码值。

原始的注意力机制采用全跨度注意力假设,即一个查询可以关注所有的键值对。然而,通常观察到一些头部主要集中在局部上下文,而另一些头部则关注更广泛的上下文。因此,限制注意力跨度可能是有益的:

  • 局部性:限制注意力跨度引入明确的局部约束。这在局部性是一个重要先验的情况下特别有利。
  • 效率:如果实施得当,这种模型可以扩展到非常长的序列,而不会引入额外的内存开销和计算时间。

限制注意力跨度可以通过将每个注意力分布值乘以一个掩码值然后重新归一化来表示,其中掩码可以表示为一个将距离映射到 [0, 1] 的非递增函数。原始注意力机制对所有距离分配掩码值为 1,如图 10(a) 所示。

Sukhbaatar 等人 [126] 提出了使用可学习的注意力跨度,如图 10(b) 所示。掩码由一个可学习的标量 𝑧 和一个超参数 𝑅 参数化。关于字符级语言建模的实验表明,自适应跨度模型在计算量显著减少的同时优于基线模型。还观察到较低层通常具有较小的学习跨度,而较高层则相反。这表明模型可以学习特征的层次化组合。

Multi-Scale Transformer [44] 提出了使用固定的注意力跨度,不同层中的不同头使用不同的最大跨度。如图 10(c) 所示,固定的注意力跨度在固定窗口内受限,该窗口由尺度值 𝑤 控制。他们从直观的语言学角度和 BERT 的经验观察中设计了尺度,以使高层往往具有更大的尺度(例如,大跨度大小),而低层则应被限制在较小的尺度内。他们在多个任务上的实验表明,这种模型在长序列上的推理加速的同时,能超越基线模型。

4.6.3.精细化聚合的多头注意力

在每个注意力头计算其输出表示后,原始的多头注意力机制 [137] 会将这些表示进行串联,然后应用线性变换以获得最终的输出表示,如公式 (2) 所示。结合公式 (1)、(2) 和 (3),可以看出,这种串联和投影的形式等同于对 𝐻 个重新参数化的注意力输出进行求和。因此,我们首先将 W_O \in \mathbb{R}^{D_m \times D_m}​ 分成 𝐻 个块: W_O = [W_{O1}; W_{O2}; \cdots; W_{O H}] 其中每个 W_{O i}的维度是 D_v \times D_m。因此,容易看出,多头注意力可以被重新表述为:

\text{MultiHeadAttn}(Q, K, V) = \sum_{i=1}^{H} \text{Attention}(QW_{Qi}, KW_{Ki}, VW_{Vi})W_{O i}

有人可能会认为这种简单的通过求和的聚合模式并没有充分利用多头注意力的表达能力,使用更复杂的聚合机制可能更为理想。

Gu 和 Feng [40]、Li 等人 [74] 提出了使用路由方法,最初为胶囊网络 [112] 提出的,来进一步聚合不同注意力头产生的信息。注意力头的输出首先被转换为输入胶囊,然后经过迭代路由过程获得输出胶囊。最终的输出胶囊被串联作为多头注意力的最终输出。这两项工作都使用了两种路由机制,即动态路由 [112] 和 EM 路由 [53]。需要注意的是,迭代路由引入了额外的参数和计算开销。Li 等人 [74] 实证表明,仅将路由机制应用于较低层可以在翻译性能和计算效率之间实现最佳平衡。

4.6.4.其他优化

针对多头注意力机制,人们提出了其他一些优化,旨在改善其性能。

Shazeer [117] 提出了多查询注意力(multi-query attention),即在所有注意力头之间共享键值对(即对所有注意力头使用一个键投影和一个值投影)。这种方法的优点是减少了解码所需的内存带宽,从而使解码速度更快,同时对模型质量的降级仅有轻微影响。

Bhojanapalli 等人 [11] 发现,小的注意力键尺寸可能会影响其表示任意分布的能力。因此,他们提出将头部尺寸与头部数量 h 解耦,而不是将头部尺寸设置为 D_m/h的常见做法。实证观察表明,将注意力头部尺寸设置为输入序列长度是有益的。

5、其他模块级修改(位置编码、层归一化和前馈层)

5.1.位置表示法

定义 5.1(置换等变函数)。设 \Pi_n为索引集合 \{1, 2, \ldots, T\}的所有置换的集合。一个函数f : X^T \to Y^T被称为置换等变的,当且仅当对于任何 \pi \in \Pi_T,都有f(\pi x) = \pi f(x).显然,卷积和递归网络不是置换等变的。然而,Transformer 中的自注意力模块和position-wise前馈层都是置换等变的,这在建模需要输入结构的问题(而非集合输入问题)时可能会成为一个问题。例如,在建模文本序列时,单词的顺序很重要,因此在 Transformer 架构中正确编码单词的位置是至关重要的。因此,需要额外的机制将位置信息注入到 Transformer 中。一个常见的设计是首先使用向量表示位置信息,然后将这些向量作为额外的输入注入到模型中。

5.1.1.绝对位置表示

在标准的 Transformer 中 [137],位置编码被编码为绝对正弦位置编码。对于每个位置索引 t,编码为p_t = PE(t) \in \mathbb{R}^{D_m}​,其中每个元素都是索引的正弦(sin)或余弦(cos)函数,具有预定义的频率。

其中 \omega_i是为每个维度手工设计的频率。每个位置的编码然后加到 token 嵌入中,并输入到 Transformer 中。另一种表示绝对位置的方法是学习一组每个位置的嵌入 [28, 37]。与手工设计的位置表示相比,学习的嵌入在任务中可以通过反向传播进行调整,因此更加灵活。然而,嵌入的数量有限,最多只能达到训练前确定的最大序列长度,这使得这种方法不再具备归纳性,即无法处理比训练时见过的序列更长的序列 [20, 85]。 Wang 等人 [139] 提出了使用正弦位置表示,但将每个频率 \omega_i(在公式(28)中)从数据中学习。这种方法保留了归纳性,同时比手工设计的正弦编码更加灵活。FLOATER [85] 将位置表示框架视为一个连续的动态系统,并采用神经常微分方程(Neural ODE)以支持端到端的训练。这种方法在参数效率上比完全可学习的方法更具优势,同时具有归纳性和灵活性。 标准的绝对位置表示方法是将位置编码/嵌入加到 token 嵌入中。然而,随着输入信号在层间传播,位置编码可能在上层中丢失。后来的一些工作发现,将位置表示加到每个 Transformer 层的输入中是有益的 [2, 26, 45, 85]。

5.1.2.相对位置表示

另一类研究关注的是表示 tokens 之间的相对位置关系,而不是单个 token 的绝对位置。其直觉是,在自注意力机制中,输入元素之间的成对位置关系(方向和距离)可能比元素的绝对位置更有用。这些方法被称为相对位置表示。Shaw 等人 [116] 提出在注意力机制的键(key)中添加一个可学习的相对位置嵌入:

其中​ r_{ij} \in \mathbb{R}^{D_k}是位置 i 和 j 之间关系的相对位置嵌入,K是确定嵌入数量的最大偏移量。通常,K设置为可以容纳大多数输入序列的长度。作为一个特例,InDIGO [39] 将 K 设置为 3,以适应他们专门设计的非自回归生成框架。作为逐步努力,Music Transformer [56] 进一步引入了一种机制,以减少这种方法的中间内存需求。与这种方法类似,T5 [104] 采用了一种简化的相对位置嵌入形式,其中每个嵌入只是一个可学习的标量,该标量被加到用于计算注意力权重的对应分数上。

Transformer-XL [24] 使用正弦编码表示位置关系,但通过重新设计注意力分数的计算来融合内容和位置信息:

A_{ij} = q_i k_j^\top + q_i (R_{i - j} W_{K, R})^\top + u_1 k_j^\top + u_2 (R_{i - j} W_{K, R})^\top,

其中W_{K, R} \in \mathbb{R}^{D_m \times D_k}u_1u_2 \in \mathbb{R}^{D_k}是可学习的参数,RRR 是类似于标准 Transformer 中位置编码的正弦编码矩阵。然后对分数 A 应用 softmax 函数以提供注意力权重。需要注意的是,学习的正弦编码 [139] 也可以作为手工设计的 RRR 的替代品。

DeBERTa [50] 利用像 Shaw 等人 [116] 提出的那样的位置嵌入,并以类似于 Transformer-XL [24] 的解耦风格将嵌入应用到模型中:

A_{ij} = q_i k_j^\top + q_i (r_{ij} W_{K, R})^\top + k_j (r_{ij} W_{Q, R})^\top,

其中 W_{K, R}​,W_{Q, R} \in \mathbb{R}^{D_m \times D_k}​ 是可学习的参数,r_{ij}是可学习的相对位置嵌入(如公式(30)所示)。第一个项被解释为内容到内容的注意力,而后两个项分别被解释为(相对)内容到位置和位置到内容的注意力。

5.1.3.其他表示

一些研究探索了包含绝对和相对位置信息的混合位置表示法。Transformer with Untied Position Encoding (TUPE) [63] 重新设计了注意力分数的计算,将其表示为内容到内容的项、绝对位置到位置的项和表示相对位置信息的偏置项的组合:

A_{ij} = q_i k_j^\top + (p_i W^{Q,P}) (p_j W^{K,P})^\top + b_{j-i}

其中 W^{K,P}W^{Q,P},P​ 是可学习的参数,p_ip_j是位置 i 和 j 的位置嵌入,b_{j-i} 是可学习的标量相对位置嵌入。

还可以设计一套同时表达绝对和相对信息的位置表示方法。Roformer [124] 使用旋转位置嵌入(Rotary Position Embedding,RoPE)通过将第 t 个输入x_t的仿射变换嵌入与旋转矩阵 R_{\Theta,t} 相乘来表示 token 的位置:

q_t = x_t W_Q R_{\Theta,t}k_t = x_t W_K R_{\Theta,t},

R_{\Theta,t} = \bigoplus_{j=1}^{D_k/2} M(t, \theta_j)

这里 ⨁ 表示矩阵的直接和(direct sum)。每个M(t, \theta_j)是一个旋转角度为t \cdot \theta_j的二维顺时针旋转矩阵。

M(t, \theta_j) = \begin{pmatrix} \cos(t \cdot \theta_j) & \sin(t \cdot \theta_j) \\ -\sin(t \cdot \theta_j) & \cos(t \cdot \theta_j) \end{pmatrix}

这种公式的关键优势在于其引发的表示是平移不变的,即 q_i 和 k_j 的注意力分数只与它们的相对位置偏移有关:

q_i k_j^\top = (x_i W_Q) R_{\Theta,j-i} (x_j W_K)^\top

在实际应用中,这种嵌入矩阵的乘法可以通过两个逐元素相乘来实现,以减少内存占用。RoPE 使用绝对嵌入的形式,但能够捕捉相对位置关系。这种方法与第 4.2 节中的线性化注意力兼容。

5.1.4.没有显式编码的位置表示

Wang 等人 [140] 提出了将位置信息编码到词嵌入中,而不是显式地引入额外的位置编码。他们通过将嵌入推广为基于位置的连续(复值)函数来实现这一点。R-Transformer [144] 通过局部 RNN 来建模序列数据的局部性。具体来说,R-Transformer 的每个块的输入首先传递给局部 RNN,然后再传递给多头自注意力模块。RNN 结构引入了顺序信息,并捕捉了局部依赖关系,作为自注意力的补充。

条件位置编码(Conditional Positional Encoding,CPE)[20] 在每一层为ViT生成条件性位置编码,并带有零填充的2D卷积。这种方法背后的直觉是卷积网络可以通过零填充隐式地编码绝对位置信息【60】。

5.1.5. Transformer 解码器上的位置表示

值得注意的是,掩蔽自注意力并不是置换等变的【133】。因此,仅利用 Transformer 解码器的模型有可能在不引入显式位置表示的情况下感知位置信息。这在一些语言建模任务的实验证据中得到了证实【59, 113】。研究者们发现,去除位置编码甚至提高了模型的性能。

5.2.层归一化

层归一化(Layer Normalization,LN)与残差连接一起被认为是稳定深度网络训练的机制(例如,缓解梯度不适定问题和模型退化)。有一些研究工作致力于分析和改进 LN 模块。

图11.Transformer 编码器,前置 LN(pre-LN)和后置 LN(post-LN)的比较
5.2.1.层归一化的位置

在原始的 Transformer 中,LN 层位于残差块之间,被称为后置 LN(post-LN)。后来的 Transformer 实现中,将 LN 层放置在残差连接内部,即在注意力机制或前馈神经网络(FFN)之前,且在最终层之后增加了一个 LN 以控制最终输出的幅度,这种方法被称为前置 LN(pre-LN)。前置 LN 已被许多后续研究和实现所采用。

Xiong 等人通过理论分析发现,在 post-LN Transformer 中,输出层附近的梯度在初始化时较大,这可能是 post-LN Transformer 在没有学习率预热(learning rate warm-up)时训练不稳定的原因,而 pre-LN Transformer 则不会出现同样的问题。他们通过推导并实验证明,对于 pre-LN Transformer,可以安全地移除预热阶段。

尽管 post-LN 通常会导致训练不稳定和发散,但在收敛后,它的表现通常优于 pre-LN 变体。类似地,Liu 等人通过理论和实证分析发现,post-LN 编码器并不会受到梯度不平衡的影响。他们推测梯度问题并不是 post-LN Transformer 训练不稳定的直接原因,而是 post-LN Transformer 中的放大效应——在初始化时,对残差分支的依赖较大,导致 post-LN Transformer 的输出偏移更大,从而导致训练不稳定。基于这一发现,他们为 post-LN Transformer 引入了额外的参数,以控制残差分支的依赖性。通过根据样本数据的激活变化初始化这些参数,确保 post-LN Transformer 的输出偏移不被放大。这种方法不仅确保了 post-LN Transformer 的收敛,还提升了其性能,相比 pre-LN Transformer 更为出色。

5.2.2.层归一化的替代方法

Xu 等人 [153] 在实验证明中观察到,LN 模块中的可学习参数在大多数实验中不起作用,甚至增加了过拟合的风险。他们进一步通过对照实验得出结论,LN 对 Transformer 有效的原因并非在于前向归一化过程。他们的分析和实验得出,均值和方差的导数重新中心化和重新缩放了梯度,并在 LN 中起到了重要作用。因此,他们提出了一种不含可学习参数的归一化技术。

AdaNorm:

z = C (1-ky) \bigodot y,

y = \frac {x-\mu }{\sigma},

其中 𝐶 和 𝑘 是超参数,⊙ 表示元素逐个相乘。𝜇 和 𝜎 分别是输入 x 的均值和标准差。

Nguyen 和 Salazar [93] 提出用缩放的 ℓ2 归一化替代 LN 模块。对于任意 𝑑 维度的输入 x,他们的方法将其投影到学习的半径为 𝑔 的 𝑑 − 1 球面上。

Scaled ℓ2 Normalization:

z=g \frac {x} {\|x\|},

其中 𝑔 是可学习的标量。与普通 LN 相比,它更具参数效率,并且在机器翻译数据集,尤其是低资源环境中,表现出色。

Shen 等人 [121] 讨论了为什么批量归一化(Batch Normalization, BN)[58] 在 Transformer 中表现不佳,并得出结论,BN 的显著性能下降是由于其批量统计数据相关的不稳定性所致。因此,他们提出了 PowerNorm(PN),相较于 BN,它有三处改进:(1)放宽了零均值归一化;(2)使用信号的二次均值而不是方差;(3)使用二次均值的运行统计数据,而不是使用每批次的统计数据。具体来说,对于第 𝑡 次迭代

PowerNorm (PN):

z^{(t)} = \gamma \odot y^{(t)} + \beta,

y^{(t)} = \frac{x^{(t)}} {\psi ^ {(t-1)}}

(\psi ^{(t)})^2 = \alpha (\psi ^{(t-1)})^2 + (1 - \alpha ) \left (\frac {1}{|B|} \sum_{i=1}^{|B|}(x^{(t)_i})^2 \right)

其中 𝛼 是移动平均系数,𝛾 和 𝛽 是可学习的参数,类似于 BN 的公式。

5.2.3.无层归一化的Transformer

除了层归一化(LN)之外,还有另一种构建更深层神经网络的机制。ReZero [5] 用一个可学习的残差连接替代了 LN 模块。对于每个模块 𝐹 (·),ReZero 在残差形式中重新缩放 𝐹(⋅):

H' = H + \alpha \cdot F(H),

其中 𝛼是一个具有零初始化的可学习参数。

研究验证了将 Transformer 中的 LN 替换为 ReZero 机制可以为输入信号带来更好的动态等距性,并且能够更快地收敛。

5.3.逐位的FFN

尽管其结构简单,位置前馈网络(FFN)层对于Transformer实现良好性能非常重要。Dong 等人 [32] 观察到,仅仅堆叠自注意力模块会导致秩崩溃问题,从而引发令牌统一性归纳偏差,而前馈层是缓解这一问题的重要构建模块之一。许多研究都探索了对 FFN 模块的修改。

5.3.1.FFN 中的激活函数

FFN中的激活函数。基础的Transformer [137] 在两个FFN层之间采用了Rectified Linear Units (ReLU) 作为非线性激活函数。随着时间的推移,许多研究探讨了不同于ReLU的激活函数。

Ramachandran 等人 [106] 尝试用 Swish 函数 𝑓 (𝑥) = 𝑥sigmoid(𝛽𝑥) 来替换 Transformer 中的 ReLU,并观察到它在WMT 2014英语→德语数据集上持续提高性能。

GPT [101] 在语言预训练中用Gaussian Error Linear Unit (GELU) [52] 代替ReLU。这已成为许多预训练语言模型的默认做法 [28, 50]。

Shazeer [118] 探索使用Gated Linear Units (GLU) [25] 及其变体作为FFN中ReLU的替代品。他们的预训练实验表明,GLU变体在使用ReLU激活的基础Transformer上有持续的性能提升。需要注意的是,GLU引入了额外的参数,实验中将FFN的中间维度减少,以匹配基线的参数数量。

5.3.2.调整 FFN 以获得更大容量

一些研究致力于扩展FFN,以便于获得更大的模型容量。基本思想是用具有更多参数的类似结构替代FFN。

Lample等人 [69] 用产品密钥记忆层替换了一些FFN。产品密钥记忆由三个组件组成:查询网络、包含两个子键集的键选择模块和一个值查找表。模型首先使用查询网络将输入投影到潜在空间,然后将生成的查询与键选择模块中的两个子键集的笛卡尔积进行比较,找出𝑘个最近邻,最后使用这𝑘个最近邻键在值查找表中找到相应的值并将其聚合以生成最终输出。这个过程类似于注意力机制,因为生成的查询关注于大量的全局键-值对。为进一步扩大该模块的容量,他们提出了多头机制用于密钥产品记忆。大规模语言建模的实验表明,这种机制显著提高了性能,而计算开销几乎可以忽略不计。

多项研究利用了混合专家(Mixture-of-Experts,MoE)[120]的思想来增加FFN的容量。Gshard [71] 使用稀疏门控MoE层替换Transformer中的FFN。每个MoE层由几个FFN(称为专家)组成,这些FFN的结构与基础Transformer中的位置-wise FFN相同。该层的输出是FFN输出的加权和,权重由路由函数𝑔(·)计算得出。他们设计了一个可学习的路由函数,用于将令牌分配给专家,并使用辅助损失来确保专家之间负载平衡和在长度规模上的效率,以便专家可以分布在多个设备上。每次前向传递时,只有具有最高𝑘门值的专家会被激活。

Switch Transformer [36] 提出仅使用具有最大门值的单个专家进行路由,从而显著减小计算开销。作者还设计了一个辅助损失来鼓励专家之间的负载平衡。与非MoE对应物相比,这种方法在预训练过程中显著加快了速度,同时保持了类似数量的FLOPS。Yang等人 [155] 提出用专家原型策略替代前𝑘路由。具体来说,该策略将专家分成𝑘个不同的组,并在每个组内应用top-1路由。原型组的输出线性结合形成MoE层的最终输出。该策略被证明在保持恒定计算成本的同时提高了模型质量。

与使用可学习的路由函数进行专家分配相对的是,Roller等人 [110] 设计了哈希层,其中令牌被哈希到固定数量的桶中,每个桶对应一个专家。这种方法不需要路由参数或任何辅助损失函数,同时与现有方法(如Switch Transformer [36])相比显示出竞争力的结果。

5.3.3.删除 FFN 层

值得注意的是,人们可能会争论说,在某些情况下,可以完全删除FFN层,从而形成一个简化的网络。

Sukhbaatar等人 [127] 演示了将ReLU激活函数替换为Softmax,并在FFN中去掉偏置项,实际上将FFN转变为一个注意力模块,其中position-wise输入关注于具有D_{ffn}槽的全局键值记忆。因此,他们提出省略FFN模块,并将一组全局键值对添加到注意力模块中,这些键值对是与输入生成的键和值连接的可学习参数。这种方法简化了网络结构,且不会影响性能。

Yang等人 [157] 实证表明,尽管Transformer的解码器中FFN的参数量很大,但其效率较低,可以安全地去除,只对性能有轻微影响或无损失。这种方法大大提升了训练和推理的速度。

6、结构级别的变体

在这一部分,我们介绍X-formers,这些模型对原始Transformer进行了改进。

6.1.改造Transformer使其轻量化

除了在模块层面减少计算开销的努力外,还有一些尝试通过更高层次的修改来使Transformer更轻量化。

类似于低秩自注意力(low-rank self-attention)[45],该方法将注意力分解为局部约束注意力和低秩全局注意力,Lite Transformer [148] 提议将Transformer中的每个注意力模块替换为一个双分支结构,其中一个分支使用注意力机制来捕捉长程上下文,另一个分支则使用深度可分离卷积和线性层来捕捉局部依赖。这种架构在模型大小和计算方面都较为轻量化,因此更适合移动设备。

Funnel Transformer [23] 采用了一个漏斗状的编码器架构,其中通过沿序列维度的池化操作逐步减少隐藏序列的长度,然后通过上采样恢复。这种架构有效地减少了与原始Transformer编码器相比的FLOPs和内存消耗。自然地,可以使用这种架构在相同的计算资源下构建更深或更宽的模型。

DeLighT [91] 将标准Transformer块替换为DeLighT块,该块包含三个子模块:(1) 一个“扩展和缩减”DeLighT变换模块,用于以较低的计算要求学习更宽的表示;(2) 一个单头自注意力模块,用于学习成对的交互;(3) 一个轻量级的“缩减和扩展”FFN(与原始Transformer不同的是,后者首先扩展隐藏表示的维度,然后再将其缩减回 𝐷𝑚)。他们还提出了一种块级缩放策略,允许在接近输入的地方使用较浅和较窄的块,而在接近输出的地方使用较宽和较深的块。由此产生的网络比原始Transformer更深,但参数和操作更少。

6.2.加强跨区块连接

在原始的Transformer中,每个块将来自前一个块的输出作为输入,并输出一系列隐藏表示。可以考虑创建更多路径,使输入信号能够通过网络运行。在第4.5.2节中,我们介绍了Realformer [51] 和Predictive Attention Transformer [143],它们重用了来自前一块的注意力分布,以引导当前块的注意力。这可以视为在相邻的Transformer块之间创建一个前向路径。

在深度Transformer编码器-解码器模型中,解码器中的交叉注意力模块仅利用编码器的最终输出,因此误差信号必须沿编码器的深度传递。这使得Transformer更容易出现优化问题(例如,梯度消失)。Transparent Attention [8] 在每个交叉注意力模块中使用所有编码器层(包括嵌入层)的编码器表示的加权和。对于第𝑗个解码器块,交叉注意力模块被修改为关注

\tilde{H}^{(j)} = \sum_{i=0}^{N} \frac{\exp(w_{ij})}{\sum_{k=0}^{N} \exp(w_{kj})} H^{(i)},

其中每个w_{ij}是一个可训练的参数。这有效地缩短了从编码器的每一层到误差信号的路径,从而简化了更深Transformer模型的优化。

另一个与原始Transformer相关的问题是每个位置只能关注来自较低层的历史表示。Feedback Transformer [34] 提出了在Transformer解码器中添加反馈机制,其中每个位置关注所有层历史表示的加权和

\tilde{h}_i = \sum_{l=0}^{N} \frac{\exp(w_l)}{\sum_{k=0}^{N} \exp(w_k)} h^{(l)}_i

6.3.自适应计算时间

与大多数神经网络模型一样,原始Transformer使用固定的(学习到的)计算过程来处理每个输入。一个引人注目且有前景的改进是使计算时间根据输入的不同而变化,即将自适应计算时间(ACT)[38] 引入Transformer模型。这样的修改可能带来以下优势:

  • 对难样本的特征细化:对于处理起来较为困难的数据,浅层表示可能不足以完成任务。对于这些数据,更理想的做法是应用更多计算以获取更深层次、更精细的表示。
  • 对易样本的效率提升:在处理容易的样本时,浅层表示可能足够完成任务。在这种情况下,如果网络能够通过减少计算时间来提取特征,将会更为有利。

Universal Transformer (UT) [26] 采用了一个深度迭代机制,对所有符号的表示进行迭代细化,使用一个在深度上共享的模块,如图12(a)所示。它还添加了一个每位置动态停止机制,计算每个符号在每个时间步的停止概率。如果符号的停止概率大于预定义的阈值,则该符号的表示在后续时间步中保持不变。当所有符号停止或达到预定义的最大步骤时,递归停止。

Conditional Computation Transformer (CCT) [7] 在每个自注意力层和前馈层中添加了一个门控模块,以决定是否跳过当前层,如图12(b)所示。作者还引入了一个辅助损失,鼓励模型调整门控模块,使实际计算成本与可用计算预算匹配。类似于UT中使用的动态停止机制,有一类工作致力于根据每个输入调整层数,以实现良好的速度-准确度权衡,这被称为早期退出机制,如图12(c)所示。常用的技术是在每层添加一个内部分类器,并联合训练所有分类器。这些方法的核心是决定是否在每层退出的标准。DeeBERT [150] 使用当前层输出概率分布的熵来决定是否退出。PABEE [171] 计算预测保持不变的次数来决定是否退出。Li等人 [79] 设计了一种基于窗口的不确定性标准,以实现序列标注任务的令牌级部分退出。Sun等人 [129] 引入了一种基于投票的退出策略,该策略考虑了所有过去内部分类器的预测,以推断正确的标签并决定是否退出。

图 12.三种典型的 ACT 范式。

6.4.具有分而治之策略的Transformer

自注意力机制在序列长度上的二次复杂度可能会显著限制某些下游任务的性能。例如,语言建模通常需要长范围的上下文。除了第4节中介绍的技术外,另一种有效处理长序列的方法是使用分而治之策略,即将输入序列分解成更小的段,然后通过Transformer或Transformer模块高效地处理这些段。我们识别了两类代表性的方法:循环Transformer和层次Transformer,如图13所示。这些技术可以理解为Transformer模型的包装器,其中Transformer作为一个基础组件被重用来处理不同的输入段。

图 13.循环和分层 Transformer 的插图。
6.4.1.循环 Transformer

在循环Transformer中,维护了一个缓存内存以包含历史信息。在处理文本的一个段落时,网络会将缓存中的信息作为额外输入。处理完成后,网络通过简单地复制隐藏状态或使用更复杂的机制来写入内存。该过程的抽象流程如图13(a)所示。

Transformer-XL [24] 通过缓存前一个段落的表示并在处理当前段落时将其作为扩展上下文来解决固定长度上下文的限制。对于第𝑙层和第(𝜏 + 1)段,输入表示H^{(l-1)}_{\tau+1}与来自前一个段落的表示H^{(l-1)}_{\tau}进行连接以生成键和值:

\tilde{H}^{(l)}_{\tau+1} = [SG(H^{(l-1)}_{\tau}) \circ H^{(l-1)}_{\tau+1}]

K^{(l)}_{\tau+1}, V^{(l)}_{\tau+1} = \tilde{H}^{(l)}_{\tau+1} W_{K}, \tilde{H}^{(l)}_{\tau+1} W_{V}

其中H^{(0)}_{\tau}定义为词嵌入序列,SG(\cdot) 表示停止梯度操作,[X \circ Y]表示在时间维度上连接两个向量序列。这种方法将最大上下文长度扩展为 L \times N_{mem},其中 L 是层数,N_{mem}​ 是缓存内存序列的长度。

Compressive Transformer [103] 进一步扩展了这个想法,通过两个级别的内存扩展缓存。在Transformer-XL中,前一个段落的激活被缓存为用于增强当前段落的内存,而较旧段落的激活被丢弃。而Compressive Transformer对较旧的激活应用压缩操作(如卷积、池化等),并将其存储在压缩内存中。为了避免对压缩子网络进行代价高昂的时间反向传播(BPTT),他们建议使用局部损失函数,其中原始内存从压缩内存中构建。这种方法进一步将理论上的最大历史上下文长度从Transformer-XL的 L \times N_{mem}扩展到 L \times (N_{mem} + c \times N_{cm}),其中 c 是压缩率,N_{cm} 是压缩内存的长度。

Memformer [147] 将递归机制从仅解码器架构扩展到编码器-解码器架构。他们在编码器中引入了类似于标准Transformer中的交叉注意力的内存交叉注意力,以使Transformer编码器能够关注内存。他们还在编码器输出之上引入了内存槽注意力,以明确地为下一个段落写入内存。为了避免对长时间步的BPTT,他们提出了内存重放反向传播(MRBP)算法,该算法在每个时间步重放内存,以完成对长展开的梯度反向传播。

Yoshida等人 [160] 提出了一个简单的微调机制,将递归添加到预训练的语言模型(例如GPT-2 [102])中。他们首先将由第𝜏段产生的表示压缩成一个单一的向量表示,使用来自每层 l \in \{1, \cdots, L\} 的池化表示的加权平均:

z_{\tau} = \sum_{l=1}^{L} w_{l} \sum_{j=1}^{T_{\tau}} h^{(l)}_{j}

其中 T_{\tau}是第𝜏段的序列长度,w_{l} = \text{softmax}(\alpha)_{l} 是从可学习参数 \alpha = [\alpha_1, \cdots, \alpha_{L}] 中软化归一化的权重。然后将这个压缩表示输入到前馈网络中,以生成第𝜏段的内存状态 h^{prev}_{\tau},该状态随后被预添加到特定注意力层的键-值输入中。这种方法有效地扩展了预训练语言模型的上下文长度,而无需显著改变原始模型的架构。

ERNIE-Doc [30] 提出了基于Transformer-XL中使用的递归机制的增强递归机制,通过用来自第𝑙层的历史表示替换内存:

\tilde{H}^{(l)}_{\tau+1} = [SG(H^{(l)}_{\tau}) \circ H^{(l-1)}_{\tau+1}]

这与在式(48)中使用的来自第(𝑙 - 1)层的表示不同。这一修改实质上导致了更大的有效上下文长度。

6.4.2.分层 Transformer

分层Transformer将输入分解为更细粒度的元素。首先将低级特征输入到Transformer编码器中,生成的输出表示随后通过汇聚(使用池化或其他操作)形成高级特征,然后由高级Transformer进行处理。这类方法可以理解为一个分层抽象的过程。该方法的概述如图13(b)所示。这种方法的优点有两个方面:(1)分层建模允许模型在有限资源下处理长输入;(2)它有潜力生成更丰富的表示,这对任务是有益的。

6.4.2.1 长序列输入的分层

对于那些固有长输入长度的任务,可以使用分层Transformer来有效建模长范围依赖关系。例如,对于文档级机器翻译任务,Miculicich 等人 [92] 在翻译一个句子时引入了对源语言和目标语言上一个句子的依赖。他们使用注意力机制作为汇聚操作来总结低级信息。对于文档摘要生成任务,HIBERT [166] 通过首先学习所有句子的表示来编码文档文本,然后使用这些句子表示来编码文档级表示,最后生成摘要。该模型使用最后的隐藏表示(对应于EOS标记)作为每个句子的表示。Liu 和 Lapata [86] 提出了一个类似的分层Transformer,用于多文档摘要生成,其中提取的低级表示通过一个具有全局可训练查询节点的注意力层进行汇聚,而低级表示作为键值对的来源。Hi-Transformer [145] 首先利用一个句子Transformer和一个文档Transformer 来分层学习文档上下文感知的句子表示。然后将文档上下文感知的句子表示输入到另一个句子Transformer中,以进一步改进句子上下文建模。

6.4.2.2 分层以获得更丰富的表示

一些任务可能需要使用分层模型来获得更丰富的表示,这些表示对任务非常有益。例如,TENER [154] 使用低级Transformer编码器来编码字符特征,然后将这些特征与词嵌入拼接,作为高级Transformer编码器的输入。这种方法结合了更多特征,并缓解了数据稀疏和词汇表外(OOV)问题。最近出现的Vision Transformer [33] 将输入图像分成几个块,这些块作为Transformer的基本输入元素,这可能会丢失块内的原始像素级信息。为了解决这个问题,Transformer in Transformer (TNT) [48] 在每一层中使用一个内部Transformer块来转换像素表示,并使用一个外部Transformer块来处理块表示和像素表示的融合向量作为输入。

6.5.探索替代架构

尽管 Transformer 架构取得了成功,但人们可能会质疑当前的 Transformer 架构是否最优。 有趣的是,一些研究已经探索了 Transformer 的替代架构。

Lu等人. [89] 通过将Transformer视为多粒子动态系统中的对流扩散方程的数值常微分方程(ODE)求解器,设计了Macaron Transformer,该模型将每个Transformer块替换为FFN-注意力-FFN变体。Sandwich Transformer [99] 探索了重新组织注意力模块和FFN模块的方式,使得注意力模块主要位于较低层,而FFN模块位于较高层。这样设计的模型在多个语言建模基准测试中提高了困惑度,而没有增加参数、内存或训练时间。

Mask Attention Network (MAN) [35] 在每个Transformer块的自注意力模块前添加了一个动态掩码注意力模块。掩码是根据标记表示、标记之间的相对距离和头索引条件化的。所提出的动态掩码注意力被证明可以有效地建模文本数据中的局部性,并且所生成的模型在机器翻译和抽象摘要任务中始终优于基线模型。

值得注意的是,还有一系列工作使用神经架构搜索(NAS)来寻找替代的Transformer架构。Evolved Transformer (ET) [123] 采用基于进化的架构搜索,以标准Transformer架构为初始种群进行搜索。经过搜索的模型在多个语言任务中表现出对Transformer的一致改进。作为另一个代表性工作,DARTSformer [167] 应用了可微架构搜索(DARTS) [82],结合了多分支可逆网络和用于内存效率的反向传播重构算法。最终得到的模型在性能上始终优于标准Transformer,并与更大的ET模型相比,具有显著降低的搜索成本。

最近阿联酋技术创新研究(简称“TII”)开源了全球第一个纯Mamba架构的大模型,Falcon Mamba 7B模型,采用Mamba状态空间语言模型架构来处理各种文本生成任务。

通过取消传统注意力机制,有效提升了模型处理长序列时计算效率低下的问题。

它可以处理无限长序列,但内存需求不增加。无论上下文多长,生成每个token的时间基本一样

由此,Falcon Mamba模型性能全方位提升,打败一众Transformer架构模型,如Llama-3.1(8B)、Mistral(7B)以及Falcon-2(11B)。

量子位 | 公众号 QbitAI:换掉Transformer,7B开源模型立刻登顶!任意长序列都能处理

7、预训练 Transformer

作为与卷积网络和递归网络的一个关键区别,Transformer 不对数据的结构做任何假设。卷积网络和递归网络内在地引入了位置性的归纳偏置。Transformer 的这种灵活性使其能够捕捉不同范围的依赖关系,但也使其在数据有限时容易过拟合。为了解决这一问题,可以将归纳偏置引入模型。

最近的研究表明,在大规模语料库上预训练的 Transformer 模型可以学习通用的语言表示,这对下游任务有益。预训练模型可以使用各种自监督目标,例如根据上下文预测被遮盖的词。预训练后,可以在下游数据集上对模型进行微调,而不是从头开始训练模型。以下是预训练 Transformer 的典型方式:

  • 仅编码器 (Encoder Only):这类模型使用 Transformer 编码器作为骨干架构。BERT [28] 是一个代表性的预训练模型,通常用于自然语言理解任务。它使用了掩码语言模型(MLM)和下一个句子预测(NSP)作为自监督训练目标。RoBERTa [87] 进一步调整了 BERT 的训练,移除了 NSP 目标,因为发现它会对下游任务的性能产生负面影响。

  • 仅解码器 (Decoder Only):一些研究专注于对 Transformer 解码器进行语言建模的预训练。例如,生成预训练 Transformer(GPT)系列(即 GPT [101]、GPT-2 [102] 和 GPT-3 [12])专注于扩展预训练的 Transformer 解码器,并展示了大规模预训练模型可以通过将任务和示例作为构造的提示实现令人印象深刻的少样本性能 [12]。

  • 编码器-解码器 (Encoder-Decoder):还有一些预训练模型采用 Transformer 编码器-解码器作为整体架构。BART [72] 将 BERT 的去噪目标扩展到编码器-解码器架构。使用编码器-解码器架构的好处在于,该模型具备了执行自然语言理解和生成的能力。T5 [104] 采用类似的架构,是较早使用任务特定文本前缀的研究之一。

一些 Transformer 架构变体也可以应用于基于 Transformer 的预训练模型。例如,第4.1节中介绍的BigBird [163] 引入了复合位置基稀疏注意力来支持长序列输入。GPT-3 [12] 在自注意力模块中使用了交替的密集和局部带状稀疏注意力(这也在第 4.1 节介绍)。Switch Transformer [36] 是一个基于编码器的预训练模型,它用混合专家层替代了 FFN 层,并可以在保持每个示例 FLOPs不变的情况下增加参数数量。

8、Transformer 的应用

Transformer 最初设计用于机器翻译,但由于其灵活的架构,它已经广泛应用于 NLP 之外的各种领域,包括计算机视觉和音频处理。

  1. 自然语言处理 (NLP):Transformer 及其变体在 NLP 任务中得到了广泛探索和应用,例如机器翻译 [35, 91, 104, 123, 137]、语言建模 [24, 103, 111, 122] 和命名实体识别 [80, 154]。大量的努力已经投入到在大规模文本语料库上预训练 Transformer 模型上,我们认为这是 Transformer 在 NLP 中广泛应用的主要原因之一。

  2. 计算机视觉 (CV):Transformer 也被适应于各种视觉任务,例如图像分类 [14, 33, 88]、目标检测 [13, 88, 168, 172]、图像生成 [61, 94] 和视频处理 [3, 115]。Han 等 [47] 和 Khan 等 [64] 提供了有关视觉 Transformer 的现有工作的综述。我们鼓励读者参考这些调查以进一步了解 Transformer 在 CV 领域的研究进展。

  3. 音频应用:Transformer 也可以扩展到音频相关应用,例如语音识别 [15, 31, 41, 97]、语音合成 [57, 76, 169]、语音增强 [65, 162] 和音乐生成 [56]。

  4. 多模态应用:由于其灵活的架构,Transformer 也被应用于各种多模态场景,例如视觉问答 [55, 75, 77, 125]、视觉常识推理 [75, 125]、字幕生成 [22, 81, 128]、语音到文本翻译 [46] 和文本到图像生成 [29, 81, 107]。

9、结论与未来方向

在本次调查中,我们对 Transformer 进行了全面的概述,并提出了一种新的分类方法。大多数现有的工作从不同角度改进了 Transformer,例如效率、泛化和应用。这些改进包括引入结构偏置、设计轻量架构、预训练等。

尽管 X-formers 已经证明了它们在各种任务中的强大能力,但仍然存在挑战。除了当前的关注点(例如效率和泛化),Transformer 的进一步改进可能包括以下方向:

  1. 理论分析:Transformer 的架构已经被证明能够支持有足够参数的大规模训练数据集。许多研究表明,Transformer 相对于 CNN 和 RNN 具有更大的容量,因此能够处理大量的训练数据。当 Transformer 在足够的数据上训练时,它通常表现优于 CNN 或 RNN。一个直观的解释是,Transformer 对数据结构的假设较少,因此比 CNN 和 RNN 更加灵活。然而,理论原因尚不明确,需要对 Transformer 能力进行理论分析。

  2. 超越注意力的全局交互机制:Transformer 的一个主要优势是使用注意力机制来建模输入数据中节点之间的全局依赖关系。然而,许多研究表明,对于大多数节点而言,完全注意力是不必要的。在某种程度上,对所有节点进行无差别的注意力计算是低效的。因此,在高效建模全局交互方面仍有改进的空间。一方面,自注意力模块可以被视为具有动态连接权重的全连接神经网络,它通过动态路由聚合非局部信息。因此,其他动态路由机制是值得探索的替代方法。另一方面,全局交互也可以通过其他类型的神经网络建模,例如增强记忆模型。

  3. 多模态数据的统一框架:在许多应用场景中,集成多模态数据对提升任务性能有用且必要。此外,通用 AI 也需要捕捉不同模态之间的语义关系。由于 Transformer 在文本、图像、视频和音频方面取得了巨大成功,我们有机会构建一个统一的框架,并更好地捕捉多模态数据之间的内在联系。然而,模态内和跨模态注意力的设计仍有待改进。

最后,我们希望这份调查能够成为更好理解 Transformer 当前研究进展的实用参考,并帮助读者进一步改进 Transformer 以应用于各种场景。

参考文献

A Survey of Transformers

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值