一文窥探近期大火的Transformer以及在图像分类领域的应用

Transformer是一种基于自注意力机制(self-attention mechanism)的深度神经网络,这一机制原先用于自然语言处理领域。受Transformer强大的表示能力的启发,研究人员提出将Transformer扩展到计算机视觉任务中。与卷积网络和循环网络等其他网络类型相比,基于Transformer的模型在各种视觉领域上能获得更好的性能因此非常具有竞争力。本文首先将简要介绍Transformer的原理与其各个组成部分、Transformer在自然语言处理(NLP)领域的应用;接下来文章从图片分类的角度介绍相应Transformer的应用;最后本文将介绍Transformer在应用到CV领域时依然存在的不足以及未来可能的研究方向。

 Transformer是什么

Transformer最初被应用于自然语言处理领域中的机器翻译。如图1所示,它由一个编码器(encoder)模块与一个解码器(decoder)模块组成,多个相同的编/解码器共同构成了一个完整的网络。每个编码器有一个自注意力(self-attention)层与一个前馈神经网络(feed-forward neural network),而每个解码器由一个自注意层,一个编码解码注意力(encoder-decoder attention)层与一个前馈神经网络构成。在使用Transformer进行翻译之前,句子中的每一个词会被嵌入到一个d_{model}=512维的向量中。

一文窥探近期大火的Transformer以及在图像分类领域的应用_第1张图片 图1 最基本的Transformer流程

 自注意层

在自注意层(Self-Attention Layers)中,输入向量首先被三个投影矩阵转换成三个不同的向量,即查询向量(query vector)q,键向量(key vector)k与值向量(value vector)v,各向量的维度等于d_{model}=512。从不同输入获得的向量接着被合称为三个不同的矩阵Q、K和V。接下来,不同输入向量间的注意函数可由以下步骤计算出来:

第一步:计算不同输入向量间的得分(score),S=Q\cdot K^{T}

第二步:为了稳定梯度对得分归一化,S_{n}=\frac{S}{\sqrt{d_{k}}}

第三步:使用softmax函数将得分变为概率,P=softmax(S_{n})

第四步:获得加权数值矩阵,Z=V\cdot P.

以上过程可以被归纳为一个简单的函数:

Attention(Q,K,V)=softmax(\frac{Q \cdot K^{T}}{\sqrt{d_{k}}}) \cdot V

上式背后的原理很简单。步骤一计算了两个不同向量之间的得分,得分是为了确定我们在对当前位置的词进行编码时,对其他词的关注程度。步骤二对分数进行归一化处理,使其具有更稳定的梯度,以达到更好的训练效果,步骤三将分数转为概率。最后,每个值向量乘以求和概率,概率较大的向量将被下面各层更加关注。

需要注意的是,上述过程与每个词的位置无关,因此,自注意层缺乏捕捉句子中词的位置信息的能力。为了解决这个问题,一个d_{model}=512维的位置编码被加入原始的输入嵌入中来得到输入单词对应的输入向量。其中,词的位置由以下公式编码:

PE(pos,2i)=sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}})

PE(pos,2i+1)=cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}})

其中pos代表了词在一个句子中的绝对位置(第pos个词),i代表了当前位置编码的维度。

一文窥探近期大火的Transformer以及在图像分类领域的应用_第2张图片 图2 (左)自注意力层的运算过程;(右)多头注意力

多头注意力

自注意层随后进一步完善,增加了一种叫多头注意力(multi-head attention)的机制以提高最朴素版本的自注意层的性能。值得注意的是对于一个给定的词,我们往往希望在通读句子是将注意力放在其他几个有关联的词上。因此,一个单头的自注意层限制了模型关注与某一特定位置(或几个特定位置)的同时能不影响关注其他同样重要位置的能力。这是通过赋予注意力层不同的表示子空间来实现的。具体来说,不同的查询(query)、键(key)和值(value)矩阵被用在不同的头上。由于随机初始化,在经过训练后这些输入向量可以被投影在不同的表征子空间上。

