Advertisement

51-6 Vision Transformer ,ViT 论文精读

阅读量:

李沐(沐神)和朱毅分享的内容非常精彩,在知识深度上也非常丰富。反复琢磨这些内容会有很大收获,并且也可以作为深入学习多模态大模型的基础材料。

An image is equivalent to 16x16 words. Furthermore, these models utilize transformers for large-scale image recognition tasks.

取代了传统的CNN架构,在理论层面上实现了计算机视觉与自然语言处理领域的无缝连接,并开创新的研究方向。在理论上有望成为一种简洁高效且普适性强的视觉核心架构,并且可以在不依赖任何标注信息的情况下完成学习任务。在充分的数据量支持下进行预训练时,
其性能超越了基于CNN的传统架构,
并克服了Transformer架构缺乏归纳偏好这一关键缺陷,
展现出在各种下游任务中良好的迁移能力。

取代了传统的CNN架构,在理论层面上实现了计算机视觉与自然语言处理领域的无缝连接,并开创新的研究方向。在理论上有望成为一种简洁高效且普适性强的视觉核心架构,并且可以在不依赖任何标注信息的情况下完成学习任务。在充分的数据量支持下进行预训练时,
其性能超越了基于CNN的传统架构,
并克服了Transformer架构缺乏归纳偏好这一关键缺陷,
展现出在各种下游任务中良好的迁移能力。

在过去的一年里,在计算机视觉领域中对影响力的贡献最大的工作无疑是vision transformer。它打破了自2012年Alex提出CNN以来,在这一领域长期占据主导地位的局面。其核心观点在于:通过在大量数据上进行预训练操作,在不依赖卷积神经网络的情况下直接采用从自然语言处理任务中继承而来的标准transformer架构同样能够有效解决视觉问题。值得注意的是,并非仅限于视觉任务——vision transformer还打破了CV与NLP在模型架构上的壁垒,在多模态研究领域也开创性地挖出了一片新的天地。因此,在过去的一年里,基于vision transformer的研究成果层出不穷:已有上百篇论文涌现出来尝试将其扩展至其他应用场景、对模型本身进行改进、深入分析其性能机制以及探索优化方法等研究方向不断拓展。此外,在目标函数设计和训练策略优化等方面也取得了一系列创新成果。可以说这基本上标志着CV领域进入了一个全新的时代阶段。而对于那些希望深入探讨Vision Transformer相关技术细节的研究者而言,《Paper with code》官方代码库无疑是一个绝佳的学习资源。

https://paperswithcode.com/sota

从ImageNet这一数据集来看,当前表现突出的方法多采用Vision Transformer作为基础架构。其中,在目标检测领域中,应用最多的仍是Swin Transformer架构,该研究方向在COCO数据集上的实验结果表明,目前该领域中应用最多的仍是Swin Transformer架构(ICCV 21最佳论文)。值得注意的是,在其他相关研究领域中,Swin Transformer同样展现出强大的适用性,可以说ViT几乎涵盖了视觉领域的各类核心研究方向。然而正是这项突破性的研究引起了广泛关注,其重要性不仅仅体现在其卓越的效果上,还因为它还具有许多与传统CNN架构显著不同的特点。

我们来研究一下这篇题为《Intriguing Properties of Vision Transformers》的文章,请问它的图一是什么?

图一阐述了在卷积神经网络CNN上运行的效果欠佳的现象,然而采用Vision Transformer方法时能够展现出色的效果。

例如第一个操作是遮挡,在极端严重的遮挡条件下,不仅仅是卷积神经网络而是人眼本身也难以察觉其中存在一只鸟。再举一个例子,在数据分布上出现明显偏移的情况下(具体表现为对图片进行了一次纹理去除操作),结果导致图片呈现出极具迷惑性的特征(这也让我很难判断其中到底是什么物体)。第三个方法则是在鸟头位置附加了一个具有对抗性质的patch;第四个方法则是将图片分解后再进行排列组合处理(这样一来卷积神经网络同样面临着难以准确识别这一物体的挑战)。

在这些案例中,vision transformer展现出卓越的表现。鉴于其卓越的表现以及具备许多独特的特性(如16×16分割),并且与传统卷积神经网络显著不同(即架构上有明显差异),我们今天就来精读一下这篇论文。今天我们就重点研读这篇论文——《An image is worth 16x16 words: transformers for image recognition at scale》(ViT)。文章探讨了将图像划分为这种网格形式(即每个网格大小为16×16像素)的方法及其在大规模图像识别中的应用。作者团队来自Google Research中的Brain Team实验室。让我们一起来了解这篇论文的核心内容吧!文章摘要部分介绍了这种方法的基本原理和优势。

Abstract摘要

在NLP领域中, transformer已经成为一个标准工具, 我们熟知BERT、GPT-3以及T5等模型, 但将其应用于计算机视觉领域时仍存在一定的局限性. Vision Transformer(ViT)通过直接作用于图像块实现了有效的图像分类性能, 尤其是在经过大规模预训练后再迁移到中小型规模的数据集时, 其表现与最先进的卷积神经网络不相上下. 在这一研究工作中, 作者将ImageNet、CIFAR-100和VTAB视作中型规模的数据集, 这一设定值得商榷, 因为对于许多研究者而言ImageNet已经是一个较大的数据集. 此外, 作者还指出了这种方法的一个显著优势: 它所需的学习资源远少于其他方法. 初看之下这似乎非常吸引人: 拥有两块或四块GPU的情况下难以训练大型模型. 但这种表述略显误导性: 实际上仅指相对于需要2500天TPUv3计算资源的大规模模型而言, ViT所需的计算资源更为有限. 这种对比显得有些讽刺意味: 就如同设定一个小目标并期望通过赚取第一个一亿来实现它.

Introduction引言

