【11】ViT论文解析:图像为什么也能像句子交给Transformer
ViT论文解析图像为什么也能像句子交给Transformer论文链接https://arxiv.org/abs/2010.11929论文仓库https://github.com/google-research/vision_transformer在Transformer几乎改写完自然语言处理之后视觉领域并没有立刻跟上。同一个时期里NLP 已经习惯把一句话拆成 token 序列再交给自注意力建模图像分类这边却还在沿着ResNet、EfficientNet这条卷积路线继续打磨。问题不在于大家没见过注意力而在于一张图和一句话并不像同一类对象。句子天生就是离散序列图像却是二维连续信号。局部纹理、边缘、形状和空间邻接关系都缠在一起。把卷积拿掉之后这些原本由结构直接提供的先验还能不能保住一直是个很实在的问题。ViT的冲击力就在这里。它不是在卷积网络里插入几个注意力模块也不是继续沿着“卷积做主干、注意力做增强”的路线往前推。它直接换了问题如果尽量少改动标准Transformer只把图像改写成 patch 序列再用足够大规模的数据做预训练卷积是不是就不再是视觉主干的必要前提。这里先把patch说清楚它就是把整张图切成很多固定大小的小方块。后面ViT做的第一件事就是先把这些小方块当成视觉里的“词”再把它们送进Transformer。论文最后给出的答案可以先压缩成三句话图像确实可以先切成 patch再改写成 token 序列纯Transformer确实可以直接承担图像分类主干决定胜负的关键不只是结构替换而是大规模预训练把优劣排序重新洗了一遍背景这篇论文到底在验证什么ViT的直接研究对象不是所有视觉任务也不是所有Transformer变体。它研究的是图像分类主干网络而且用的是尽量接近 NLP 标准Transformer的最小改造版本。这点很关键。作者不是想为视觉重新发明一整套复杂结构而是要测试一条更极端的路线把图像切成 patch再把 patch 像词 token 一样交给Transformer。这样做同时带来两面性好处NLP 中已经成熟的结构和实现几乎可以原封不动地拿过来风险卷积网络长期依赖的图像归纳偏置会被大量拿掉所以全文的核心矛盾并不复杂CNN的优势是局部性、平移等变性和二维邻域结构被直接写进了模型Transformer的优势是更通用、更可扩展但它默认不带这些视觉归纳偏置核心判断ViT真正证明的不是后者“也能跑”而是在大规模预训练设定下后者可以变成更优的默认路线。为什么视觉模型长期依赖CNN卷积网络长期统治视觉不只是历史惯性。视觉任务天然带着很强的结构特征。相邻像素通常比远处像素关系更强局部纹理先组成边缘再组成部件再组成整体对象。CNN正好把这种规律写进了模型结构里局部感受野、权重共享、层级特征提取这些都在替模型提前表达“图像应该怎么学”。这也是为什么在很长一段时间里视觉研究更愿意在卷积主干上做改进而不是彻底换掉主干。因为卷积给的不是一两个技巧而是一整套归纳偏置。Transformer在这件事上的立场完全不同。它不假设局部一定比全局更重要也不预设先学边缘再学形状。它更像一个通用序列建模器只负责让 token 之间相互通信至于哪些关系该被重点建模要靠数据自己学出来。下面这张解释图把两条路线的差别压缩得很直观。图 1. 左边是CNN先抓局部、逐层扩大感受野的路线右边是ViT先切 patch再把 patch 当成 token 送入Transformer的路线。这张图要看的不是“谁更先进”而是两边把什么写进了模型。CNN把局部结构先验写进了网络本身所以小数据场景通常更稳ViT把更多自由度留给数据因此对预训练规模更敏感后面的实验结果基本都在验证这件事。也正因为前面这层差异存在接下来最自然的问题就变成了如果不用卷积ViT到底是怎么把一张图送进Transformer的。方法ViT到底怎么处理一张图ViT的方法部分非常克制。它引入的新设计并不多主要只有三件事把图像切成固定大小的 patch把 patch 线性投影成 token embedding在 token 序列前面加一个class token再接标准Transformerencoder原论文总览图把这个过程画得很清楚。图 2. 原论文Figure 1。图像被切成 patch每个 patch 被线性投影后加上位置编码整个序列进入标准Transformerencoder分类结果由class token的输出给出。顺着这张图往下看论文真正想强调的是它没有给视觉重新设计一套复杂骨干而是把图像输入改写成了标准Transformer能直接接住的形式。写成更技术的形式论文给出的输入定义是输入图像为x∈RH×W×Cx \in \mathbb{R}^{H \times W \times C}x∈RH×W×Cpatch 大小为P×PP \times PP×Ppatch 数量为NHWP2N \dfrac{HW}{P^2}NP2HW每个 patch 被展平成长度为P2CP^2CP2C的向量再通过可学习矩阵EEE投影到统一维度DDD对应的初始输入可以写成z0[xclass;xp1E;xp2E;…;xpNE]Epos z_0 [x_{\text{class}}; x_p^1E; x_p^2E; \ldots; x_p^NE] E_{\text{pos}}z0[xclass;xp1E;xp2E;…;xpNE]Epos这里有两个容易被低估的点。第一ViT不是把像素直接拿来做 token而是先把像素块压成 patch token。patch 化的意义不只是“形式上更像 NLP”而是把像素级别几乎不可用的注意力成本压缩成 patch 级别可训练的序列长度。第二位置编码仍然是一维、可学习的位置编码而不是特意为视觉定制的复杂二维结构。论文明确说他们没有观察到更复杂的位置编码带来显著收益。整篇论文的态度都很一致尽量少做视觉特化尽量测试标准Transformer到底能走多远。结构先搭到这里下面就要回答另一个更现实的问题这套设计为什么没有在一开始就直接赢过CNN。为什么ViT一开始打不过CNNViT最值得细读的部分不是公式而是Inductive bias那一节。作者明确指出ViT比CNN少得多的图像专属归纳偏置。CNN里局部性、二维邻域结构和平移等变性会在网络每一层持续起作用。ViT不一样。它只有两处显式用了二维图像结构一开始把图像切成 patchfine-tuning 时为了适配更高分辨率对位置编码做二维插值除此之外patch 之间的空间关系、哪些区域彼此相关、局部模式该如何被优先建模几乎都要靠数据自己学出来。这直接解释了论文里最重要的一个现象ViT并不是从一开始就压过CNN。如果只在ImageNet这种中等规模数据上训练、又没有很强的正则化ViT的准确率会比同级别ResNet低几个点。这不是失败案例而是论文结论的一部分。少了卷积写死在结构里的局部先验模型就更依赖大规模数据去把这些规律重新学回来。为什么论文还要讲hybrid和高分辨率微调论文并不是只比较“纯ViT”和“纯ResNet”。方法部分专门介绍了 hybrid architecture。hybrid 的做法是输入序列不直接来自原始图像 patch而是来自 CNN feature map。也就是说前端先让卷积提一层局部特征再把 feature map 展平并投影成Transformer所需的序列输入。这一步的意义很清楚。论文没有把问题偷换成“卷积一无是处”而是把 hybrid 当成中间参照物去回答更细的问题局部卷积前端在小预算、小模型下是否仍有帮助如果模型继续变大、数据继续变多这种帮助会不会保留下来后面的 scaling 结果表明hybrid 在较小计算预算下确实略优但这个优势会随着模型规模上升而消失。这意味着卷积前端不是完全没价值而是在大规模预训练 regime 里不再是决定性前提。微调和高分辨率处理也值得单独说清。论文的做法是预训练后移除原有预测头换成一个零初始化的D×KD \times KD×K线性层其中KKK是下游类别数fine-tuning 时通常使用比预训练更高的输入分辨率麻烦在于分辨率变大后patch 大小不变序列长度就会增加。Transformer理论上可以处理更长序列但预训练好的位置编码无法直接对齐新分辨率。论文采取的办法是对预训练位置编码做二维插值。这一步很重要因为它说明ViT并不是完全拒绝视觉结构而是把视觉归纳偏置压缩到少数必要节点而不是像CNN那样在每一层反复写入。ViT-B/16这种名字到底是什么意思ViT还有一个影响很深、但常被一笔带过的贡献它把视觉 backbone 的命名方式也带进了新的范式。图 5. 原论文Table 1。这张表给出ViT-Base、ViT-Large、ViT-Huge的层数、隐藏维度、MLP 维度、注意力头数和参数规模。这张表先回答的是“B、L、H到底差在哪”。答案是模型层数、隐藏维度、MLP 宽度和参数规模都在变大。后面/16、/32这种后缀则对应 patch 大小。所以ViT-B/16这种名字实际上同时告诉了两件事这是Base规模的模型输入会被切成16×1616 \times 1616×16的 patchpatch 越小token 数量越多信息更细但计算开销也会上升。patch 越大序列更短计算更省但输入一开始就更粗。后续很多视觉模型的设计权衡仍然围绕这条线展开。实验数据一变大为什么ViT就反超了如果只看结构ViT很容易被误读成一句过于简单的话把图像切成 patch再把Transformer套上去事情就成了。原论文最重要的实验恰恰是在反驳这种读法。图 3. 原论文Figure 3的核心部分。横轴是预训练数据集规模纵轴是迁移到ImageNet后的 Top-1 准确率。这张图先回答一个关键问题ViT到底是不是从一开始就比CNN更好。答案不是。图里从左到右分别对应更大的预训练数据规模。数据还小时BiT这类强ResNet基线并不落下风甚至更稳。可一旦预训练规模从ImageNet走向ImageNet-21k再走向JFT-300M更大的ViT变体开始明显上升并逐步压过卷积模型。核心证据ViT的成功不是单靠结构更换直接得到的而是“patch token 化 大规模预训练”共同成立的结果。少了后半句这篇论文就会被误讲成一次简单的架构替换。为什么scaling study说明ViT不是偶然涨点如果说Figure 3说明了“数据规模会改写胜负关系”那么Figure 5和Table 6说明的是这种变化不是单点偶然而是出现在更系统的 scaling 研究里。论文在JFT-300M上做了一次受控 scaling study模型池包括7 个ResNet6 个Vision Transformer5 个 hybrid作者把迁移性能对照总预训练计算量来画得到Figure 5。图 4. 原论文Figure 5。图里比较的不是单一精度而是不同架构在总预训练计算量下的迁移表现。这张图先看左下角小模型或较小预算下hybrid 和ResNet仍然有竞争力。再往右上看ViT的点越来越靠前。这个趋势说明它不是只靠“多喂一点算力”碰巧赢了某个 benchmark而是扩展曲线本身开始更占优。论文从Figure 5和Table 6提炼出的三个结论可以直接保留性能/计算权衡ViT在 performance/compute trade-off 上整体压过ResNethybrid 的位置小预算下略优但随着模型规模变大这个差距会消失扩展趋势在论文尝试的范围里ViT的扩展曲线还没有明显饱和其中第一点最关键。作者的表述非常直接为了达到相同的平均迁移性能ViT大约只需要2-4×2\text{-}4\times2-4×更少的计算。这才让ViT不再只是“某个大模型跑出了更高分数”而更像是一条值得继续扩展的新路线。除了分数更高论文还补了什么证据ViT没有停在“分数更高”这里。论文还尝试解释模型到底学到了什么、代价又是否真的不可接受。在Inspecting Vision Transformer那一节里作者观察到第一层 patch 投影学到的基函数看起来是合理的局部结构表示位置编码的相似性会反映图像内的距离关系一些 attention head 在很浅层就已经能整合全图信息另一些 head 在低层保持较小的 attention distance更像在做局部处理这些观察不能单独证明模型已经“真正理解了视觉结构”但足以说明去掉卷积之后模型并没有完全失去局部感而是在训练后自己学出了局部和全局两种不同尺度的行为模式。效率部分论文在附录里还给出了经验计算成本分析。图 6. 原论文Figure 12。左图比较推理速度右图比较同设备上能容纳的最大 batch size。这张图给出的结论是速度在相近模型级别上ViT的实际推理速度和类似规模的ResNet可以接近内存大模型下ViT在每核可容纳 batch size 上更占优也就是更省内存这里的边界也要说清。论文并没有说“自注意力从此完全没有分辨率成本”理论上的双二次增长仍然存在它只是在说明在论文考察的模型规模和分辨率范围里ViT并没有表现出直觉上那么不可接受的效率问题。结论与边界哪些结论已经成立哪些还不能下如果把ViT的结论压缩成最严格的版本论文已经证明的是纯Transformer可以直接用于图像分类主干当预训练规模足够大时缺少卷积归纳偏置不再构成决定性障碍在大规模预训练设定下ViT在迁移性能与计算成本权衡上可以优于强CNN基线hybrid 前端在小预算下有帮助但不是大规模 regime 里的必要条件论文没有直接证明的是Transformer在所有视觉任务上都会天然优于CNN纯Transformer在小数据场景下同样更优patch token 化是视觉建模的最终形式更高分辨率和更长序列下的效率问题已经彻底解决边界提醒这两个列表必须分开。否则就会把这篇论文从一次严谨的 regime 验证误讲成“卷积时代结束”的口号。ViT为什么成了后续视觉大模型的起点如果只把ViT看成“图像分类精度更高了一些”这篇论文的重要性就被说轻了。它留下的是一条之后不断被复用的主线图像可以先被 token 化视觉主干可以直接使用Transformer大规模预训练会明显改变视觉模型的优劣排序后续多模态模型可以直接继承这套视觉编码方式这条线后来一路走到了CLIP、BLIP-2、LLaVA、InternVL这些视觉语言模型里。很多人今天说“视觉塔”时脑子里默认对应的其实已经是某种ViT变体而不是传统ResNet。历史位置ViT的位置更像一个分界点。它没有终结卷积也没有把视觉问题一次性彻底解决但它证明了另一件此前并不显然的事图像也可以像句子那样先变成 token再交给统一的序列模型去学。最后只记住三件事ViT把图像改写成了 patch token 序列预训练规模一变大胜负关系开始倒向Transformer它把视觉 backbone 从卷积范式推向了统一的 token 序列范式
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2558050.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!