Transformer系列(机器学习)

Transformer(将被称为“vanilla Transformer”以区别于其他增强版本;Vaswani等人,2017年)模型具有编码器-解码器架构,这在许多NMT模型中很常见。后来简化的 Transformer在语言建模任务中表现出色,例如在仅编码器的BERT或仅解码器的GPT中。

符号

符号 含义
模型大小/隐藏状态维度/位置编码大小。
多头注意力层中的头的数量。
输入序列的段长度。
模型中注意力层的总数;不考虑MoE
输入序列中的每个元素都被映射到形状为,与模型尺寸相同。
键权重矩阵。
查询权重矩阵。
值权重矩阵。通常我们有
每个头的权重矩阵
输出权重矩阵。
嵌入输入的查询。
嵌入输入的键。
嵌入输入的值。
查询、键、值矩阵中的行向量,
个查询的键值对集合
长度为的注意力,
查询之间的标量注意得分和键
位置编码矩阵,其中第行的是输入的位置编码

注意力机制与自注意力机制

注意力是神经网络中的一种机制,模型可以通过选择性地关注给定的一组数据来学习做出预测。注意力的量由学习到的权重作为量化,因此输出通常为加权平均值。

自注意力是一种注意力机制,模型利用对同一样本的其他部分观察结果对数据样本的一部分进行预测。从概念上讲,它与非局部均值非常相似。注意,自注意力是置换不变的;它是对集合的操作。

注意力/自注意力有多种形式,Transformer依赖于缩放点积注意力:给定一个查询矩阵,键矩阵和一个值矩阵,输出是值向量的加权和,其中分配给每个值的权重由查询和对应的键的点积决定:

对于查询和键向量(查询和键矩阵中的行向量),我们有一个标量分数:

多头自注意力

多头自注意力模块是Transformer中的关键组件。多头机制不是只计算一次注意力,而是将输入拆分成更小的块,然后并行计算每个子块上的缩放点积注意力。单个注意力输出只是简单地连接起来并线性变换为预期的维度。

在这里是一个连接运算。是权重矩阵,用于映射大小为的查询、键和值矩阵。并且是输出线性变换。所有权重都应在训练期间学习。

编码器-解码器架构

编码器生成基于注意力机制的表示,能够从上下文中定位特定信息。它由6个模块的堆栈组成,每个模块包含两个子模块、一个多头自注意力层和一个逐点全连接前馈网络。逐点意味着它对序列中的每个元素应用相同的线性变换(具有相同的权重)。这也可以看作是过滤器大小为1的卷积层。每个子模块都有一个残差连接和层规范化。所有子模块都输出相同维度的数据Transformer解码器的功能是从编码表示中检索信息。该架构与编码器非常相似,不同之处在于解码器包含两个多头注意子模块,而不是相同的重复模块中都有一个。第一个多头注意子模块被屏蔽,以防止位置关注未来。

位置编码

由于自注意力操作具有排列不变性,因此使用适当的位置编码为模型提供顺序信息非常重要。位置编码与输入嵌入具有相同的维度,因此可以直接添加到输入中。vanilla Transformer考虑了两种类型的编码:

正弦位置编码

正弦位置编码定义如下,给定token位置和维度

这样,位置编码的每个维度都对应于不同维度中不同波长的正弦波,从

学习位置编码

学习到的位置编码为每个元素分配一个学习到的列向量,该向量对其绝对位置进行编码(Gehring等人,2017年),而且每层都可以通过不同的方式学习这种编码(Al-Rfou等人,2018年)。

相对位置编码

Shaw等人(2018年)将相对位置信息纳入最大相对位置被限制为最大绝对值这种裁剪操作使得模型能够推广到未知的序列长度。因此,在的标签范围内,将作为可学习的相对位置表示。