基于自注意力机制的网络系统特别强调的是transformer架构,在自然语言处理领域具有重要地位。当前广泛采用的方式是从大规模的数据集开始进行预训练任务,在特定领域的小数据集上进行微调优化。其实在BERT论文中就已经提出了这一概念。值得注意的是,在transformer架构下计算效率和扩展能力得到了显著提升,在实际应用中已经实现了拥有超过1000亿参数的模型构建工作。例如GPT-3模型就达到了这一水平。他指出,在模型和数据规模不断扩展的情况下我们还未遇到性能饱和的现象这非常值得深思因为我们知道单纯的增加数据量或扩大模型规模未必能带来更好的效果尤其在模型规模不断扩大的情况下很容易陷入过拟合问题而目前对于transformer架构尚未发现这种瓶颈效应。

在引言部分尚未开始阅读之前, 我想先阐述应用 transformer 模型到视觉领域面临的问题, 并首先回顾一下传统的 transformer 架构.

假如说我们有一个transformer,我们输入是有一些元素。假如说是在自然语言处理,这些就是一个句子里的一个一个的单词。输出也是一些元素,这里最主要的操作就是自注意力操作。自注意力操作就是说每一个元素都要跟每个元素去做互动,而且是两两互相的,然后算得一个attention。就是算得一个自助力的图,用这个自助力图去作加权平均,然后最后得到这个输出。因为在做自注意力的时候,我们是两两相互的,就是说这个计算复杂度,是跟这个序列的长度成翻倍的。目前一般在自然语言处理,就是说现在硬件能支持的这个序列长度,一般也就是几百或者上千,比如说在BERT,也就是512的这个序列长度。我们现在换到视觉领域,我们就是想用上transformer的话,首先第一个要解决的问题就是如何把一个2D的图片变成一个1D的序列,或者说变成一个集合。最直观的方式就是说我们把每个像素点当成元素,直接把2D的图片拉直,把这个扔到transformer里,然后自己跟自己学就好了。但是,想法很美好,实现起来复杂度太高。一般来说,在视觉里面,我们训练分类任务的时候,这个图片的输入大小,大概是224224这么大,那如果把图片里的每一个像素点都直接当成这里的元素来看待,那其实它的序列长度,就不是512了。那它的序列长度就是224224=50176,这序列的长度变成5万。其实也就意味着相当于是BERT序列长度512像100倍,所以这个复杂度是相当可怕,然后,这还只是分类任务,它的图片大小就22424这么大,那对于检测或者分割这些任务,现在很多模型的输入,都已经是变成600600,或者800800或者更大了,那这个计算复杂度就更是高不可攀。所以说我们现在回到引言第二段,说在视觉里,现在卷积神经网络还是占主导地位的,像这AlexNet或ResNet,但是transformer在NLP领域又这么火,自注意力又这么香,那我计算机视觉,就是想用一下自注意力怎么办?所以说,很多工作就是想怎么能把自注意力用到视觉里来,一些工作,就是说去把这个卷积神经网络和自制力混到一起用。另外一些工作,就是说整个把卷积神经都换掉了,就全用自注意力。这些方法,其实都在干一个事儿,就是说你不是说序列长度太长,所以导致没办法把transformer用到视觉里来嘛,那我就想办法去降低这个序列长度。我们可以不用图片当transformer的直接输入,我们把网络中间的这个特征图当做传的输入,那大家都知道,假如说我们有ResNet50,那其实在它最后一个stage res4的时候,它的feature map size,其实就只有1414那么大。那1414的话,你把它拉平,其实也就只有196个元素,意思就是说这个序列长度,就只有196,这个就是可以接受的范围之内了。所以他用这种方式,用特征图当做transformer输入的方式去降低这个序列长度。第二个方向,有两个例子,一个叫做stand alone attention,另外一个是Axial attention,就是一个是孤立自注意力,一个是轴注意力。对于这个孤立自注意力,它做的什么事?既然这个复杂度高是来源于用整张图,那如果我现在不用整张图,我就用一个local的一个window,就我就用一个局部的小窗口,那这个复杂度就是你可以控制,你可以通过控制这个窗口的大小来让这个计算复杂度在你可接受的范围之内。这个就有点相当于回到卷积那一套操作,因为卷积也是在一个局部的窗口里做的。对于这个轴自注意力工作,它的意思是说图片的复杂度高是因为它的序列长度,是N=HW,它是一个2D的矩阵,那我们能不能把图片这个2D矩阵拆分成两个1D的向量?所以先在高度上做一次自注意力,然后在宽度上再去做一次自助意力,相当于把一个在2D矩阵上进行自注意力操作,变成了两个1D的顺序的操作,那这样这个计算复杂度就大幅降低了。

他们虽然在理论上是高度有效的,在实际应用中却面临诸多挑战。具体而言,在视觉任务中广泛使用的自注意力机制并非单一设计,在缺乏专用硬件支持的情况下难以实现大规模模型的训练与优化。到目前为止,在这种基础性研究方面仍处于相对初期阶段的研究者们所构建的具体模型(如 stand attention 和 Axial attention)相比现下正在发展的百亿千亿级参数规模模型仍显不足与滞后。基于此,在大规模图像识别任务中传统残差网络的表现依然最为突出这一点无需置疑。接下来我们将会深入探讨 Vision Transformer这篇开创性论文的核心贡献所在。该论文采用了不同的叙述方式:它以transformer架构在自然语言处理领域的扩展性启发为基础并转而探索将其应用于视觉领域这一全新方向。具体而言作者们提出了一种直接将标准的transformer架构应用于图像处理的方法:即将每个图像划分为多个16×16大小的patch块并将这些块视为与语言模型中的单词相对应的基本单位进行处理这种方法避免了对特定视觉任务进行过度优化从而实现了广泛的适用性与适应性。然而这种方法也带来了新的挑战:如何高效地处理由此产生的较长序列长度?具体而言假设原始图像尺寸为224×224则分割后的Patch数量为(224/16)×(224/16)=14×14=196个元素这意味着每个Patch会被编码成一个嵌入向量随后通过全连接层(FC系列)生成线性嵌入并传递给transformer网络进行处理这一过程实际上实现了将原始图像转换为类似于自然语言句子的一连串词单元从而能够利用现有的transformer架构进行高效处理值得注意的是监督训练在这里显得尤为重要因为相比于NLP领域的无监督预训练方法(如language model或mask language model) Vision Transformer采用了有监督的方式进行学习这种做法不仅简化了模型的设计而且也为后续的研究工作奠定了基础

