Transformer中的自注意力和BEV感知中的交叉注意力是目前研究较多的两种注意力机制。在专题的第二篇文章里我们首先来讨论一下自注意力,交叉注意力会在下一篇文章中介绍。
Transformer以及其中采用的自注意力机制首先在自然语言处理领域(NLP)取得了成功的应用,替代了处理序列数据常用的循环神经网络(RNN)。之后,自注意力机制很快也被推广到了视觉领域,并同样展示出巨大的潜力。图像虽然本身不是时间序列数据,但其实可以看作空间上的序列,而视频本身就是时序数据。因此,理论上说,自注意力也可以用来处理图像和视频数据。
与卷积神经网络(CNN)在视觉领域的应用类似,自注意力也是从图像分类任务开始的,而ViT就是这个方向的开创性工作之一。之后,DETR将自注意力成功应用到了物体检测任务上。计算机视觉中的子任务有很多,除了图像分类,物体检测,还有语义分割,深度估计,3D重建等等。研究自注意力在每个子任务上的适用性当然是有意义的,但是一个更值得研究的方向则是采用自注意力来提取适用于多种任务的通用的视觉特征。这其实与CNN中采用大规模数据集(比如ImageNet)预训练一个通用的Backbone网络,然后不同的后端任务再用特定的数据集来进行微调非常的类似。Swin-Transformer和Plain Vision Transformer就是这个方向的两个代表性工作。以上这些方向和工作,本文都会进行详细的介绍。
在自动驾驶环境感知中,除了摄像头以外,激光雷达和毫米波雷达也是常用的传感器。虽然没有视觉领域的应用广泛,自注意力机制也逐渐开始被用于处理点云数据。因此,本文也会介绍一下这个方向目前的进展情况。此外,文章的最后也会简要介绍学术界对于自注意力机制有效性的探讨。
Transformer和自注意力机制最早是在NLP领域被用来处理序列数据。在Transfomer之前,处理自然语言序列数据的任务主要是由循环神经网络(RNN)及其变种来完成的。如下图所示,RNN的结构非常简单,其核心思想就是将前一时刻的状态ht-1(或者说“记忆”)和当前时刻的输入Xt合并到一起,以此生成当前时刻的状态ht,并按照这种模式顺序的处理序列中所有的数据。由于网络的参数都是在训练阶段就固定下来,RNN的这种结构不可避免的会导致历史信息的作用越来越弱,也就是无法保持“长时记忆”。此外,RNN的训练过程也会受到梯度消失和梯度爆炸问题的影响,这并不是本文的重点,所以这里就不展开讨论了。
长短期记忆网络(LSTM)在RNN基础上增加了输入,输出和忘记三个控制门。除了训练阶段固定的参数,这些控制门也受当前数据的影响,可以动态的控制需要记住和忘记什么信息,比例是多少。通过这种动态门控机制,LSTM可以更好的保持长期记忆,因此可以处理更长的序列。
相比于RNN,LSTM可以更好的处理长时依赖关系,也就是说可以提取长时间的相关性。但是不管是RNN还是LSTM,都采用顺序处理的方式,这种方式一方面限制了系统的并行处理能力,另一方面顺序处理还是会丢失信息,对于特别长时的相关性尤其时全局相关性(这里的全局是指整个时间序列)还是无能为力。在这个背景下,Google的研究人员2017年在“Attention is all you need”论文中提出了基于自注意力机制的Transfomer模型,打破了顺序处理的限制,把相关性提取的范围扩展到了全局维度,在很多NLP任务上都取得了非常显著的性能提升,也因此开启了业界研究注意力机制的热潮。
关于Transfomer,知乎上可以找到很多详细的解读文章。重复造轮子的事情就不做了,但是为了保证文章的完整性,这里还是要简单介绍一下Transfomer的核心思想。
Transfomer的核心是自注意力,而自注意力的的精髓则在于“自”上面,因为它描述的是数据各元素(对应论文中的Token)之间的相关性,也就是数据本身的内在关联。理论上说,自注意力本身并没有限制如何提取数据元素之间的相关性,但是目前大家所说的自注意力一般都是指Transformer中采用的点积(Dot-Product)注意力。这其实也是统计学中非常常见的一种相关性计算方式。
如上图所示,自注意力中的计算用到了Query,Key和Value,分别对应公式中的Q,K和V,它们都是通过对输入数据进行变换得到的。比如说输入数据是包含多个单词的句子,每个单词用一个向量来表示其特征。通过学习得到三个不同的变换矩阵对其进行处理,每个单词都可以转换为相应的Query,Key和Value,多个单词合到一起就变成了矩阵的形式。在上面的注意力计算公式中,Q和K相乘,对应Query和Key进行点积运算,得到的是Query和Key之间的相似性,再用Key向量的维度dk进行scaling。之后,softmax操作将一个query对应的多个key的相似度进行归一,使其和为1。这些相似度作为权重对相应的value值进行加权平均,最终得到这个query对应的输出。这整个过程其实就是对输入数据编码或者说特征提取的过程,而编码的依据则是数据内部各元素之间的相关性。
为了增强信息提取的能力,上述编码过程可以并行的重复多次,多次编码的结果叠加到一起得到最终的输出。这种结构称之为多头注意力,其本质其实就是多个单头注意力的组合。
在计算量方面,自注意力的计算复杂度是O(N²),这里的表示输入元素的数量,比如说句子中单词的数量。下面在介绍视觉注意力时,我们会看到这个平方级数的计算复杂度会导致算法在高分辨率图像上的扩展性变差。
以上是自注意力计算的核心部分,这个过程并不复杂,不论是从原始的论文还是各种解读文章中都可以很容易的理解和复现。但是,这个过程背后的设计动机又是什么呢?因为后面还要介绍自注意力在视觉感知中的应用,那么这里我们就以视觉任务为例来解释一下。
前面讲了,自注意力的任务就是要对输入数据编码,也就是提取特征。那么,让我们来回想一下计算机视觉中经典的特征提取方法。在深度学习流行之前,我们通常会手工设计一些特征提取模板,比如SIFT,Gabor,HOG等。这些特征描述了图像局部区域内的特性,并对一些变化,比如尺度,光照等具有很好的不变性。当然也有一些全局的特征,比如采用傅里叶变换提取图像低频信号,但并不是特别常用。在深度学习统治视觉领域以后,我们一般都采用卷积操作来提取局部的图像特征,而卷积核则是通过训练得到的。
无论是全局特征,还是局部特征,无论是手工设计,还是深度学习,特征提取的本质都在于刻画数据自身的关联。比如说一个3x3的卷积核,其描述的就是中心像素和周围3x3邻域之间的关系。但是,这些特征提取方法的作用域是固定的,提取的模板也是固定的。局部特征就是在一个固定大小的区域内提取信息,更大范围的作用域通常是靠图像缩放或者堆叠特征提取层来获得。全局特征可以描述整幅图像,但通常都是一些概括式的描述,丢失了局部细节的信息。
从自注意力的计算我们可以看到,每一个元素的特征提取都用到了数据中所有的元素,所以理论上说这是一种全局的特征提取。但是,这种全局特征提取采用的是加权求和方法,权重则是元素之间相关性,是动态计算得到的。也就是说,相关性较低的元素在特征提取的过程中产生的作用是比较小的。这就使得特征提取过程有一定的聚焦性,不会丢失掉重要的局部信息。所以,自注意力机制可以同时兼顾特征提取的全局和局部性,通过数据和任务驱动的方式来自主的确定特征提取应该关注的焦点。
如下图所示,Transformer是一个编码-解码的结构,分别包含6个编码器和6个解码器(N=6)。下面我们就来简单介绍一下它的工作流程。
首先,输入数据中的每个元素都要经过一个特征提取的过程。这一步主要是和具体的任务相关的,比如说单词转换成词向量,图像块转换为像素向量。假设输入数据包含M个元素,每个元素的特征向量维度为d,那么输入数据的维度就是M*d。
自注意力的计算没有考虑元素的位置信息,而这个信息通常对于后续任务来说又是很重要的,因此Transformer在输入特征上附加了位置编码特征。位置编码的计算公式如下,以此生成的位置特征和输入特征具有相同的维度d,与输入特征相加后就得可以作为编码器的输入了,其维度也是Mxd。
编码器主要由两部分构成,一个是多头注意力,另一个是全连接层(Feed Forward)。两个部分都包括了残差连接(Add)和归一化(Norm)。这两个操作都是深度学习中常用的技巧,所以就不展开讲了。多头注意力上一节中已经详细介绍了,而全连接层是为了对编码后的元素做进一步的特征提取,但是这里并不涉及元素之间的联系,每个元素是独立操作的。经过以上这些操作以后,输出的维度还是Mxd,但此时每个元素的特征都已经包含了所有其它元素的相关信息。多头注意力和全连接层作为一个模块在编码器中重复6次,用来提取具有更多语义信息的高层次特征。
在NLP的任务中,解码器也是非常重要的一个步骤。比如在句子翻译任务中,输入的句子通过编码器生成了特征以后,还需要输入给解码器才能得到翻译之后的句子。解码器的结构与编码器非常类似,都是多头注意力加上全连接层,并且重复6次。解码和编码过程区别主要在于以下两点。
首先,解码器有两个输入,一个是编码器的输出,经过处理以后作为key和value,另一个是当前要解码的词经过多头注意力模块处理后的特征,作为query。因此,这是一个编码-解码的交叉注意力,其中query来自解码器,而key和value来自编码器。在解码的过程中,key和value是不变的。
此外,在训练过程中,为了防止网络使用还未解码的元素,需要一个mask来遮挡这些元素,而在预测的过程中,初始的解码结果会设置为空。
与卷积神经网络(CNN)类似,自注意力机制在视觉感知中的应用也是从图像分类这个相对简单的任务开始的。之后,自注意力也被成功推广到了物体检测领域。近期,自注意力更是被用于主干网络结构,从而可以支持各种下游的视觉感知任务。下面就按照这个发展的线索来介绍自注意力在视觉感知中的应用。
ViT是Transformer在图像分类领域的第一个成功应用。其核心思路是将二维图像划分为多个相同小大的图像块。如果将图像看作NLP中的“句子”,那么图像块则可以看作“单词”,或者说token。有了这种表示结构以后,NLP中的Transformer编码器就可以直接被拿来用于提取图像特征。ViT的思路很直观,但是在具体的实现过程中有几个细节需要注意。
类别嵌入向量。Transformer编码器对多个图像块进行特征提取,但是最终该用什么特征进行完成图像分类呢?一个简单的做法是将所有图像块的特征融合到一起,比如采用MeanPooling。ViT中则采用了一个额外的类别嵌入向量,这个向量与图像块一样作为token参与编码过程,因此该向量最后会包含所有图像块的信息。根据2.1节中介绍的自注意力的计算方法,该向量其实就是所有图像块特征的加权平均,而权重则是通过学习得到的。类别嵌入向量最后会与MLP Head连接,以完成图像分类任务。
位置编码。原始的Transformer中采用了固定的位置编码特征,而ViT中采用了可学习的1D位置编码特征。每个图像块都有自己的位置特征,而这些特征可以在训练时进行优化。ViT中还测试了2D位置特征和相对位置特征,但是并没有得到更好的结果。无论采用哪种位置编码特征,其作用都是用来区分图像块的位置。每个图像块的位置特征都是不同的,这也就保证了图像块的顺序在输入时不能随意打乱。
预训练。基于Transformer的ViT模型只有在大数据集(比如包含300M张图像的JFT)上进行预训练时,才能体现出相对于CNN网络的优势。在小数据集上,两者的准确率相差不多。另外,ViT可以采用CNN处理后的特征图而不是原始图像作为输入,也就是说把CNN和Transformer进行组合。这种方式在小数据集上具有明显优势,在采用大数据集训练时则与Transformer的表现相当。
随着ViT在图像分类任务中的成功应用,Transformer也开始在物体检测领域崭露头角。DETR就是其中最早的也是最具有代表性的工作。
3.2.1 DETR
DETR的网络结构主要分为三部分:CNN主干网络,编码-解码网络和前馈预测网络。
DETR采用CNN主干网络来提取基础的图像特征,并且特征图的宽高分别是原始图像的1/32,也就是说特征图上的每个点对应原始图像中32x32的区域。这种做法与ViT中划分图像块的方式类似,而且是一种CNN与Transformer混合的方式。上一节中介绍了,这种混合的特征提取方式在小数据集上有明显的优势。
基于图像分块,DETR可以采用与ViT相同的编码器结构,唯一的区别在于DETR使用了固定的位置编码特征。解码器方面,ViT并没有这个模块,而DETR采用了与Transformer相同的编码-解码注意力和自注意力混合的方式。具体来说就是,key和value来自于编码器的输出,query则采用自注意力进行处理。DETR和Transformer的区别则在于query的来源和解码方式不同。Transformer中的query是当前要解码的词,解码的过程是顺序的,也就是说query按照句子中单词的顺序一个一个的输入。而DETR的解码过程是并行的,N个query同时输入给解码器。这里的N表示最大的目标个数,可以把它想象成字典中的N个单词,query其实就是这个N个单词的Embedding。这些Embedding的作用与位置编码类似,位置编码用来区分不同位置的图像块,而Embedding用来区分不同的query目标。
解码器输出N个特征向量,经过前馈网络的处理之后就可以得到N个目标的信息,包括类别和物体边框。这里的类别可以为“背景”,也就是说没有目标。至此,物体检测任务就完成了。从这个过程中可以看到,每个目标的检测都用到图像上所有位置的信息,因此这是一种基于全局感受野的物体检测方式。
DETR输出的是目标集合,因此在训练过程中损失函数需要能够衡量输出集合和标注集合的相似程度。这是一个二分图的匹配问题,DETR中采用了匈牙利算法来计算最优匹配,并给出相应的匹配损失。本文主要关注的是注意力机制,因此这个部分就不展开介绍了。
得益于全局感受野,DETR检测大物体的准确率较高,但是在小物体的检测效果上却不尽如人意。这主要由于CNN主干网络显著降低了图像的分辨率,低分辨率的特征图丢失了很多信息,这对于小物体来说尤其严重。增加特征图的分辨率可以提高小物体的检测效果,但是会大大增加编码和解码器的计算量(计算量与图像块数量成平方关系)。此外,DETR在训练过程中收敛速度非常慢,只有Faster RCNN的大约10到20分之一。这主要是因为在自注意力的计算中,图像块之间是全连接的方式,连接的权重初始时是平均分布的,学习的过程需要对这些连接进行重加权。从学习的最终结果来看,只有少数的连接被保留了下来,也就是说连接从稠密变成了稀疏的形式。
增加分辨率导致的大计算量和训练收敛速度慢这两个问题,都是由图像块的稠密连接方式,或者说全局感受野导致的。在物体检测的任务中,全局感受野固然能更好的建模上下文信息,但检测的关键信息还是来源于物体及其周边的区域。既然花费大量的计算量和训练时间来建模全局感受野是得不偿失的,那么人们自然的就会想到直接去构建稀疏的注意力,而不用费时费力的通过学习的方式得到。构建稀疏注意力的方式有很多,比如可以将注意力的计算限定在手工定义的局部区域内,或者采用可变形卷积让网络自动学习在从哪些稀疏的位置来计算注意力。下面要介绍的Deformable DETR就是采用了后者来将注意力的计算稀疏化,从而降低计算量并加速训练过程。
3.2.2 Deformable DETR
Deformable DETR与DETR的基本结构是一致的,其主要的区别在于注意力的计算细节上。前者只在固定数量的key上来计算注意力,而后者的key则对应所有的图像块,或者说特征图的每个位置。
在下图的例子中,key的数量固定为3(K=3)。特征图上每一个位置都可以作为query,其特征记作 ,位置记作。被用来学习key相对与query的位置 (也就是说从哪些稀疏的位置来计算注意力),以及注意力权重。在这个过程中,key的位置来自query特征,key的值来自特征图上的对应位置,注意力权重也来自query特征,这与传统自注意力计算中query,key,value的用法是不同的。此外,下图公式中的 对应多头注意力。通过这种稀疏的方式,注意力计算的复杂度降低到了,这里的是指特征图的大小。
为了获取多分辨率的信息,可变形注意力的计算还可以在多个分辨率的特征图上进行。最终编码器部分的输出还是多分辨率的特征图,但是特征图上每一个位置的特征都编码了多分辨率的信息。解码的过程与DETR类似,只是在交叉注意力部分采用了可变形注意力。在这个部分里,物体query对应的位置是通过对query embedding进行线性变换得到的。
在图像分类和物体检测任务中,注意力的应用都包括了编码和解码两个阶段。图像分类的解码阶段其实可以认为是隐含在类别嵌入向量里的。编码器用于提取图像特征,而解码器则与下游任务对应。如果我们只考虑编码器,那么注意力机制在这里的作用就是为了提取更好的图像特征,这与CNN作为主干网络所起到的作用类似。因此,Transformer也可以用来作为主干网络,以支持各种不同的下游任务。其实,在DETR的实验中,作者已经尝试将编码器输出的特征图用于全景分割任务,并取得了不错的效果。Deformable DETR中编码器生成的多分辨率特征图也可以看作特征金字塔,用于各种下游任务。
将Transformer作为主干网络已经称为目前注意力研究的一个趋势。为了能够适应各种下游任务,主干网络需要能够输出不同分辨率的特征图,尤其是高分辨率的特征图。但是,自注意力的计算代价是与图像大小的平方成正比的,在高分辨率图像上计算自注意力对于硬件算力要求非常高。因此,这方面研究工作的主要出发点就在于解决分辨率和计算量之间的矛盾。
Deformable DETR采用可变形卷积的思路,将注意力的计算局限在有限的像素点上(通常这个数量都远小于图像大小)。除此之外,还有另外两个典型的工作:Swin-Transformer 和 Plain Vision Transformer。
3.3.1 Swin-Transformer
Swin-Transformer的核心思路包括两点:多分辨率特征提取和基于窗口偏移(Shifted window, Swin)的Transformer模块。
多分辨率特征提取的结构如下图a所示,其基本的处理单元token是4x4像素的RGB图像块,因此网络的输入大小是H/4 x W/4 x (4x4x3)。在Stage 1中,经过线性特征提取和两个Swin模块后,分辨率保持不变,但特征维数变为C。在Stage 2/3/4中,相邻的2x2图像块被合并,分辨率降低为原来的1/2,特征维数本来是原来的4倍,但是最后降维到原来的2倍。通过以上操作,可以得到多分辨率的特征图,其分辨率分别是原始图像的1/4,1/8,1/16和1/32,而特征维数分别是C,2C,4C和8C。
在基于窗口偏移的Transformer模块中,多头自注意力(MSA)的计算是在局部窗口而不是整幅图像上进行的。在下图的例子中,自注意力的计算首先在4x4图像块大小的非重叠窗口中进行(Layer 1,W-MSA),之后窗口在水平和垂直两个方向上平移1/2窗口大小,也就是2个图像块,然后在平移后的窗口内进行自注意力计算(Layer 2, SW-MSA)。W-MSA和SW-MSA组成了一个Swin Transformer模块(上图b),并且在每个分辨率的特征提取中重复2次。将注意力计算局限在局部窗口内,可以保证其计算代价与图像大小成线性关系,从而大大降低了高分辨情况下的总体计算量。而不同窗口划分形式的交替进行,可以增加窗口之间的信息流动,从而增加了注意力计算的空间覆盖范围,扩大了感受野。因此,这种注意力计算方式可以在分辨率,计算量和感受野之间达到一个很好的平衡。
另外值得一提的是,Swin Transformer在计算query和key的相似度时,还额外考虑了对应图像块的位置差异。实验证明,这种方式比传统的位置编码效果要好。
Swin Transformer在图像分类,物体检测,语义分割这三个常见的视觉任务上都可以取代传统的CNN主干网络,计算量基本相当甚至更少,而准确率上却可以看到显著的提升。准确率的提升并不奇怪,因为自注意力具有比卷积网络更强的特征提取能力。计算量的降低主要归功将注意力计算限制在局部窗口内,但这是以牺牲特征提取能力为代价的。而窗口偏移的机制可以使信息在窗口间流动,扩大特征提取的感受野范围,从而在一定程度上降低局部窗口限制带来的影响。这也是Swin Transformer取得成功的关键点。
3.3.2 Plain Vision Transformer (PlainViT)
物体检测和语义分割网络中,基于金字塔结构的主干网络(比如FPN)通常都是重要的组成部分。金字塔结构可以帮助提取多尺度的特征,从而能够更好的感知不同大小的目标。但是金字塔结构是针对下游任务设计的,因此需要在特定的数据集上(比如COCO,KITTI等小规模数据集)进行训练。这就导致主干网络无法在大规模的数据上(比如ImageNet)进行预训练,而在大数据上预训练通常又是注意力机制取得成功的基础。
这个矛盾如何解决呢?Plain ViT给出的思路是采用单尺度的主干网络和多尺度的检测头,主干网络可以在大规模数据上进行预训练,而检测头只在对应具体任务的数据集上进行训练。这样做就可以把上游和下游任务独立开来,使系统的模块化和适应性更强,但前提是主干网络也可以学习到尺度不变特征。
如上图(右)所示,PlainViT采用单尺度的主干,patch的大小设置为16x16,因此特征图的分辨率是原始图像的1/16。这与ViT的patch大小一致,因此ViT的主干可以直接拿过来用,这也是PlainViT设计的最大动机。物体检测和语义分割网络需要高分辨率输入,因此PlainViT也采用了于Swin-Transformer中类似的窗口注意力,以减低计算量。这里的窗口大小与ViT的特征图大小(patch个数)一致,也就是14x14。这当然也是为了更好的利用ViT的主干网络。
窗口注意力丢失了全局信息,Swin-Transformer采用了窗口平移机制来保证不同窗口的信息交换。PlainViT实验了另外两种不同的策略。第一种就是标准的全局注意力,另外一种是在窗口注意力后增加一个或者多个残差卷积模块。这两种策略都可以促进信息在窗口之间流动,但是不可避免地也增加了计算量。因此,在PlainViT中,主干网络被划分为4组,每组6个注意力block,而上述两种窗口信息交换策略只实施在每组的最后一个block上,以保证计算量不会增加太多。
PlanViT的主干网络是单尺度的,但是检测头部分通过上采样和下采样获得了多分辨率的特征图,用于完成下游任务。实验证明这种简单的采样是非常有效的,类似FPN中shortcut连接是不需要的。作者认为这是由于ViT中的位置编码和高维的patch特征编码保留了大量的空间细节信息,因此可以直接进行上采样恢复高分辨率信号。
PlanViT的文章中提供了很多的对比实验结果,这里就不一一列举了。只说一个最重要的结论:通过采用Masked AutoEncoder(MAE)进行非监督的预训练,PlainViT在COCO数据集上的效果超过了Swin-Transformer这种基于多尺度主干网络的方法,尤其是主干网络规模较大的情况。
在视觉领域取得成功之后,自注意力机制也自然的被应用到了点云处理中。在这些应用中,自注意力的核心算法还是相同的,只是处理的数据有所不同。因此,本文只对如何处理点云数据做一个概述,而不详细介绍具体的方法。
与图像不同,点云是一种非结构化的数据。一般来说,点云数据可以表示为点视图和网格视图。关于这一点,可以参考本专栏之前关于点云物体检测的介绍。
如果采用点视图,也就是说直接处理原始的点,我们可以把点云中的每一个点看作一个Token,那么自注意力机制可以非常顺利的应用到点云数据之上。这时点云中所有点互相之间都会有影响,也就是说提取的是全局注意力。这样做虽然可以获得最大的感受野,但是当点云规模较大时计算量也会急剧上升,这与视觉领域面临的问题是一样的。因此,有的研究者提出采用局部的注意力,用类似PointNet++中的方法将点云进行层级化的聚类,注意力的计算只局限在每一层的局部聚类中。这样做可以有效的降低计算量,同时层级化聚类也可以保证局部和全局信息都会被提取。这与前面介绍的Swin-Transfomer有异曲同工之处。
如果采用网格视图,也就是说预先把点云转成网格的形式,那么这就与图像格式非常类似了,视觉领域中的自注意力方法理论上说都可以直接拿过来用。当然,这里的网格数据是比较稀疏的,为了提高计算效率,网格处理中常用的稀疏卷积也可以被应用到自注意力的计算中来。
Transformer和自注意力机制近几年在视觉领域取得了很大的成功,其根本原因是什么呢?是相关性计算方式,还是全局感受野,还是动态的注意力计算?这是一个非常有意义的话题,近期也开始有研究者在这个方向上进行尝试,其中一个典型的工作就是MLP-Mixer。
MLP-Mixer的结构非常简单。首先,与ViT类似,输入图像被分成小块,用全连接层进行初步的特征提取。这样,每个图像块都有了自己的特征,可以看作一个Token。接下来就是核心的Mixer层,它包含了两个步骤:Token-mixing和Channel-mixing。前者在Token的层面上操作,其实就是把所有的Token利用MLP进行加权平均。这与自注意力中的加权平均是类似的,只不过MLP提供的权重与Token之间的相关性没有直接联系,而且是在训练阶段就固定下来,并不是动态的。而后者就是标准的全连接层,用来扩展通道/特征维度。
与ViT相比,MLP-Mixer没有相关性计算,也没有动态的注意力,唯一保留的就是全局的感受野(Token-mixing层)。但是,在图像分类任务上,MLP-Mixer可以达到与ViT相似的效果,尤其是在海量训练数据和超大网络规模的前提下。这个研究结果说明了Transformer的成功主要来源于两点:全局感受野和海量训练数据。至于自注意力的计算方式,至少从与MLP-Mixer的对比中来看并不是特别重要。当然这也只是一个工作得出的结果,未来还需要更多的研究者在这个方向上进行深入探讨。