Transformer-XLDai等人,2019年)提出了一种基于键和查询点积重参数化的相对位置编码。为了保持位置信息在各个段之间连贯流动,Transformer-XL对相对位置进行编码,因为知道位置偏移量就足以做出良好的预测,即,一个键向量及其查询向量。如果省略标量以及中的归一化项,包括位置编码,我们可以将位置处的查询注意力得分写为:

Transformer-XL对上述四个项重新参数化如下:

  • 代替使用相对位置编码
  • 代替具有两个可训练参数(内容)和(表示位置)有两个不同的术语。
  • 分裂成两个矩阵,为内容信息,为位置信息。
旋转位置嵌入

旋转位置嵌入(RoPESu等人,2021)使用旋转矩阵对绝对位置进行编码,并将每个注意层的键和值矩阵与其相乘,以在每一层注入相对位置信息。当将相对位置信息编码到第键和第个查询,我们希望以这样一种方式来定义函数,即内积仅与相对位置有关。旋转位置嵌入(RoPE)利用欧几里得空间中的旋转操作,将相对位置嵌入构建为简单地将特征矩阵旋转与其位置索引成比例的角度。

给定一个向量,如果我们想将其逆时针旋转,我们可以将其乘以旋转矩阵得到旋转矩阵定义为:

当推广到更高维空间时,RoPE拓展到维空间,并构造旋转矩阵,大小为,位置处的标记为

在论文中。请注意,这本质上等同于张娴位置编码,但以旋转矩阵的形式表示。然而键矩阵和查询矩阵都通过与此旋转矩阵相乘来整合位置信息。

Transformer改进

Transformer模型在推理时的输入序列长度上限取决于训练的上下文长度。单纯增加上下文长度会导致时间和空间的大量消耗(),并且由于硬件所限而不能支持。

上下文内存

原始Transformer的注意力持续时间是固定且有限的。该模型在每个步骤更新只能关注同一段中的元素,并且没有信息可以跨越固定长度分段移动。这种上下文分段会导致以下几个问题:

  • 该模型无法捕捉比较长的依赖关系。
  • 在没有上下文或者上下文很稀少的情况下,很难预测每个片段中的前几个token
  • 评估的代价是昂贵的。每当片段向右移动一位时,新的片段都会从头开始重新处理,尽管有很多重叠的token

Transformer-XLDai等人,2019年;“XL”表示“超长”)修改了架构,使用附加内存复用了段之间的隐藏状态。通过不断使用先前段的隐藏状态,将段之间的循环连接引入到模型中。

让我们标记隐藏状态,第层模型中的第段,除了最后一层隐藏状态为同一段,它还取决于前一段的同一层的隐藏状态通过整合先前隐藏状态的信息,该模型可以将注意力跨度延长到过去的更长时间,涵盖了多个片段。

请注意,键和值都依赖于扩展的隐藏状态,而查询仅使用当前步骤的隐藏状态。连接操作沿着序列长度维度。Transformer-XL需要使用相对位置编码,因为如果我们对绝对位置进行编码,则前一个段和当前段将被分配相同的编码,这是我们不希望看到的。Compressive TransformerRae等人,2019年)通过压缩过去的记忆来扩展Transformer-XL,以支持更长的序列。它明确添加了大小为每层存储该层的过去激活,以保留长上下文。当一些过去的激活变得足够旧时,它们会被压缩并保存在一个额外的压缩内存中,每层大小为

内存和压缩内存都是FIFO队列。模型上下文长度为,压缩函数定义为:𝕔𝕕的映射激活压缩内存。压缩函数有多种选择:

  • 内核的池化最大或平均和步幅大小
  • 具有内核和步幅大小的一维卷积(需要了解额外的参数)。
  • 扩张卷积(需要学习其他参数)。
  • 经常使用的内存。

Compressive Transformer还有两个额外的训练损失:

  • 自动编码损失(无损压缩目标)衡量我们压缩记忆-重建原始记忆的能力。
  • 注意力重建损失(有损目标)重建基于内容的注意力对记忆与压缩记忆的注意力,并最小化差异:

翻转压缩函数

Transformer-XL的内存大小为,最大时间范围是,模型的层数为。注意力的时间耗时为,压缩Transformer的时间为,且注意力的时间耗时为。注意力权重权重存储在三个位置:压缩内存 → 内存 → 因果掩蔽序列。在实验中,他们观察到注意力权重从存储在常规内存中的最旧激活增加到存储在压缩内存中的激活,这意味着网络正在学习保存重要信息。

外部存储器

对于kNN-LMKhandelwal等人,2020年)通过单独的通过线性插值两个模型预测的下一个token概率,可以得到kNN模型。kNN模型建立在外部键值存储之上,该存储可以存储任何大型预训练数据集或OOD新数据集。此数据存储经过预处理以保存大量数据(上下文的LM嵌入表示、下一个token),并且最近邻检索发生在LM嵌入空间中。由于数据存储可能非常庞大,我们需要依靠库进行快速密集向量搜索,例如FAISSScaNN。索引过程仅发生一次,并且在推理时很容易实现并行性。在推理时,下一个token的概率是两个预测​​的加权和:

𝟙 包含一组以最近邻数据的神经网络;是一个距离函数,例如`L2`距离。`SPALM`(自适应参数语言模型;`Yogatama`等人,`2021`年)结合了`Transformer-XL`风格的记忆,用于从外部上下文中获取隐藏状态作为短期记忆,`kNN-LM`风格的键值存储作为长记忆。

SPALM运行kNN搜索获取k具有相关上下文的token。对于每个token,我们可以获得预训练LM提供的相同嵌入表示。表示为。门控机制首先使用一个简单的注意力层聚合检索到的token嵌入(token 的隐藏状态在层)作为查询,然后学习门控参数平衡本地信息和长期信息

在这里是需要学习的参数向量;S形的;是输入和输出token之间共享的词嵌入矩阵。不同于kNN-LM,没有发现最近距离对检索到的token的聚合有帮助。在训练期间,长期记忆中的关键表示保持不变,由预训练的LM产生,但值编码器(又称词嵌入矩阵)会进行更新。Memorizing TransformerWu等人,2022年)添加了一个kNN增强注意力层位于仅解码器的Transformer的顶部堆栈附近。这个特殊的层维护着过去键值对的Transformer-XL样式FIFO缓存。局部注意力和kNN机制。kNN查找返回顶部k(键,值)对用于输入序列中的每个查询,然后通过自注意力堆栈对其进行处理,以计算检索到的值的加权平均。两种类型的注意力与可学习的门控参数相结合。为了防止值幅度出现较大的分布偏移,缓存中的键和值都经过了规范化。Memorizing Transformer在实验中发现了以下现象:

  • 一些实验观察,使用较小内存训练模型,然后使用较大内存进行微调比从头开始使用较大内存进行训练效果更好。
  • 较小的Memorizing Transformer内存中只有8ktoken,其困惑度可以与vanilla Transformer相媲美,且可训练参数相比高5倍。
  • 增加外部存储器的大小可以获得一致的增益,最高可达262K
  • 非记忆Tronsformer在使用内存的情况下可以进行微调。
距离增强注意力评分

Distance Aware TransformerDA-TransformerWu等人,2021年)和具有线性偏差的注意力机制(ALiBi;Press等人,2022年)类似 — 为了鼓励模型在比模型训练的更长的上下文中进行推断,我们可以根据键token和查询token之间的距离,将位置信息明确地附加到每对注意力分数上。请注意,vanilla Transformer中默认的位置编码只会向输入序列添加位置信息,而后来改进的编码机制会改变每一层的注意力分数,例如旋转位置嵌入,它们的形式与距离增强注意力分数非常相似。DA-TransformerWu等人,2021年)将每一层的注意力得分乘以可学习的偏差,该偏差由键和查询之间的距离函数表示。不同的注意力头使用不同的参数来区分对短期和长期的不同偏好。给定两个位置,DA-Transformer使用以下加权函数来改变自注意力分数:

在这里是一个可以学习的参数,用于对每个头部的相对距离进行不同的加权,其中头部用上标表示;也是一个可以学习的参数,用于控制距离的上限和上升斜率第个注意力头。权重函数定义如下:1.;2.;3.;4.规模可调;5.函数单调;的时间复杂度为相对于自注意力的复杂度来说小很多、内存消耗也很小。ALiBiPress等人,2022年)不使用乘数,而是在查询关键字注意力得分上添加了一个常数偏差项,该偏差项与成对距离成比例。偏差引入了强烈的近因偏好,并惩罚距离太远的关键字。惩罚在不同的头中以不同的速率增加。

在这里是头部特定的加权标量。与DA-transformer不同,不是固定的序列,例如,对于8个头,。总体思路与相对位置编码所要解决的问题非常相似。

ALiBi在训练期间对上下文长度为10241.3B模型进行了训练,并在推理时推测为2046

参数复用

Universal TransformerDehghani等人,2019年)将Transformer中的自注意力机制与RNN中的循环机制相结合,旨在从Transformer捕获的长期依赖关系和RNN的学习归纳偏差中获益。Universal Transformer不是固定数量的层,而是使用自适应计算动态的调整步数。如果我们固定步数,Universal Transformer相当于一个跨层共享参数的多层Transformer。从高层次来看,通用Transformer可以看作是一个循环函数,用于学习每个token的隐藏状态表示。循环函数在token位置之间并行演化,位置之间的信息通过自注意力机制共享。

给定长度的输入序列,Universal Transformer迭代更新表示为。在第步,初始化与输入嵌入矩阵相同,所有位置在多头自注意力机制中并行处理,然后经过循环转换函数。

在这里是一个可分离卷积或全连接神经网络affine transformation + ReLU由两种位置(每一行的都是独立的)组成。位置编码使用正弦位置编码,但带有额外的时间维度:

在自适应版本的Universal Transformer中,循环步骤的数量ACT动态确定。每个位置都配备了动态ACT停止机制。一旦每个token循环块停止,它就会停止进行更多循环更新,而只是将当前值复制到下一步,直到所有块都停止或模型达到最大步数限制。

自适应建模

自适应建模是指能够根据不同的输入调整计算量的机制。例如,有些token可能只需要局部信息,因此需要较短的注意力跨度;或者有些token相对比较容易预测,不需要经过整个注意力栈进行处理。

自适应注意力

Transformer的一个关键优势是能够捕获长期依赖关系。根据上下文,模型可能更喜欢在某些时候关注更远的事物,或者一个注意力头可能具有与不同的注意力模式。如果注意力跨度可以灵活调整其长度,并且只在需要时关注更远的事物,那么这将有助于降低计算和内存成本,以支持模型中更长的最大上下文大小。这就是自适应注意力跨度的动机。Sukhbaatar等人(2019年)提出了一种寻求最佳注意力跨度的自注意力机制。假设不同的注意力头可能会在同一上下文窗口内分配不同的分数,因此最佳跨度将针对每个注意力头单独进行训练。

鉴于第token,我们需要计算这个token和其注意力范围内其他键之间的注意力权重

被添加到控制中以获得有效的可调注意力跨度,将查询和键之间的距离映射到参数化为并且需要学习的是:

在这里是一个超参数,它定义了

软遮罩函数应用于注意力权重中的softmax元素:

在上面的等式中,是可微的,因此它与模型的其它部分联合训练。参数是每个头分别学习的,此外,损失函数有一个额外的惩罚()。使用自适应计算时间,该方法可以得到进一步增强,具有灵活的注意力跨度长度,可动态适应当前输入。注意力跨度参数是集中在时间上的函数,,其中向量和偏差标量跟其他参数共同学习。在具有自适应注意力跨度的Transformer实验中,Sukhbaatar等人(2019)发现一个普遍趋势,即较低层不需要非常长的注意力跨度,而较高层中的少数注意力头可能使用较长的跨度。自适应注意力跨度还有助于大大减少FLOPS数值,尤其是在具有许多注意力层和较大上下文长度的大型模型中。

深度自适应Transformer

在推理时,我们自然会认为某些token更容易预测,因此不需要像其他token那样多的计算量。因此,我们可能只通过有限数量的层来处理其预测,以在速度和性能之间取得良好的平衡。深度自适应TransformerElabyad等人,2020年)和置信自适应语言模型(CALMSchuster等人,2022年)都受到这一想法的启发,并学习预测不同输入token所需的最佳层数。深度自适应Transformer将输出分类器附加到每一层,以根据该层的激活产生退出预测。分类器权重矩阵可以每层不同,也可以跨层共享。在训练期间,模型会采样不同的退出序列,以便使用不同层的隐藏状态优化模型。学习目标结合了在不同层预测的似然概率,

自适应深度分类器输出参数分布为,使用交叉熵损失对oracle分布进行训练。在这里主要探讨了如何学习这种分类器的三种配置

  • 序列特定的深度分类器:同一序列的所有标记共享相同的出口。它取决于序列的编码器表示的平均值。给定一个输入序列,长度为,分类器采用作为输入和输出多项分布,为层数。 在这里是狄拉克德尔塔(单位脉冲)函数,是一个正则化项,用于鼓励较低层退出。
  • 特定于token的深度分类器(多项式):每个token用不同的出口块解码,根据第一个解码器隐藏状态进行预测
  • 特定于token的深度分类器(类似几何):每个token每层都有一个二进制出口预测分布RBF内核用于平滑预测,以纳入当前决策对未来时间步长的影响。𝟙

在推理时,需要校准做出退出决策的置信度阈值。深度自适应Transformer通过网格搜索在验证集上找到这样的阈值。CALMSchuster等人,2022年)使用测试(LTT)框架(Angelopoulos等人,2021年)来识别有效阈值的子集,并选择最小值作为推理的阈值。除了训练每层退出分类器外,CALM还探索了其他自适应深度预测方法,包括softmax激活(即前两个softmax输出之间的差异)和隐藏状态饱和(即作为退出决策的置信度分数。他们发现softmax激活可带来最佳的推理加速。

高效的注意力

普通Transformer的计算和内存成本随序列长度呈二次方增长,因此很难应用于非常长的序列。Transformer架构的许多效率改进都与自注意力模块有关-使其更便宜、更小或运行速度更快。

稀疏注意力模式
固定局部上下文

降低自我注意力成本的一个简单方法是将每个标记的注意力范围限制在局部上下文中,这样自我注意力就会随着序列长度线性增长。该想法由Image TransformerParmer等人,2018年)提出,它将图像生成表述为使用编码器-解码器Transformer架构的序列建模:

  • 编码器生成源图像的上下文、每个像素通道表示。
  • 解码器自回归生成输出图像,每个时间步、每个像素一个通道。

我们将要生成的当前像素的表示token为查询。其他位置的表示将计算的键向量,它们共同组成记忆矩阵Image Transformer引入了两种类型的局部,如下图所示。

  • 1D局部注意力:输入图像按光栅扫描顺序展平,即从左到右、从上到下。然后将线性的图像划分为不重叠的查询块。上下文窗口由与查询块相同的像素组成以及在此查询块之前生成的固定数量的附加像素。
  • 2D局部注意力:图像被划分为多个不重叠的矩形查询块。查询像素可以关注同一记忆块中的所有其他像素。为了确保左上角的像素也可以具有有效的上下文窗口,记忆块分别向上、向左和向右扩展固定量。
步进上下文