然而,在视觉领域中,默认情况下大多数基准模型仍然采用监督学习的方式进行训练。从这段内容可以看出,在视觉领域中将视觉问题视为自然语言处理任务来进行建模这一思路本质上是相同的。其中提到的一个关键点是:该研究工作采用了与BERT完全相同的transformer encoder架构设计。值得注意的是,在了解过BERT相关知识后阅读这篇文章并不会产生技术上的理解障碍。其核心目的是向读者展示利用统一架构实现多模态信息处理的可能性——即通过一个简洁统一的框架(如transformer),可以让不同的任务领域(如计算机视觉)也能够取得不错的效果。因此读者自然会产生这样一个疑问:是否在监督学习范式提出之前就有人尝试过将不同领域的问题统一建模?事实上答案应该是肯定的——在此之前确实存在相关研究尝试过类似的想法并取得了一定的研究成果

他指出,在技术上最接近这篇工作的是一篇发表于ICLR 2020年的论文。作者通过在CIFAR-10数据集上的实验表明:从输入图片中抽取尺寸为2×2的Patch是合理的。这是因为,在抽取Patch时采用2×2尺寸能够达到最佳效果;而如果选择更大的尺寸(如16×16),则可能导致信息丢失或计算量增加。具体而言,在完成Patch提取后,在每个Patch上进行自注意力机制的操作将有助于特征提取的有效性。因此,在抽取Patch时采用固定大小(如8×8)能够更好地捕捉图像的空间信息。值得注意的是:作者提到他们的工作证明了以下几点:当使用大规模的数据集进行预训练时(类似于NLP领域中的预训练方法), Vision Transformer只需对视觉数据进行标准化处理即可实现与现有卷积神经网络相当甚至更好的性能表现。此外:他们指出之前的这项研究仅使用了较小尺寸(如8×8)的Patch来处理图像;而我们的方法则支持介于小尺寸与大尺寸之间的中间尺度(如14×14或16×16),从而能够适应不同分辨率的图像输入(如ResNet-50模型)。综上所述:这项研究的主要贡献在于展示了Vision Transformer在视觉任务中的扩展潜力;特别是在大数据量和大模型的支持下:传统的卷积神经网络是否可能被Transformer取代这一问题得到了进一步验证并取得了积极成果

通常在引言部分尾声时会呈现主要观点或研究成果。让读者无需深入阅读全篇论文即可了解其主要贡献有多大。他说,在使用中型规模的数据集如ImageNet进行训练时,在未施加足够的约束条件下ViT模型的表现略逊于同样规模下的残差网络作者不得不做出解释这一结果看似不如预期但却是可预期的。

其原因在于,在与卷积神经网络相比时,transformer不具备卷积神经网络所拥有的归纳偏置。

这个归纳偏置这一概念本身就非常有趣。它所指的是一种先验知识或者提前做出的假设。举个例子来说,在卷积神经网络中我们通常会提到两个inductive bias它们分别是locality和平移等变异性。locality这一特性指的是由于卷积神经网络采用滑动窗口的形式对图像进行逐点处理因此它假设图像中相邻的区域之间往往会有相似的特征比如桌子和椅子通常会放在一起靠得越近它们的相关性就会越强。另一方面平移等变异性也就是translation equivariance其数学表达式是f(g(x))=g(f(x))这表明无论先执行函数G还是先执行函数F最终的结果都不会发生变化在这里我们可以将F视为卷积操作而G则代表平移操作这意味着无论图片中的物体如何移动经过卷积神经网络处理后的输出结果都会保持一致。当卷积神经网络具备了这两个归纳偏置之后它实际上就积累了很多先验知识因此只需要少量的数据就能训练出一个性能良好的模型而对于Vision Transformer(ViT)来说由于缺乏这些先验信息所以它的所有视觉感知能力都需要完全从数据中进行学习为了验证这一假设作者采用了更大的数据集来进行预训练工作其中包含了1400万个图像(ImageNet 22k数据集)以及3亿个图像(Google JFT-300m数据集)。通过大量数据的学习作者发现大规模预训练的效果显著优于仅依靠归纳偏置的方法而transformer模型则在具备足够多的数据进行预训练后能够展现出优秀的迁移学习效果具体而言就是在经过ImageNet 21K或者JFT-300m等训练后ViT模型能够达到与现有残差网络相当甚至更好的性能表现。此外作者还列举了多个具体的实验结果例如在ImageNet上的表现达到了88.5%的准确率以及其他几个融合了不同基准的数据集(如VTAB)也验证了ViT模型的良好鲁棒性

所以通读了一遍引言部分后发现内容非常简洁明了。
第一部分主要讲述的是transformer模型在自然语言处理领域表现出色的特点:即随着数据量或模型规模的增大其性能会持续提升而不会出现饱和现象。因此这一特性自然地引出了一个问题:是否可以将这种成功应用到视觉领域从而实现视觉问题的大规模性能提升?
第二部分重点介绍了前人在这方面的探索工作由于该方向极具发展潜力因此有必要明确本研究的核心创新点及其与现有方法的区别所在。
作者指出现有研究主要集中在两种主要方向上要么是将卷积神经网络与自注意力机制相结合要么是直接替换卷机神经网络但鲜有学者真正将transformer架构直接应用于视觉领域且取得显著效果。
第三部分详细阐述了vision transformer的具体实现方法即通过简单的图像预处理过程如分割成块并将其输入到标准transformer架构中即可完成视觉信息的建模无需进行其他任何修改即可实现计算机视觉任务与自然语言处理任务的有效结合。
最后两部分重点展示了实验结果证明了该方法在足够数据集支持下能够获得良好的推广性能。

