本文旨在介绍 / 更新 Transformers 背后的主要思想,并介绍在计算机视觉应用中使用这些模型的最新进展。

读完这篇文章,你会知道……

  • 为什么 Transformers 在 NLP 任务中的表现优于 SOTA 模型。
  • Transformer 模型的工作原理
  • 这是卷积模型的主要限制。
  • Transformers 如何克服卷积模型的限制。
  • 用 Transformers 完成计算机视觉任务。

长期依赖和效率权衡

在 NLP 中,神经语言模型的目标是创建对文本中的单词语义尽可能多的信息进行编码的嵌入。这些语义不仅限于单词的定义,实际上,如果我们不知道它们所属的上下文,那么很多单词本身就毫无意义:在句子 “Transformers 很酷,因为它们高效” 中嵌入 因为 “他们” 一词如果没有考虑到它是指 “Transformers ”,将毫无意义。

最佳模型应该能够表示单词之间的这些相关性,即使在处理这些单词可能距离较远的大型文本时也是如此。我们说具有这种能力的模型可以编码长期依赖性。

以下内容介绍了 NLP(在 Transformers 之前)中的 SOTA 模型所面临的问题,以便有效地对长期依赖性进行建模。

RNN 问题

特别是,LSTM 和 GRU 是流行的 RNN,能够从文本中的单词编码丰富的语义。它们以顺序方式工作,一次处理一个令牌,并保留模型已经看到的所有这些令牌的 “内存”,以便将其某些语义添加到需要它们的其他单词中。

这些 RNN 能够通过被称为 “门” 的组件,使用神经网络来了解信息的元素应该保留,哪些信息应该被删除,哪些信息应该更新每次处理一个新的令牌

这些模型的体系结构使其对爆炸和消失梯度具有鲁棒性,这是 RNN 中的一个常见问题,这使它们能够跟踪序列中元素之间相当长的依赖性,尽管顺序地处理令牌并依靠将其信息保留在内存中,但是如果依赖关系真的很远,进行处理的并不很好。

这种顺序性质也使它们难以有效地扩展或并行化。每个前向通过都基于已经看到序列的先前样本的模型,即一次只能计算一次嵌入。

CNN 的问题

卷积在 NLP 任务中也很流行,这是由于使用 gpu 训练时的效率和可伸缩性。就像 2D 卷积可以从图像中提取特征一样,这些模型使用 1D 过滤器从文本中提取信息,文本以 1D 序列表示。

这类神经网络的感受域取决于过滤器的大小和使用的卷积层的数量。增加这些超参数的值会增加模型的复杂性,会产生消失梯度甚至无法训练的模型。残差连接和扩展的卷积也被用于增加这些模型的接受域,但是卷积在文本上操作的方式总是在它能够捕获的接受域上存在限制和权衡。

Transformers

Transformers 于 2017 年以一种简单且可扩展的方式出现,以在语言翻译中获得 SOTA 结果。它们很快应用于其他 NLP 任务,成为几个基准(例如 GLUE,SQuAD 或 SWAG)的新 SOTA。

通常会训练这些模型的大型版本并针对不同的任务进行微调,因此即使在数据匮乏的情况下它们也很有用。即使具有数十亿个参数,这些模型的性能似乎也不会饱和。模型越大,结果越准确,并且模型呈现的新兴知识越有趣(例如 GPT-3)。

Transformer 模型

给定一个包含 N 个单词的输入文本,每个 Transformer(W)都会创建 N 个权重,文本中的每个单词(Wn)都会产生一个权重。每个权重的值将取决于单词在上下文中的依赖性(Wn),以表示正在处理的单词的语义(W)。下图代表了这个想法。请注意,蓝线的透明度表示分配的关注权重的值。

在此,上一行代表正在处理的单词,下一行代表用作上下文的单词(请参见这些单词相同,但是如果它们被处理或用于处理另一个单词,则它们将被区别对待)。请注意,第一行中的 “他们”,“酷” 或 “效率” 具有较高的权重指向 “Transformers”,因为这确实是他们所指的词。