一文窥探近期大火的Transformer以及在图像分类领域的应用_第3张图片 图3 Transformer的详细结构

 具体来说,给定一个输入向量与头的数量h,输入的向量首先变换成三组不同的向量,即查询组、键组、值组。每组分别有h个维度d_{q^{'}}=d_{k^{'}}=d_{v^{'}}=d_{model}/h=64。然后,来自不同输入的向量被合并在一起生成三组不同的矩阵\left \{ Q_{i} \right \}_{i=1}^{h}\left \{ K_{i} \right \}_{i=1}^{h}以及\left \{ v_{i} \right \}_{i=1}^{h}。接下来,多头注意力的处理过程如下:

MultiHead(Q^{'},K^{'},V^{'})=Concat(head_{1},...,head_{h})\cdot W^{O}

其中

公式中Q^{'}K^{'}V^{'}均为\left \{ Q_{i} \right \}_{i=1}^{h}\left \{ K_{i} \right \}_{i=1}^{h}以及\left \{ v_{i} \right \}_{i=1}^{h}拼接而成,W^{O}\in R^{d_{model}\times d_{model}}是一个线性投影矩阵

Transformer中的其他部分

编码器与解码器的残差。如图3所示,在每个编码器与译码器之间加上了一个残差链接的结构以增强信息的流动并得到一个更好的性能。在此之后加上一个层归一化。上述操作可悲归纳为:

LayerNorm(X+Attention(X))

前馈神经网络。在每个编码器与解码器中的自注意层后有一个前馈神经网络。这个前馈神经网络中包含了两个线性变换曾与一个ReLU激活函数,该过程可被下面的方程表述:

FFNN(X)=W_{x}\sigma (W_{1}X)

其中是两个线性变换层的参数矩阵,代表了ReLU激活函数。这边相当于一个两层神经网络,隐藏层的维数为

解码器的最终层。解码器中的最终层旨在将堆叠的向量变回一个词。为了实现这个功能,最终层使用了一个线性变换层加上一个softmax层。这个线性变换层将向量投影成一个维的向量,其中是词库中词的个数。最终一个softmax层将将这个向量变成概率值。

在计算机视觉任务中使用的大部分Transformer都是利用最原始Transformer的编码器模块。简而言之,它可以被视为一种新的特征选择器,它不同于卷积神经网络(CNN)和递归神经网络(RNN)。与CNN只关注局部特征相比,Transformer能够捕捉长距离特征,这意味着全局信息可以很容易地通过Transformer得到。与RNN的隐藏状态必须依次计算相比,Transformer的自注意层和全连接层的输出可以并行计算,容易加速,因此效率更高。因此,不仅在NLP领域,而且在计算机视觉领域,进一步研究Transformer的应用是很有意义的。

 

简要回顾Transformer在NLP领域的应用

在Transformer出现之前,添加了注意力的递归神经网络(如GRU和LSTM)赋予了大多数最先进的语言模型。然而,在RNNs中,信息流需要从上一个隐藏状态依次处理到下一个状态,这就导致训练过程难以加速和并行化,从而阻碍了RNNs处理较长序列或构建较大模型的潜力。2017年,Vaswani等人提出了Transformer,这是一种完全建立在多头自关注机制和前馈神经网络上的新型编码器-解码器架构,旨在解决seq-to-seq自然语言任务(如机器翻译),并轻松获取全局依赖性。Transformer的成功表明,单单利用注意力机制就可以达到与注意力RNN相当的性能。此外,Transformer的架构有利于大规模并行计算,可以在更大的数据集上进行训练,从而导致自然语言处理的大型预训练模型(PTM)的爆发。

BERT及其变种(如SpanBERT、RoBERTa)是建立在多层Transformer编码器架构上的一系列PTM。在BERT的预训练阶段,对BookCorpus和英文维基百科数据集进行了两个任务:1)通过先随机屏蔽掉输入中的一些tokens,然后训练模型进行预测,进行屏蔽语言建模(MLM);2)以成对的句子作为输入,预测第二句是否是文档中的原句,进行下一句预测。经过前期训练后,BERT可以在各种下游任务上单独增加一个输出层进行微调。具体来说,在执行序列级任务(如情感分析)时,BERT使用第一个token的表示进行分类;而对于token级任务(如名称实体识别),所有token都会被送入softmax层进行分类。在发布时,BERT在11个自然语言处理任务上实现了最先进的结果,树立了预训练语言模型的里程碑。生成式预训练Transformer系列(如GPT、GPT-2)是另一种基于Transformer解码器架构的预训练模型,它采用了掩蔽式自注意力机制。GPT系列与BERT的主要区别在于预训练的方式。与BERT不同的是,GPT系列是通过从左到右(LTR)语言建模预训练的单向语言模型。此外,句子分离器([SEP])和分类器令牌([CLS])只涉及到GPT的微调阶段,但BERT在预训练过程中学习这些嵌入。由于GPT的单方向预训练策略,它在许多自然语言生成任务中显示出优越性。最近,一个基于Transformer的巨型模型GPT-3,拥有1750亿个参数。通过在45TB压缩明文数据上进行预训练,GPT-3号称可以直接处理不同类型的下游自然语言任务,无需微调,在许多NLP数据集上实现了强大的性能,包括自然语言理解和生成。除了上述基于Transformer的PTM之外,自Transformer问世以来,还有很多其他模型被提出。下图中列出了几项比较具有代表性的模型。

一文窥探近期大火的Transformer以及在图像分类领域的应用_第4张图片 图4 基于Transformer的数个比较有代表性的模型

除了在一般自然语言处理任务的大型语料库上训练的PTMs之外,基于Transformer的模型已经被应用于许多其他NLP相关领域或多模态任务中。生物NLP领域,基于Transformer的模型已经优于许多传统的生物医学方法。BioBERT使用Transformer架构进行生物医学文本挖掘任务;SciBERT通过对114M科学文章进行Transformer训练开发,覆盖生物医学和计算机科学领域,旨在更精确地执行与科学领域相关的NLP任务;Huang等提出ClinicalBERT利用Transformer开发和评估临床笔记的连续表示,他们的研究还有一个副产物,ClinicalBERT的注意力图可以用来解释预测结果,从而发现不同医疗内容之间的高质量联系。多模态任务中,由于Transformer在基于文本的NLP任务上的成功,许多研究致力于开发Transformer处理多模态任务(如视频-文本、图像-文本和音频-文本)的潜力。VideoBERT使用基于CNN的模块对视频进行预处理以获得表征标记,在此基础上训练Transformer编码器学习视频-文本表征,用于下游任务,如视频字幕。VisualBERT和VL-BERT提出了单流统一的Transformer来捕捉视觉元素和图像-文本关系,用于下游任务,如视觉问题回答(VQA)和视觉常识推理(VCR)。此外,一些研究如SpeechBERT探讨了用Transformer编码器对音频和文本对进行编码,以处理语音答题(SQA)等自动文本任务的可能性。

基于Transformer的模型在各种自然语言处理以及NLP相关任务上的快速发展表明了其结构上的优越性和通用性。这使Transformer有能力成为自然语言处理之外的许多其他AI领域的通用模块。其在视觉领域的应用因此近年来被越来越多的人所重视。

两个Transformer在图像分类中的经典应用

受自然语言处理上的成功启发,一些研究者尝试研究类似的模型是否可以学习有用的图像表示。作为一种比文本更高维度、噪音更大、冗余度更高的模态,图像被认为是难以进行生成式建模的。iGPT和ViT是纯粹使用Transformer进行图像分类的两个模型。

iGPT

最初的图像生成式预训练方法浪潮已经过去很长时间了,Chen等人重新审视了这一类方法,并结合最近自监督方法的进展。该方法包括一个预训练阶段,然后是一个微调阶段。在预训练阶段,探讨了自动递减和BERT目标。此外,在NLP中应用序列变换器架构来预测像素而不是语言标记。预训练可以看作是一种有利的初始化,或者与早期停止结合使用时,可以看作是一种正则器。在微调过程中,他们在模型中增加了一个小的分类头,用于优化一个分类目标,并适应所有权重。

考虑一个未标注的数据集包含有高维数据。iGPT的作者们通过最小化数据的负对数似然来训练模型:

其中是图像数据的密度,其可被下式表示:

其中恒等置换的范围是,作者还考虑到了BERT目标,它对一个子序列M⊂[1,n]进行采样,使每个索引i独立地在M中出现的概率为0.15。M称为BERT掩码,通过最小化 "掩码 "元素xM的负对数似然来训练模型,条件是 "未掩码 "的x[1,n]\M:

在预训练中,他们会选择中的一个,并在预训练数据集上最小化损失。他们使用GPT-2公式的变换器解码块。特别是,层规范在注意力和多层感知器(MLP)运算之前,所有的运算都严格位于残差路径上。唯一的跨序列元素的混合发生在注意力操作中,为了保证训练AR目标时的适当调节,他们对注意力对数的n×n矩阵应用了标准的上三角掩码。当使用BERT目标时,不需要注意力logit掩码:在对输入序列应用内容嵌入后,他们将位置归零。

在最后的变换层之后,他们应用一个层规范,并从输出中学习一个投影,以对每个序列元素处的条件分布进行参数化的logits。当训练BERT时,他们只需忽略未屏蔽位置的logits。

在微调过程中,他们将最后一层规范的输出平均汇集在序列维度上,以提取每个例子的d维特征向量。

他们学习了一个从fL到类对数的投影,利用它来最小化交叉熵损失 。在实践中,他们实证发现联合目标效果更好,其中

ViT

最近,Dosovitskiy等人提出了一种纯Transformer结构,即视觉变换器(Vision Transformer,ViT),当直接应用于图像切片序列时,它在图像分类任务上表现良好。它们尽可能地遵循原始Transformer的设计。图5为Vision Transformer的框架。

一文窥探近期大火的Transformer以及在图像分类领域的应用_第5张图片 图5 ViT的框架图

为了处理二维图像,将图像x∈RH×W×C重塑为一连串扁平化的二维切片xp∈RN×(P 2-C)。(H,W)为原始图像的分辨率,(P,P)为每个图像切片的分辨率。N=HW/P2则是变换器的有效序列长度。由于变换器通过其所有层使用恒定的宽度,一个可训练的线性投影将每个矢量化路径映射到模型维度D上,他们将其输出称为切片嵌入。

与BERT的[类]令牌类似,对嵌入切片序列采用了可学习的嵌入,其在变换编码器输出处的状态作为图像表示。在预训练和微调过程中,分类头的大小都是一样的。此外,在切片嵌入中加入1D位置嵌入以保留位置信息。他们探索了不同的2D感知变体的位置嵌入,与标准的1D位置嵌入相比,并没有获得显著的收益。联合嵌入的severs作为编码器的输入。值得注意的是,视觉变换器只采用了标准变换器的编码器,而MLP头则由变换器编码器的输出跟随。

通常情况下,ViT首先在大型数据集上进行预训练,并对较小的下游任务进行微调。为此,去掉预训练的预测头,附加一个零初始化的D×K前馈层,其中K是下游类的数量。在比预训练更高的分辨率下进行微调往往是有益的。当输入更高分辨率的图像时,切片大小保持不变,从而获得更大的有效序列长度。Vision Transformer可以处理任意序列长度,然而,预训练的位置嵌入可能不再有意义。因此,作者根据预训练的位置嵌入在原始图像中的位置,对其进行二维插值。需要注意的是,这种分辨率调整和切片提取是唯一的一点,在这一点上,关于图像的二维结构的感应偏差被手动注入到视觉变换器中。

当在中等规模的数据集(如ImageNet)上训练时,这类模型产生的结果不大,其准确率比同等规模的ResNets低几个百分点。Transformer缺乏CNN固有的一些归纳偏差,如翻译等价性和区位性,因此在数据量不足的情况下训练时不能很好地概括。然而,如果在大型数据集(14M-300M图像)上训练模型,情况就会发生变化。作者发现,大规模的训练胜过归纳偏差。当在足够的规模下进行预训练并转移到数据点较少的任务中时,Transformer达到了很好的效果。在JFT- 300M数据集上预训练的Vision Transformer在多个图像识别基准上接近或优于最先进的技术,在ImageNet上达到88.36%的准确率,在CIFAR-10上达到99.50%,在CIFAR-100上达到94.55%,在VTAB套件的19个任务上达到77.16%。

综上所述,iGPT回收生成式预训练方法,并结合自监督方法,结果不是很满意。ViT取得了更好的效果,尤其是当它利用更大的数据集(JFT-300)时。但是,ViT的结构与NLP中的变换器基本相同,如何明确切片内和切片间的相关性仍然是一个具有挑战性的问题。另外,在ViT中,相同大小的切片是平等对待的。大家都知道,每个切片的复杂度是不一样的,这个特点现在还没有得到充分的利用。

总结与展望

Transformer由于其与卷积神经网络相比,具有竞争性的性能和巨大的潜力,正在成为计算机视觉领域的热门话题。为了发现和利用变换器的力量,正如调查中所总结的那样,近年来提出了许多解决方案。这些方法在广泛的视觉任务上表现出优异的性能,包括基本图像分类、高级视觉、低级视觉和视频处理。尽管如此,变换器在计算机视觉中的潜力还没有被充分挖掘出来,还有一些挑战有待解决。

虽然研究人员已经提出了很多基于Transformer的模型来解决计算机视觉任务,但这些作品都是启蒙性的解决方案,还有很大的改进空间。例如,ViT中的Transformer架构沿用了NLP的标准变换器。专门针对CV的改进版本还有待探索。此外,除了以上提到的任务外,Transformer在更多任务上的应用也是需要的。

此外,现有的视觉变换器模型大多是为了处理单一任务而设计的。许多NLP模型如GPT-3已经显示了变换器在一个模型中处理多个任务的能力。CV领域的IPT也能够处理多个低级视觉任务,如超分辨率、图像去噪、去下雨效果等。我们认为,只需一个模型就可以涉及更多的任务。

最后,为CV开发高效的Transformer模型也是一个开放性问题。Transformer模型通常是巨大的,计算成本很高,例如,基础ViT模型需要18B FLOPs来处理一幅图像。作为对比,轻量级的CNN模型GhostNet只需要大约600M FLOPs就可以达到类似的性能。虽然已经提出了几种压缩变换器的方法,但其复杂度仍然很大。而且这些原本为NLP设计的方法可能不适合CV。因此,高效的Transformer模型是代理在资源有限的设备上部署视觉Transformer。

 

 

 

你可能感兴趣的:(论文阅读与学习,自然语言处理,算法,神经网络,深度学习,图像识别)