在结论部分,作者采用了简洁明了的方式点明了这篇论文的核心内容。他指出该研究主要聚焦于将标准的transformer架构应用于计算机视觉领域的问题解决中。与以往的方法相比,在图像块抽取阶段引入了一种特殊的图像位置编码机制,并在此之后未再采用任何与视觉特性相关的归纳偏置。这种设计使得模型无需具备Vision领域的专业知识或先验知识即可运作。具体而言,在处理图片数据时,模型将每张图片视为一个由图像框组成的序列,并将其与自然语言处理中的词序列进行类比。这样一来,可以直接套用现有的NLP领域标准transformer架构来进行图像分类任务。值得注意的是,在结合大规模预训练策略后,这种方法展现出显著的性能提升,并且具有较高的训练效率优势。为了进一步探讨该方法的应用边界和潜在改进方向,在论文中还讨论了一些尚未解决的关键问题以及未来的研究方向。这种"挖坑"式的论文写作方式实际上是在为计算机视觉领域的研究指明新的探索方向:即如何将transformer架构迁移到视觉任务中去实现突破性进展。具体来说,在分类之外的其他视觉任务如分割和目标检测方面仍有待进一步探索和完善。作为对比,在目标检测领域表现尤为突出的DETR(Detectron2)模型则采用了不同的方法论框架来实现目标检测功能。然而基于ViT(Vision Transformer)架构的表现优异性,在其发布后的短短一个月内便出现了多篇创新性成果:一方面在2020年12月提出的ViT-FRCNN模型成功将ViT技术应用于目标检测任务;另一方面则通过SETR架构实现了对分割任务的有效求解。这些后续研究均充分验证了基于transformer架构在计算机视觉领域的广阔应用前景及其显著的技术价值

我想说的是大家的速度确实太快了。CV圈的this程度真的难以用月份来衡量。后来三个月后,Swin Transformer应运而生,它将多尺度设计成功地融入到Transformer架构中,这使得Transformer在视觉任务上表现得更加通用。可以说,Swin Transformer彻底改变了计算机视觉领域,它不仅具备强大的特征提取能力,还通过统一的架构实现了高效训练与推理。

新的未来研究方向具体来说是需要深入研究这一自监督学习的方法。

在NLP领域中所有的大型transformer架构都是采用自监督学习的方式进行训练的这一做法具有普遍性

可以说这篇论文确实是一篇很有潜力的开题之作。它不仅在视觉领域埋下了探索的伏笔,在随后的研究中你还可以借助transformer模型实现各类视觉任务的系统化处理。此外,在CV与NLP深度融合后的发展态势下,我们有理由相信多模态领域的研究可能会迎来一个崭新的突破期。而值得注意的是,在多模态领域的发展态势下,在此之前的一些工作已经展现出令人瞩目的成果。

自2017年以来,该方法在机器翻译方面取得突破性进展。

就其深入程度而言,在现有文献综述方面就其深入程度而言,并非没有先驱性的探索就其深入程度而言,并非没有先驱性的探索

Method方法

我们接下来将重点阅读这篇文章的第三节主体部分。在模型的设计上尽可能遵循最原始Transformers的理念。其优点在于我们可以直接利用NLP领域的成功架构而无需自行修改模型结构。由于Transformers在NLP领域已获得广泛认可一些高效的实现方案可以直接应用。接着,在3.1节中我们将介绍模型的整体架构图。

Vision Transformer这一图表具有较好的效果。我们也能观察到,在他人讲解或对比分析时,通常都是直接使用这个图表进行展示,并非需要花费时间和精力重新绘制新的图表。

Vision Transformer这一图表具有较好的效果。我们也能观察到,在他人讲解或对比分析时,通常都是直接使用这个图表进行展示,并非需要花费时间和精力重新绘制新的图表。

随后我们将大致梳理整个流程,并对每个环节进行深入分析;接着我们将对整个网络的所有前向操作进行详细研究

首先,在一篇论文中进行了如下操作:将一张图像划分为九宫格形式的Patch块,并对每个Patch块进行线性投射操作以获取其特征表示(即文中所述的Patch embedding)。然而,在实际应用中我们发现:虽然自注意力机制在理论上有良好的特性(即元素之间两两交互),但在实际场景中存在一定的局限性。具体而言,在图像领域这一内在顺序性会被人为打断的情况并不少见:例如图片1-9这样的编号顺序被打乱后就不再完整反映原始图像信息。类似地,在自然语言处理领域中我们通常会对输入序列进行位置编码以解决这类问题;而在本研究中我们采用了与之相似的方法:在每个Patch块末尾附加了位置编码信息(即文中提到的位置编码),从而使得整体Token序列既包含了图像块自身的视觉特征信息又保留了其在整体图像中的位置信息。在此基础上我们得到了一系列Token表示(即文中的输出序列),随后将其代入标准Transformer Encoder架构进行处理:通过这一过程系统会自动学习并提取各Token之间的复杂关联关系最终输出经过MLP Head分类器(即文中所述的最后一层全连接层)完成最终的分类任务。需要注意的是,在这一过程中我们采用了类似于BERT模型的设计思路:引入了一个特殊标识符(即文中所提到的星号*)来表示类别区分作用;同时该标识符也具备零初始化位移码特性以确保其不影响其他Token的信息提取能力。最后通过交叉熵损失函数对整个模型进行了优化训练

当具备这些patches时,在Vision Transformer架构中按照特定顺序依次执行以下操作:首先执行一次layer normalization操作(LN),随后进行multi-head self-attention计算(SA),再执行第二次LN操作,并完成多层感知机(MLP)计算(MLP)。每次重复上述过程总计L次即可构建完整的transformer encoder架构。综上所述,在此架构中对输入图像的处理流程相对简洁明了:其核心创新点在于高效地将输入图像转换为一组有序的token序列,并通过预定义的模块组合实现特征提取与表示学习。