然后,这些权重用于组合每对单词的值,并为每个单词(W)生成更新的嵌入,该嵌入现在包含有关特定单词(W)的上下文中那些重要单词(Wn)的信息。

在幕后,为了计算这些更新的嵌入,转换器使用了自注意力机制,这是一种高效的技术,可以并行更新输入文本中每个单词的嵌入。

自注意力机制

从从输入文本中嵌入单词(W)开始,我们需要以某种方式找到一种方法来测量同一文本中每隔一个单词嵌入(Wn)的重要性(相对于 W 的重要性)并合并其信息 创建更新的嵌入(W’)。

自注意力会将嵌入到输入文本中的每个单词线性地投影到三个不同的空间中,从而产生三个新的表示形式,称为查询,键和值。这些新的嵌入将用于获得一个分数,该分数将表示 W 与每个 Wn 之间的依赖关系(如果 W 取决于 W’,则为高正分数;如果 W 与 W’ 不相关,则为高负分数)。然后,该分数将用于合并来自不同 Wn 单词嵌入的信息,从而为单词 W 创建更新的嵌入 W’。

下图显示了如何计算两个单词之间的注意力得分:

在图像中,蓝线表示来自第一个单词(W)的信息流,而棕线表示第二个单词(Wn)的信息流。

每个单词嵌入都乘以一个 Key 和一个 Query 矩阵,从而得到每个单词的查询和键表示。为了计算 W 和 Wn 之间的分数,将 W(W_q)的查询嵌入 “发送” 到 Wn(Wn_k)的关键嵌入,并且将两个张量相乘(使用点积)。点积的结果值是它们之间的分数,它将表示 W 相对于 Wn 的依赖性。

我们也可以将第二个单词用作 W,将第一个单词用作 Wn,这样我们将计算出一个分数,该分数代表第二个单词对第一个单词的依赖性。我们甚至可以使用与 W 和 Wn 相同的单词来计算单词本身对其定义的重要性!

自我注意力将计算文本中每对单词之间的注意力得分。分数将被 softmax,将其转换为权重,范围在 0 到 1 之间。

下图表示如何使用这些权重获得每个单词的最终单词嵌入:

看到现在每个单词嵌入都乘以生成其值表示形式的第三个矩阵。该张量将用于计算每个单词的最终嵌入。对于每个单词 W,将在文本 Wn 中为每个其他单词计算的权重乘以它们相应的值表示形式(Wn_v),并将它们加在一起。该加权和的结果将是单词 W!的更新嵌入。(在图中以 e1 和 e1 表示)。

