【Transformer 与注意力机制】45|ViT:patch size 和分辨率如何锁死序列长度,归纳偏置去哪了

💡 原文中文,约15000字,阅读约需36分钟。
📝

内容提要

本文探讨视觉Transformer(ViT)的核心设计:将图像切分为patch作为token,并分析其代价。关键点包括:patch大小与分辨率决定序列长度,影响注意力机制的二次方计算成本;CNN的归纳偏置在小数据上更优,而ViT需大数据;DeiT通过数据增强和蒸馏提升训练效率;Swin通过窗口注意力降低复杂度。文章还讨论了位置编码失效、层级结构及未来高分辨率挑战。

🔎

延伸解读

patch size 与分辨率的工程权衡

ViT 的序列长度由 patch size 和分辨率共同决定,且 attention 的计算量随序列长度平方增长。这意味着,选择 patch size 和分辨率时,实际上已经锁定了模型的算力和显存需求。例如,从 224px 提升到 1024px,patch16 的全局注意力代价会暴涨 437 倍,而改用 patch32 或窗口注意力可显著缓解。因此,在实际应用中,需根据硬件资源和任务需求(如高分辨率检测)仔细权衡 patch size 与分辨率,而非事后调整。

CNN 归纳偏置与数据规模的关系

CNN 的归纳偏置(局部性、平移等变性、层级结构)在小数据集上优势明显,而 ViT 需要大规模数据才能发挥潜力。ViT 论文的实验显示,在 ImageNet 规模上,CNN 基线优于 ViT;但在 JFT-300M 规模上,ViT 反超。这提示我们,当数据量有限时,选择 CNN 或引入类似先验的架构(如 Swin)可能更稳妥;而数据充足时,ViT 的灵活性可能带来更好性能。

DeiT 的启示:数据增强与蒸馏的作用

DeiT 并非让 ViT 在更少数据上学习,而是通过数据增强和硬标签蒸馏提高训练信号密度,从而在 ImageNet-1k 上训练出有竞争力的 ViT。其关键改动是硬标签蒸馏,相比软标签蒸馏带来显著提升。这表明,在数据有限时,通过精心设计的训练策略(如增强、蒸馏)可以弥补架构先验的不足,但并非免费午餐,仍需依赖大量增强手段。

位置编码与分辨率变化的坑

ViT 的可学习位置编码按训练分辨率定长,当分辨率变化时,位置编码表无法直接匹配新 token 数,需进行 2D 插值。这可能导致位置信息扭曲,影响模型性能。与语言模型中的位置编码(如 RoPE)不同,ViT 的位置编码不具备外推能力,因此跨分辨率使用必须显式处理,否则模型虽能运行,但位置信息可能失真。

Q&A

ViT中patch size和分辨率如何影响序列长度和计算复杂度?

ViT将图像切分为大小为P×P的patch,序列长度N=HW/P²。分辨率固定时,patch越小,N越大;patch固定时,分辨率越高,N越大。self-attention的计算复杂度为O(N²),因此N增大时,算力和显存需求呈平方增长。例如,patch size减半会使N变为4倍,attention代价变为16倍。

CNN的归纳偏置具体指什么?为什么它在小数据上更有效?

CNN的归纳偏置包括局部性(卷积核只看局部窗口)、平移等变性(同一卷积核在图像各处共享)和层级结构(通过池化逐步扩大感受野)。这些先验假设使CNN在小数据集上更稳定,因为模型不需要从数据中学习这些基本结构。ViT论文实验显示,在ImageNet规模上,CNN基线优于ViT,但在更大数据集(如JFT-300M)上ViT反超。

DeiT是如何在仅使用ImageNet-1k的情况下训练出有竞争力的ViT的?

DeiT通过大量数据增强和蒸馏技术提高训练信号密度,而非减少数据需求。具体包括Rand-Augment、Mixup、CutMix等增强手段,以及使用硬标签蒸馏(教师模型的argmax预测)和蒸馏token。关键改动是硬标签蒸馏,相比软标签蒸馏带来显著提升。最终DeiT-B在无额外数据下达到83.1% top-1,加蒸馏后达85.2%。

ViT中CLS token和全局平均池化(GAP)有什么区别?

ViT论文消融实验显示,CLS token和GAP在性能上相近,差异主要来自需要不同的学习率。CLS token是BERT风格的工程选择,而GAP同样可行,但需重新调整超参数。因此,CLS token并非汇聚全局信息的唯一方式。

ViT的位置编码在分辨率变化时如何失效?如何解决?

ViT使用可学习的1D位置编码,其形状与训练时的序列长度N_train相关。当分辨率变化导致N_new>N_train时,位置编码表没有足够行数。解决方法是对预训练位置编码按patch在原图中的相对位置进行2D插值,以映射到新的网格大小。这是ViT中除patch切分外唯一手动注入的图像结构先验。

Swin Transformer如何降低注意力复杂度?它付出了什么代价?

Swin Transformer使用窗口注意力,只在固定大小(默认7×7)的窗口内计算self-attention,复杂度从O(N²)降为O(N)。但窗口间无信息交换,因此采用shifted window交替窗口划分,使信息跨窗口传播。代价是有效感受野受限,且需要层级结构(patch merging)来恢复多尺度特征,但整体计算量仍随图像面积线性增长。

关于视觉任务是否需要强归纳偏置,有哪些争论?

一派认为结构先验仍重要,如Swin重新引入局部性和层级,在检测分割任务上超过ViT;ConvNeXt纯卷积网络也能追平Swin。另一派认为规模可盖过架构差异,如Smith et al.将NFNet在JFT-4B上训练,匹配算力后达到与ViT相当的性能,质疑ViT扩展性优势的比较公平性。争论未定论,取决于实际预算和数据规模。

ViT在高分辨率或细粒度任务上面临哪些挑战?

高分辨率导致token数增多,即使窗口注意力将复杂度降为线性,总计算量仍随图像面积增长。细粒度任务中,patch size大则信息粗糙,小则序列长、计算量大。目前没有方案能同时兼顾细粒度和计算效率,高效视觉Transformer通过窗口、层级下采样、token剪枝等寻找平衡。

🏷️

标签

➡️

继续阅读