Sparse TransformerChild等人,2019年)通过稀疏矩阵分解引入了分解式自注意力,从而可以在高达16,384的序列长度上训练具有数百层的密集注意力网络,否则这在现代硬件上是不可行的。给定一组注意力连接模式,其中每个记录第个关键位置查询向量。

注意,尽管不固定,a(\mathbf{x}_i,S_i)总是大小为,因此。在自回归模型中,一个注意力跨度定义为,因为它允许每个token关注过去的所有位置。在分解自注意力机制中,集合分解成一个依赖关系树,这样对于每一对 j\leq i,有一条路径连接回到并且无论是直接还是间接是可以加入到Sparse Transformer提出了两种类型的分形注意力机制。下图以二维图像输入为例,更容易理解这些概念。

  • 带步长的步进注意力这适用于图像数据,因为结构与步幅对齐。在图像上面,每个像素都会关注所有先前的按光栅扫描顺序关注像素(自然覆盖图像的整个宽度),然后这些像素关注同一列中的其他像素(由另一个注意连接子集定义)。
  • 固定注意力。一小部分token汇总了之前的位置,并将该信息传播到所有未来的位置。

在这里是超参数。如果它限制了表示,而许多表示依赖于少数位置。本文选择了并且。在Transformer架构中,有三种方法可以使用稀疏分解注意力模式:

  • 每个残差块是一种注意力类型,然后将它们交错,,在这里是当前残差块的索引。
  • 设置一个单独的主管,负责所有分解后的主管负责的位置,
  • 使用多头注意力机制,但与原始 Transformer 不同,每个头可能采用上面提出的模式12,该选项通常效果最佳。

Sparse Transformer还提出了一系列变化,以便将Transformer训练到数百层,包括梯度检查点、在后向传递期间重新计算注意力和FF层、混合精度训练、高效的块稀疏实现等。分块注意力(Qiu et al. 2019) 引入了一个稀疏块矩阵,只允许每个token关注一小部分其他token。每个注意力矩阵的大小为被划分成了更小的块和一个稀疏块矩阵

Blockwise Attention的实际实现将QKV存储为块矩阵,每个矩阵的大小为

在这里分别为QKV块矩阵中的行。每个大小为因此Blockwise Attention能够将注意力矩阵的记忆复杂度从

ETC(扩展Transformer构造;Ainslie等人,2019年)、LongformerBeltagy等人,2020年)和Big BirdZaheer等人,2020年)模型在构建注意力矩阵时结合了局部和全局组合。所有这些模型都可以从现有的预训练模型中初始化。ETC的全局-局部注意力机制(Ainslie等人,2019年)接受两个输入,(1)长输入大小这是常规输入序列,(2)全局输入大小包含少量的辅助token。因此,注意力根据这两个输入的方向性注意力被分为四个部分:g2g、g2l、l2gl2l。由于l2l注意力部分可能非常大,因此它被限制在固定大小的注意力范围半径内(即局部注意力广度)并且l2l矩阵可以重塑为。ETC 利用四个二进制矩阵来处理结构化输入,。例如,每个元素在注意力输出中对于g2g注意力片段的格式如下:

在这里是相对位置编码的可学习向量,是一个非常大的常数(在论文中)来抵消摘下口罩时的注意力权重。

ETC的另一个更新是整合了CPC(对比预测编码)任务,使用NCE 损失进入预训练阶段,除了MLM任务之外:当一句话被掩盖时,它的表征应该和它周围上下文的表征相似。全局输入
ETC的构造如下:假设长输入(例如句子)中有一些片段,每个片段都附加一个辅助标记以学习全局输入。相对位置编码用于用标记位置标记全局片段标记。发现在一个方向上的硬掩码(即,前后标记的标记不同)可以在某些数据集中带来性能提升。