随后我们可以具体按照论文中的描述来演示整个模型的前向过程。

假设我们有一个图像X, 其尺寸参数为X: H \times W \times C。当我们采用P\times P像素大小的patch分割时, 我们可以计算出总共有多少个patch?具体来说, 数目n可以表示为n = (H\times W)/(P\times P)。对于给定的例子而言, 当H=W=224, C=3, P=16时, 我们可以计算出n = (224\times 224)/(16\times 16) = 196, 即N = H^2, 这里N=196也是一个平方数(即N=H^2= (H/P)^{~} H^{\prime}= N^{~})。每个patch的空间维度实际上是其所在位置坐标加上通道信息所构成的一个向量空间。因此,在经过上述处理后, 原始图像被转换为由多个768维向量组成的矩阵形式。

经过一番努力后,在实现将vision问题转换为NLP问题的目标方面迈出了重要一步。

我的输入数据序列是一系列一维的token序列,并不再以二维图像形式存在。除此之外,在原始图像的基础上我们还需要附加一个特定的一个起始标记(Special Token),这个起始标记是一个特殊的字符。它的维度同样定为768维度的空间向量表示(即和后续图像信息空间维度一致),这样可以方便地与后续处理后的图像信息进行有效结合。因此最终经过预处理后的数据序列长度会有所变化:具体来说,在原有图片对应的token数量(196个)基础上增加了一个特殊标记的位置编码信息(即总长度变为196+1=197),每个token的空间维度仍然是768维向量表示(因此整个序列空间大小变为197768)。需要注意的是这里采用的是逐点相加的方式而不是简单的拼接操作来引入位置编码信息到所有的token中。完成这一操作后整个数据序列的空间大小依然维持在197768不变的状态。至此我们完成了对图片数据进行预处理的所有操作包括:添加特殊起始标记以及相应的全局位置编码信息处理过程生成了一个完整的transformer模型输入嵌入空间表示张量(即形状大小为[batch_size, 197, 768])。随后将此嵌入空间张量输入到预训练好的transformer模型中进行特征提取等后续处理。

然后我们就要做这个多头自注意力了。

在这里我们对多头自注意力机制进行了划分处理,并将其分解为三个独立的子矩阵K、Q和V。每个子矩阵均为197 \times 768的大小,并且由于采用了多头注意力机制的设计特点,在此过程中空间维度并未直接保持在768这一数值上。具体而言,在Vision Transformer的基础版本中采用了12个计算 attention 的头,在这种情况下模型的空间维度会根据总空间维度进行分配和缩减。具体而言,在Vision Transformer的基础版本中采用了12个计算 attention 的头,在这种情况下模型的空间维度会根据总空间维度进行分配和缩减。在这种设计下每个子矩阵的空间维度则缩减为768/12=64这一数值从而实现了在保证计算效率的同时提升了模型的关注能力

也就是说这里的K,Q,V,变成了19764,19764,197*64这样。

此外拥有12个注意力头

让我们再次回顾正文内容并快速检查第3.1节是否存在任何遗漏之处。他提到标准的transformer架构通常采用一维(1D)序列作为输入。那么对于二维(2D)图像该如何处理呢?具体来说,我们会将整个图像划分为若干小块区域(patch),这些小块区域的数量由N=H*W/P²决定。

该研究采用了一种基于离散余弦变换(DCT)的方法来处理图像特征提取问题。具体而言,在处理过程中我们采用了768维的空间特征表示方法。在模型构建阶段我们需要将原始输入数据映射到这个统一的空间中以便后续处理。为此我们引入了一个可训练的一维全连接层(linear projection)即所谓的patch embedding模块。这一模块的作用是将原始像素级别特征转化为更高层次的空间特征从而便于后续的操作。在模型训练过程中我们发现为了实现有效的特征学习还需要对位置信息进行相应的编码处理为此该研究采用了标准的一维位置编码方案(1D position encoding)。值得注意的是作者在实验中还尝试引入了其他位置编码形式如二维感知的位置编码(2D aware position encoding)。经过实验验证无论是一维还是二维的位置编码方案都能获得较为理想的结果且两者之间的差异并不显著这表明该方法在不同位置编码方案下具有较好的鲁棒性

改写说明

对于Vision Transformer模型而言,在对图像进行预处理以及输出结果进行后处理方面需要特别注意。值得注意的是这一部分通常遵循标准Transform架构的特点和规范。

现在我们来探讨这些消融实验的内容。首先,在这篇论文中引入了一个特殊的class token(类元),其目的是为了尽可能保持与原始transformer架构的一致性。这种类元不仅在NLP领域中被广泛采用,在图像处理任务中也展现出良好的效果。在NLP领域中,该类元被用作全局句理解任务的核心特征;而在本研究中,则将其拓展为图像整体特征的提取器。通过将这个token的输出传递到MLP结构中,并结合非线性激活函数的作用机制,在分类预测任务上取得了显著成果。

但是,在本研究中所采用的class token的设计方案是从NLP领域中进行了深入研究并成功借鉴而来。相比之下,在视觉领域的相关工作中,并未采取此类设计策略。例如,在当前研究中所涉及的深度残差网络ResNet50架构中(即ResNet-2-3-4-5),其前向传播路径经过了多个关键模块(如Res模块)之后输出了一个14×14的空间分辨率特征图(即该特征图的空间维度为14×14)。在此基础上进行全局平均池化操作(即Global Average-Pooling),这一步骤实现了对这一特征图的空间信息进行全局降维处理。

为什么直接对这n个输出应用全局平均池化操作后却无法获得最终特征?为什么要在此前添加一个class token以便后续进行token级分类?通过实验结果来看作者的主要结论是这两种方案都是可行的你可以选择直接进行Global Average-Pooling(GAP)操作从而获得全局特征用于分类也可以采用引入class token的方式实现同样效果Vision Transformers(ViT)实验中普遍采用了class token的方式这一设计意图是为了避免误认为模型性能提升源于某些特殊技巧或视觉领域的专用优化而是强调标准Transformer架构同样适用于视觉任务