我建议看看杰伊・阿拉玛(Jay Alamar)给那些想要更深入地了解自我注意力和模型的文章(https://jalammar.github.io/illustrated-transformer/),因为这是对该技术最重要部分的简短描述。

卷积归纳偏置

卷积模型已经在计算机视觉领域占据了主导地位,并取得了巨大的成功。卷积可以使用 GPU 有效地并行化,当从图像中提取特征时,它们可以提供合适的归纳偏差。

卷积运算施加了两个重要的空间约束,这些约束促进了视觉特征的学习:

  • 由于权重共享,从卷积层提取的特征是平移不变的,它们对特征的全局位置不敏感,而是确定特征是否存在。
  • 由于卷积算子的性质,从卷积层提取的特征是局部敏感的,每个操作仅考虑图像的局部区域。

但是,卷积归纳偏差对图像本身缺乏全局理解。他们擅长提取视觉特征,但无法对它们之间的依赖关系进行建模。

例如,卷积层模型的训练来识别人脸可以编码信息是否 “眼睛” 的特性,“鼻子” 或 “嘴” 出现在输入图像,但是这些表示不会有这样的 “眼睛上面鼻子” 或 “嘴下面的鼻子”, 因为每一个卷积内核不会足够大来处理多个这些特性。

为了跟踪图像中的远距离依赖关系,需要大的接收场,实际上,这涉及使用大核或卷积层的长序列,但以牺牲效率为代价,并使模型极其复杂,甚至无法训练。

计算机视觉中的 Transformer

与 Transformers 如何利用自我注意在文本中建模远程依赖类似,一些新颖的作品也展示了利用自我注意有效地克服归纳卷积偏差带来的局限性的技术。

这些工作已经在目标检测、视频分类、图像分类和图像生成等多个领域的计算机视觉基准中显示了良好的结果。其中一些架构能够匹配或优于 SOTA 的结果,即使在摆脱了卷积层并完全依赖于自我关注时也是如此。

从自我注意力生成的视觉表示不包含卷积所施加的空间约束。取而代之的是,他们能够根据任务以及在管道中放置该层的阶段来学习最合适的感应偏置。在模型的早期阶段使用的自我注意,可以学习到类似于卷积的行为。

自注意力层

计算机视觉中的自注意层以特征图为输入。目标是计算每对特征之间的注意力权重,从而生成一个更新的特征图,其中每个位置都有关于同一图像中任何其他特征的信息。

这些层可以直接替换或与卷积结合,它们能够比常规卷积关注更大的接受域,因此能够建模空间上距离较远的特征之间的依赖关系。

所使用的最基本的方法 (非本地网络和注意力增强卷积网络) 由压扁的空间维度的输入特性映射到一个序列特征形状 HW x F, HW 代表了扁平的空间维度和 F 的深度特征映射,并使用自我关注直接在序列获得更新后的表征。

这种自注意层的计算成本对于高分辨率的输入可能是昂贵的,因此它只适用于小的空间维度。

一些工作已经提出了解决此问题的方法,例如 Axial-DeepLab,他们沿两个空间轴顺序计算注意力,而不是直接处理整个图像,从而使操作效率更高。其他更简单的解决方案包括以较小的接收场为代价来处理特征图的贴片而不是整个空间尺寸(这是在视觉模型中的独立自我注意中完成的)。但是,这些较小的接收场仍可能比卷积核大得多。

将这些层与卷积层结合使用的模型,在模型的后一层中使用自注意时,会获得最优结果。事实上,在自我注意和卷积层之间的关系中,研究表明,模型中早期使用的自我注意层学习到的归纳偏差与卷积默认存在的偏差相似。

视觉 Transformers

与在卷积管道中包含自我注意不同,其他的工作已经提出了独特地依赖于自我注意层,并利用原来为 Transformer 提供的编解码器架构,使其适应计算机视觉任务。

在使用大量参数和使用大量数据进行训练时,这些模型以更简单的模型和更快的训练速度,在图像分类或目标检测等任务中产生与 SOTA 相似或更好的结果。

以下是三篇使用 Transformer 架构完成计算机视觉任务的重要论文的快速摘要:

Image Transformer (https://arxiv.org/pdf/1802.05751.pdf)

这项工作为 ImageNet 上的图像生成提供了一个新的 SOTA,并在超分辨率任务上显示了良好的效果。

他们提出将图像生成视为一个自回归问题,即每个新像素的生成只考虑图像中已知的像素值。在每一次特征生成中,self-attention 都将 m 个特征的平摊 patch 作为上下文,生成未知像素值的表示。

为了使这些像素值适合作为自关注层的输入,我们使用一维卷积将每个 RGB 值转换为 d 维张量,并将上下文 patch 的 m 个特征平化为 1 维。

下图为所提模型:

这里 q 表示待更新的嵌入像素。使用查询和关键矩阵 (Wq 和 Wk),它与内存中的像素 (用 m 表示) 中的所有其他嵌入相乘,生成一个分数,然后进行 softmax 并用作与矩阵 Wv 获得的值向量之和的权重。将结果嵌入到原 q 嵌入中,得到最终结果。在该图中,p 表示添加到每个输入嵌入的位置编码。该编码是由每个像素的坐标生成的。

注意,通过使用 self-attention,多个像素值可以同时被预测 (因为我们已经知道输入图像的原始像素值),而用于计算 self-attention 的 patch 可以处理比卷积层更高的接受域。然而在评估中,图像生成依赖于每个像素具有其邻居的可用值,因此只能一次执行一步。

DETR(https://arxiv.org/pdf/2005.12872.pdf)

DETR 提出了一个简单的模型,实现了与 SOTA 对象检测方法相同的精度和性能。

所提模型的结构如下图所示:

它使用从卷积主干中提取的视觉特征进行自我注意。在主干模块中计算的特征图将在其空间尺寸上展平,即,如果特征图具有形状(h x w x d),则展平的结果将具有形状(hw x d)。将可学习的位置编码添加到每个维度,并将结果序列馈入编码器。

编码器使用多个自我注意块来组合不同嵌入之间的信息。处理后的嵌入被传递到一个解码器模块,该模块使用可学习的嵌入作为查询 (对象查询),能够处理所有计算的可视化特征,生成嵌入。在这种嵌入中,执行目标检测所需的所有信息都被编码。每个输出都被送入一个完全连接的层,该层将输出一个包含元素 c 和 b 的五维张量,其中 c 表示该元素的预测类,b 表示边界盒的坐标 (分别为 1D 和 4D)。c 的值可以分配给一个 “no object” 标记,它表示一个没有发现任何有意义的检测的对象查询,因此不会考虑坐标。

该模型能够并行计算对一幅图像的多次检测。但是,它可以检测到的对象数量仅限于使用的对象查询的数量。

论文的作者声称,该模型在大型对象的图像上优于 SOTA 模型。他们假设,这是由于自我注意给模型提供了较高的接受域。

Vision Transformer (https://arxiv.org/pdf/2010.11929.pdf)

该模型提出了一种新的图像识别 SOTA,该模型甚至可以完全依靠自我关注,并且能够提供与当前 SOTA 相当的性能。

以下是所呈现模型的表示。

输入序列由从大小为 PxP 的小块中提取的像素值的扁平向量组成。每个扁平化元素被馈送到线性投影层,该线性投影层将产生它们所谓的 “补丁嵌入”。在序列的开头附加了一个额外的可学习的嵌入。通过自我关注更新后,此嵌入将用于预测输入图像的类别。可学习的位置嵌入也添加到这些嵌入的每个嵌入中。

通过将 MLP Head 堆叠在 Transformer 顶部(在我们添加到序列中的额外易学嵌入的位置)即可执行分类。

这项工作中还提出了一种混合体系结构。他们使用 ResNet 早期阶段的特征图来代替将投影的图像斑块用作 Transformer 的输入。通过端到端培训《Transformers》和此 CNN 骨干,他们可以实现最佳性能。

位置编码

由于 Transformers 需要学习他们正在接受培训的任务的归纳偏见,因此以各种方式帮助学习过程总是有益的。我们可以在模型输入中包含的任何归纳偏差都会促进其学习并改善结果。

当用转换器更新特性时,会丢失输入序列的顺序。Transformer 本身很难甚至不可能了解这个顺序,因此它所做的就是将位置表示聚合到模型的嵌入输入中。这种位置编码可以学习,也可以从一个固定的函数中进行采样,它被聚集的位置可以有所不同,尽管它通常是在输入嵌入处完成的,就在被输入到模型之前。

在计算机视觉中,这些嵌入可以表示特征按一维扁平化序列的位置,也可以表示特征的二维位置。

在该领域中,已经发现相对位置编码非常好用。它们由可学习的嵌入组成,这些嵌入学会对要素之间的相对距离进行编码,而不是对要素的全局位置进行编码。

总结

  • Transformer 解决了不仅仅限于 NLP 的问题,长期依赖对改善计算机视觉任务也很重要。
  • Transformer 模型是一种简单但可扩展的方法,如果将其建模为一系列嵌入,则可以应用于任何类型的数据。
  • 卷积是平移不变的,对位置敏感,并且对图像缺乏全局理解。
  • 可以在卷积管道中使用 Transformer 来生成图像的全局表示。
  • Transformer 可以用于计算机视觉,即使摆脱常规的卷积管道也可以产生 SOTA 结果。