Longformer中的注意力模式包含三个部分:

  • 局部注意力:与ETC类似,局部注意力由固定大小的滑动窗口控制
  • 预选token的全局注意力:Longformer为一些预选token(例如[CLS]token)分配了全局注意力跨度,也就是说,关注输入序列中的其他token
  • 扩张注意力机制:固定大小的扩张滑动窗口以及扩张尺寸的间隙,类似于Sparse Transformer

Big BirdLongformer非常相似,既配备了局部注意力机制,又配备了一些具有全局注意力范围的预选token,但Big Bird用一种新机制取代了扩张注意力机制,即所有token都关注一组随机token。这种设计的动机是,注意力模式可以看作是有向图,而随机图具有信息能够在任意一对节点之间快速流动的特性。Longformer在较低层使用较小的窗口大小,在较高层使用较大的窗口大小。消融研究表明,这种设置比反向或固定大小的配置效果更好。较低层没有扩大的滑动窗口,无法更好地学习使用直接的局部上下文。Longformer还有一个分阶段的训练程序,其中最初使用小窗口大小训练模型以从局部上下文中学习,然后在后续的训练阶段增加窗口大小并降低学习率。

基于上下文注意力

ReformerKitaev等人,2020年)提出的改进旨在解决vanilla Transformer中的以下痛点:

  • 自注意力模块内的二次方时间和内存复杂度。
  • 层比单层模型大倍,因为我们需要存储反向传播的激活。
  • 中间的FF层通常相当大。

提出了两项​​主要改进:

  • 用局部敏感哈希(LSH)注意力机制代替点积注意力机制,从而降低复杂度
  • 用可逆残差层替换标准残差块,这样可以在训练期间仅存储一次激活,而不是倍(即与层数成正比)。

作为注意力公式的一部分,我们只对最大的元素感兴趣,因为只有大元素在softmax之后才会做出很大贡献。对于每个查询,我们正在寻找最靠近为了在高维空间中快速找到最近邻居,Reformer将局部敏感哈希(LSH)纳入其注意力机制中。哈希方案如果它保留了数据点之间的距离信息,那么它就是局部敏感的,这样距离近的向量会获得相似的哈希值,而距离远的向量会获得非常不同的哈希值。Reformer采用这样的哈希方案,给定一个固定的随机矩阵是超参数),哈希函数是

LSH注意力机制中,查询只能关注同一哈希桶中的位置,其具体过程如下,如左上图所示:

  • 完全注意力的注意力矩阵通常很稀疏。
  • 使用LSH,我们可以根据哈希桶对要对齐的键和查询进行排序。
  • 设置),这样在一个bucket中就有相等数量的键和查询,更容易进行批处理。有趣的是,这种“shared-QK”配置不会影响Transformer的性能。
  • 应用批处理,其中连续的查询被分组在一起。

Reformer的另一项改进是使用可逆残差层Gomez等人,2017年)。可逆残差网络的动机是设计一种架构,使得任何给定层的激活都可以从下一层的激活中恢复,仅使用模型参数即可。因此,我们可以通过在反向传播期间重新计算激活来节省内存,而不是存储所有激活。给定一个层,正常残差层但可逆层将输入和输出分成对然后执行以下操作:

Reformer 将同样的思想应用到 Transformer 中,结合了注意力机制() 和前馈层 ()在可逆网络块内:

通过对前馈计算进行分块,可以进一步减少内存:

通过对前馈计算进行分块,可以进一步减少内存:

由此产生的可逆Transformer不需要在每一层存储激活。Routing TransformerRoy等人,2021年)也基于上下文的键和查询聚类。它不使用LSH之类的静态哈希函数,而是利用在线均值聚类,并将其与局部、时间稀疏注意力相结合,以降低注意力复杂度。在路由注意力中,键和查询都聚类在一起均值聚类方法和同一组质心。查询被路由到分配到相同质心的键。总复杂度为,在这里用于运行聚类分配,用于注意力计算。使用所有相关键和查询,通过EMA(指数移动平均)更新集群质心。在Routing Transformer的实验中,一些最佳配置仅在模型的最后两层和一半的注意力头中启用路由注意力,而另一半则使用局部注意力。他们还观察到局部注意力是一个非常强大的基线,更大的注意力窗口总是会带来更好的结果。