那我们往下拉看这张图

就象征着全局平均池化技术,在计算机视觉领域中被广泛采用的方法就是运用该种操作来提取特征。而位置编码机制,则是自然语言处理领域中常用的策略对应起来的。可以看出,在这种情况下,
绿线与蓝线的效果表现相当一致。
然而作者指出,
虽然两者在功能上具有相似性,
但在实际应用中由于所使用的学习率存在显著差异,
因此调参技巧至关重要。
如果未能正确调节参数,
比如直接将位置编码机制的参数套用于全局平均池化操作,
则会导致明显性能下降(可能低至五到六个百分点)。
这提醒我们,在创新的过程中并非所有的想法都能立即生效,
关键还是要掌握调参这一门基本功。

我们再来看一下位置编码。

他在这里进行了系列消融实验研究,并核心内容主要包括以下三种类型:一是1D方向,在自然语言处理领域已有广泛的应用;二是2D方向的扩展方法;三是相对位置编码(relative positional embeddings)策略。其中1D方向的具体实现是基于传统序列数据的位置编码方法,在本文中我们采用了一种替代策略;而2D方向的方法则是通过将图像划分为3x3网格来实现的,并与传统的逐像素表示方式形成对比。

111213

212223

313233

为了表示一个九宫格的图像,在此采用了一种新的方法。这是否有助于解决视觉相关的问题?因为该方法引入了一个整体的结构信息。具体来说,就是说如果我们原来使用一维的位置编码,其维度为D,那么现在由于横纵坐标都需要表示,对于横坐标而言,你需要有一个d/2维度向量;同样地,纵坐标也需要一个d/2维度向量;最后将这两个d/2维度向量拼接在一起,从而得到一个长度为D的整体向量,我们将其称为二维的位置编码.第三种相对位置编码的概念是这样的:在1D的情况下,patch之间的距离可以用绝对距离来表示,也可以用相对距离来表征.例如它们之间的差值为7个单位的距离(即offset).这种方法也可以用来表征图像块之间的位置信息.然而消融实验的结果表明无论采用哪种方法都不会产生区别.

对于当前研究中的1D位置表示方法而言,在不显著影响模型性能的前提下(为了减少对标准transformer架构做出的重大修改需求),我们可以尝试使用二维或相对的位置编码作为替代方案。同时,在减少对标准transformer架构做出重大修改需求的前提下(本文中vision还采用了类token的位置编码策略),我们仍然沿用了该设计中的1D位置表示方法。

随后开始阐述该transformer的方法,在当前研究中这一技术已经被广泛接受。具体而言,在本文中并未对这种机制进行详细阐述,而是将其相关信息完整地整理并附在附录部分。类似地,在卷积神经网络的研究论文中也不会将具体的卷积操作置于正文部分。相反地,在本研究中,作者通过公式简洁明了地概括了整个流程。

刚开始你提到的X1P、X2P、XNP等术语实际上指的是图像块Patch(图像块),总共有N个这样的patch。每个patch都会被线性投影(linear projection)处理,即通过全连接层将其转换为patch embedding。将所有这些patch embedding拼接起来后,在前面添加一个class token(类token),这是因为我们需要用这些token来进行最终的分类预测。具体来说,在获得所有的token序列后,我们还需要对其进行位置编码(position encoding),这样才能有效地进行后续的模型推断与计算。这个处理过程就是整个输入流经模型之前的预处理阶段。其中Z0表示的就是这个最终的输入特征向量。

接下来,在这部分中就是一个循环结构,在每个循环周期内会对输入的数据进行一系列关键操作以实现模型的核心功能。具体而言,在每个循环周期内会对每个输入块执行两个主要操作:首先是基于多头自注意力机制的操作(Self-Attention),其次是MLP网络的操作(Multilayer Perceptron)。为了确保这些操作能够稳定地进行并获得高质量的结果,在这两个核心操作之前都需要对每个层级的数据进行归一化处理(Layer Normalization)。经过这一层级的处理后会生成中间结果(intermediate result),随后需要通过残差连接将中间结果与原始输入数据相结合以增强模型的学习能力。特别地,在完成所有层级的计算后会将最后一个层级生成的结果作为最终特征输出并将其作为分类任务的基础依据。

至此,在对vision transformer进行文字描述时已经结束。随后又补充了相关分析,并引入了归纳偏置这一概念。为了进一步提升性能,还提出了一个混合模型作为变体。在3.2节中进一步阐述了针对较大尺寸图片的微调方法。

那么先来看归纳偏置的问题,在视觉变换模型(Vision Transformer, ViT)中相比卷积神经网络(CNN),它所包含的图像特有的归纳偏置要少得多。举个例子来说,在CNN中存在局部性(locality)和位移不变性(translation invariance)等特性,在每一层结构中都有所体现,并且这些特性相当于贯穿了整个网络模型。然而在ViT中,则采用了多层感知机(MLP)这类局部且位移不变性的组件,在自注意力机制中则是全局化的表现。值得注意的是,在视觉信息处理方面,ViT并未像CNN那样进行深入应用2D图像信息的提取工作。实际上它仅在将图片分割成patch阶段以及引入位置编码(position embedding)时涉及到了与图像特性相关的内容;除此之外并未对图像的具体归纳偏置进行针对性的学习和应用。此外位置编码本质上也是通过随机初始化的方式来实现的,并未携带任何2D空间的信息内容;因此关于图像块之间的距离信息以及场景理解方面的知识都需要从头进行学习和构建。基于这种差异可以看出,在小规模数据集预训练阶段仅依靠少量归纳偏置支撑的ViT相较于数据效率较高的CNN确实难以取得更好的性能表现。基于此我们可以思考是否能够将两者的优势相结合构建一种混合型网络架构:即采用卷积神经网络进行特征提取作为输入部分,并将视觉变换模型作为后续的全局建模模块进行融合应用在这种框架下通过实验验证其有效性:具体而言就是将一张图片切割为16x16大小的patch块得到196个特征单元;随后将这些特征单元输入到全连接层进行处理得到最终结果;而在不切割图片的情况下则直接采用深度卷积网络如ResNet50对原始图像进行处理并获得14x14尺寸的特征图将其展平后作为ViT模型输入并完成后续的操作流程这种设计实现了两种不同路径下的特征提取方法之间的统一性和互补性从而为后续的学习过程提供了多样化的输入素材

然后我们再来看3.2,为什么要把这个微调放在这个Section 3?

此前有关研究表明,在微调过程中若采用较大尺寸的图像(而非224×224),而是使用256×256甚至更大的尺寸(如320×320等),将会获得更好的效果?然而,在Vision Transformer中同样不会放弃这一机会,在更大的尺寸上进行微调尝试。然而,直接利用预训练好的Vision Transformer进行这种调整并不理想。他指出,在更换更大尺寸图片时(若保持patch大小不变),原有的位置编码将失去意义。因为原来的序列长度是n= (H×W)/(p_h×p_w),而当图片变为H×W= (e.g., 320×320)时,则序列长度显著增加。理论上讲,Transformers能够处理任意长度序列(前提是硬件支持),但预训练阶段所固定的Positional Encoding在这种新场景下就不再适用了——因为它们建立在较小尺寸的基础之上(如9宫格对应1-9的位置信息)。现在扩大到更大的尺寸(如16宫格变为了25宫格),原有的位置编码范围无法直接应用了。针对这一问题,研究者们发现了一种解决方案:通过简单的二维插值操作即可解决这一问题。具体而言,在此情境下他们的操作等同于调用官方提供的torch.interpolate函数来完成插值任务。然而需要注意的是,并非所有的插值都能完美解决问题——当从较短序列扩展至较长序列时(例如从256扩展至512甚至768),简单的线性插值可能会导致性能下降的现象出现;这表明这种方法仅能作为微调过程中的临时 workaround,并不能从根本上解决该问题所在——即Vision Transformer在处理不同尺度图像时对二维信息的依赖性限制了其灵活性。

Experiments实验

让我们深入探讨实验部分的内容,在这一章节中我们主要对比了残差网络ResNet与VIT这两种模型的性能表现。为了全面评估每种模型的学习能力,在不同的数据集规模上进行了系统性的研究与测试。当考虑到预训练计算开销的问题时,在平衡预训练时间和测试效果方面显示出显著优势的是ViT模型:它在大多数数据量范围内都能取得最优结果,并且所需训练时间显著少于其他方法。为了进一步验证这一发现的可靠性与普适性,作者设计并实施了一个自我监督学习的额外实验:尽管没有达到最好性能的标准(即MAE模型的表现),但该方法仍展现出较高的潜力与应用前景

由于该模型架构不仅受限于Transformer组件本身,在输入处理方式上还与外部输入接口有着紧密关联

根据实验设计原理本研究中的所有模型架构均基于相同的训练策略与优化框架构建而成

vision transformer到底需要多少数据才能训练的比较好?

我们重点研究图三的内容,在Vision Transformer论文中具有核心意义的就是这一图表展示的信息。它明确指出,在不同数据集规模下ResNet与Vision Transformer的表现差异。具体来说,在最小规模的ImageNet上进行预训练时,Vision Transformer的表现略逊于ResNet;但在中等规模的数据集(如21K)上进行预训练时,则两者表现较为接近;只有在使用大规模数据集(如300M)的情况下才能充分展现Vision Transformer的优势。这一图表的核心信息可被总结为两个关键点:第一点是对于应用Vision Transformer的场景而言,在最低限度的数据量(约21K)下使用该模型更为合适;第二点则强调了当数据量显著增加时Vision Transformer展现出更好的扩展性和泛化能力。整篇论文的核心观点就在于阐述模型在不同规模数据下的性能对比及扩展性分析。

随后,在图三之后的阶段中,请允许我为您介绍这项研究的主要发现与创新点。该研究的核心在于对比分析Vision Transformer与现有的ResNet架构,并在此过程中引入了一系列严格的约束机制:包括Dropout、权重衰减以及标签平滑等技术手段来辅助其性能评估。基于这一背景,在图四中我们看到了一项有趣的进展:即所谓的线性少样本评估过程(linear few-shot evaluation)。具体而言,请注意这项研究采用了独特的思路:即一旦获得了一个经过预训练的Vision Transformer模型后,并不需要对其进行微调优化(fine-tuning),而是可以直接将其作为特征提取器应用到后续的任务模型中去。这种简化处理的方法使得整个系统具备了良好的泛化能力——尤其是当测试样本数量有限时这一点尤为突出。值得注意的是,在这项研究中所采用的数据集是专门针对视觉任务设计的标准数据集(JFT),而这一选择也带来了显著的效果提升效果并不十分显著的情况下我们依然能够观察到Vision Transformer在小样本学习任务中的潜在价值与应用前景

现在我们转向图五的观察。基于Vision Transformer这篇论文之前的讨论,其预训练成本较卷积神经网络(CNN)而言更为经济。因此,在此背景下作者需要进行更多实验来佐证这一结论。然而公众对Transformer的印象往往停留在其规模较大、训练难度较高的形象。

值得注意的是本研究发现了几个有趣的现像。第一个有意思的点在于,在相同计算复杂度下(即以蓝色的小块区域为例),ViT架构的表现明显优于ResNet架构(即 Vision Transformer 模型相比卷积神经网络架构而言具有更低的训练成本)。第二个有趣的发现是,在小规模模型上混合模型的表现令人惊喜地高(相较于单独采用 Vision Transformer 或 ResNet 的模型)。这并不令人意外(因为混合模型结合了两者的优点:即无需大量数据进行预训练且能达到 Vision Transformer 的效果)。然而有趣的是随着模型规模增大(即当模型逐渐变大时),这种差距逐渐缩小甚至消失(即在相同计算条件下的 Vision Transformer 仍然表现更好)。这可能与卷积神经网络提取特征的方式有关(实际上作者并未对此进行深入探讨;而如何对图像进行预处理以及如何实现有效的 tokenization 这个关键问题已有多篇论文进行了深入研究)。最后从整体趋势来看随着 Vision Transformer 模型规模不断增大其表现持续提升而未出现饱和现象(即其性能持续增长的趋势仍在继续)。虽然从图表来看除了混合模型外其他架构似乎也存在一定的饱和现象但这一结论还需进一步验证