低秩注意力

LinformerWang等人,2020年)用低秩矩阵近似整个注意力矩阵,将时间和空间复杂度降低到线性。Linformer不使用昂贵的SVD来识别低秩分解,而是添加了两个线性投影对于键和值矩阵,分别将其维度从。只要,注意力记忆就会大大降低。

可以采用其他技术来进一步提高Linformer的效率:

  • 投影层之间的参数共享,例如头部、键值和层(跨所有层)共享。
  • 使用不同的在不同的层上,因为较高层的头部往往具有更倾斜的分布(较低的等级),因此我们可以使用较小的在更高层。
  • 使用不同类型的投影;例如均值/最大池化、带核和步幅的卷积层

随机特征注意力(RFA;Peng等人,2021年)依赖于随机特征方法(Rahimi & Recht,2007) 用低秩特征图来近似自注意力中的softmax操作,以实现线性时间和空间复杂度。Performers(Choromanski等人,2021年) 还采用了随机特征注意,并改进了内核构造,以进一步降低内核近似误差。

RFA背后的主要定理来自(Rahimi & Recht, 2007),是一个非线性变换:

维随机向量来自,,无偏估计是:

然后我们可以编写如下注意力函数,其中是外积运算,是温度。

因果注意RFA在时间步骤中有(token)仅关注较早的键和值。让我们使用一个变量元组,,跟踪时间步的隐藏状态历史,类似于RNN

在这里大小为并且不应小于模型尺寸以获得合理的近似。Performer使用正随机特征图修改随机特征注意,以减少估计误差。它还保持随机采样正交以进一步减少估计量的方差。

基于强化学习的Transformer

自注意力机制避免将整个过去压缩为固定大小的隐藏状态,并且不会像RNN那样遭受梯度消失或爆炸的影响。强化学习任务肯定可以从这些特性中受益。然而,即使在监督学习中训练Transformer也相当困难,更不用说在强化学习环境中了。毕竟,单独训练LSTM代理可能相当具有挑战性。Gated Transformer-XLGTrXL;Parisotto等人,2019)是将Transformer用于强化学习的一种尝试。GTrXLTransformer-XL的基础上进行了两项改进,成功实现了训练的稳定:

  • 层归一化仅适用于残差模块中的输入流,而不适用于快捷方式流。这种重新排序的一个主要好处是允许原始输入从第一层流到最后一层。
  • 残差连接被GRU风格(门控循环单元;Chung等,2014)门控机制取代。

门控函数参数被明确初始化为接近恒等映射-这就是为什么存在期限。对学习加速有很大帮助。

决策Transformer(DT;Chen等人 2021) 将强化学习问题表述为条件序列建模的过程,输出以期望回报、过去状态和动作为条件的最佳动作。因此,使用Transformer架构变得非常简单。决策Transformer适用于策略强化学习,其中模型只能访问由其他策略收集的固定轨迹集合。为了鼓励模型学习如何行动以实现期望的回报,它会向模型提供期望的未来回报而不是当前的奖励。轨迹由三元组列表组成,并将其作为Transformer的输入序列:

添加并训练三个线性层,分别用于返回、状态和动作,以提取token嵌入。预测头学习预测对应于输入token。训练对离散动作使用交叉熵损失,对连续动作使用 MSE。在他们的实验中,预测状态或返回动作并没有发现有助于提高性能。实验将DT与几种RL算法基线进行了比较,结果显示:

  • 在低数据环境下,DT比行为克隆更有效率。
  • DT可以很好地模拟回报分布。
  • 拥有长上下文对于获得良好的结果至关重要。
  • DT可以与稀疏奖励一起工作。