分析完这个训练成本以后,作者就继续做了一些可视化。

通过这个可视化工具/方法/步骤来深入分析ViT内部表征的变化情况。类似于卷积神经网络架构,在视觉变换器中同样需要关注的是第一层所学到的具体特征类型。其中, Vision Transformer(ViT)的第一层,即所谓的linear projection layer(LPP),是该视觉变换器架构的核心模块之一,其主要职责是从输入图像中提取基础空间特征。进而参考图七中的可视化结果来进一步理解模型内部的工作机制。

图七详细说明了大E对RGB值进行嵌入的具体过程。具体而言,在这一部分中仅展示了前28个主成分,在这一过程中具体表现出了与卷积神经网络相似的行为模式——呈现出类似于Gabor滤波器的特点:其中包含了丰富的色彩元素以及纹理特征。作者指出这些成分可被视为基函数,并用于描述图像块中的底层结构特征

学习完patch嵌入之后

最后,作者就想看一下这个自注意力,到底有没有起作用。

由于人们对transformer的技术特点充满兴趣,并且注意到其独特的自注意力机制能够模拟长距离关系这一特性,在NLP领域中也展现出类似的特性:即使在长句中也能实现词与词之间的全局关联;而在图像领域则可观察到像素点间的全局关联特性。基于此背景我们进一步探讨自注意力机制的实际表现及其工作原理。图七展示了vit large模型的具体工作流程:横坐标表示网络深度(0-24层),纵轴则反映了每一层各头(共16个)的平均注意力距离变化情况。通过观察不同层中各头的注意力分布特征可以看出:初始几层多数自注意力头主要关注较近区域(约20个pixel),但随着层数递增部分特定头逐渐表现出较长范围的关注能力(可达120个pixel)。这充分说明,在网络的早期阶段就已经具备了捕捉全局信息的能力,并且这种能力随着网络深度逐渐增强而不断深化;最终在较高层次上实现了对语义信息的有效捕捉而非依赖于局部像素特征的作用机制

值得注意的是,在最初的卷积神经网络设计中由于receptive field受限通常只能感知局部特征;而随着Transformer架构的应用其在各层中的self-attention权重分布呈现出明显的层次化特征:前几层主要关注局部细节特征而随着层数增加逐渐发展出更高层次的空间语义表征能力

为了验证这一点, 作者又绘制了一个新的图表(图表六)。在这一部分中, 他采用网络最后一层的输出token作为生成这些图表的基础, 发现通过将该输出token作为注意力焦点反推原始输入图像, 我们可以从整体来看模型的学习过程和效果出发, 得出结论: 模型确实掌握了这些概念的核心。例如, 在第一个图表中我们可以观察到一个狗, 通过自注意力机制的作用域分析可以看出, 在第一部分中该模型已经识别出并聚焦于该物体。进一步的研究表明, 这一过程不仅限于局部特征的提取, 更重要的是通过全局特征提取来捕捉那些与最终分类结果相关的区域信息。具体来说, 这些关键区域包括哪些呢? 它们主要集中在与分类任务相关的图像部分进行详细分析和学习。

在文章尾部的部分中,作者进行了探索性的工作内容,并采用了自监督学习方法对vision transformer模型进行了训练.

这篇论文本身就有22页的内容(包括附录部分)。这些结果中有一些是作者亲自参与完成的(包括附录中的内容),而其他相关的结果则被放置在附录中进行补充说明。从方法论的角度来看,在NLP领域我们已经取得了显著进展(见图1)。然而,在计算机视觉领域我们仍面临诸多挑战。这种方法之所以具有重要意义,在于它在NLP领域发挥着不可替代的作用。值得注意的是,在计算机视觉领域这项技术同样具有重要的研究价值(见图2)。值得注意的是,在现有的研究中这种方法尚处于探索阶段,并未得到广泛应用(见图3)。值得注意的是,在现有的研究中这种方法尚处于探索阶段,并未得到广泛应用(见图4)。值得注意的是,在现有的研究中这种方法尚处于探索阶段,并未得到广泛应用(见图5)。

Conclusion结论

在回顾这篇vision transformer论文时(该论文行文风格简明扼要),就内容而言,在视觉领域中存在一个亟待深入挖掘的关键问题(即视觉域中的核心模型架构尚待突破)。该论文主要围绕三个维度展开论述:任务维度与架构设计维度(其中任务维度主要涉及模型的应用场景扩展),以及改进方向(包括模型架构优化与新算法探索)。具体而言,在任务维度上(从理论层面出发),传统的vision transformer仅专注于分类任务(分类性能表现优异),这使得其局限性逐渐显现:如果将视角拓展至其他应用领域,则具有较大的推广潜力(比如目标检测与图像分割)。在架构设计层面,则主要围绕tokenization方式与transformer block结构展开探讨(值得注意的是后续研究已证明即使采用非自适应的池化操作也能获得不错的效果)。此外在优化策略方面同样值得关注:除了传统的监督学习框架外(还可以探索更多创新的自监督学习方法),更重要的是该模型首次实现了计算机视觉与自然语言处理领域的有效融合(这一突破性的发现具有长远的应用价值)。基于以上分析可以看出,在当前研究热点中模型改进仍处于初级探索阶段:未来有望通过不断优化现有架构实现更高的性能表现,并进一步推动跨模态学习的发展进程

论文精读

论文精读

论文精读

https://arxiv.org/abs/2010.11929

全部评论 (0)

还没有任何评论哟~