ViT: Vision Transformers

106 阅读2分钟

ViT 试图将 Transformers 架构应用在图像分类上,它所做的工作更多的是为 Transformer 设计一个接口。架构如下图所示:

Screenshot 2024-02-05 at 16.28.53.png

将原始数据 xRH×W×Cx\in R^{H\times W\times C} (Height,Width,Channel) 进行分割操作,将其变成若干的块(patch),得到 xRN×(P2C)x\in R^{N\times(P^2\cdot C)}
(其中 PP 是块的大小,N=HW/P2N=HW/P^2 是块的数量。注意块是平铺开的(flattened)块的数量对应着 Transformer 输入序列的长度,因此,当输入数据的分辨率越高(或者越大),而块的大小保持不变,对应的序列长度就会越长。)

分割得到的数据并不能直接输入到 Transformers 中,还需要经过 Embedding 层转换为 1 维数据,并且这其中还会加入位置嵌入(position embedding),该位置嵌入是可学习的,当图像更大或者分辨率更高时,原先的位置嵌入可能并不适用,这种情况下使用插值的方式计算新的位置嵌入。在文章的结果中可以看到,相邻位置的位置嵌入向量是相近的。

Screenshot 2024-02-05 at 17.38.49.png (其中 xclass\mathrm x_{class} 是一个特殊字符 cls )

分割是直接分割的,可以从块的数量看出,因此它不像 CNN 那样有重叠的区域。另外,对原始数据的使用,仅发生在接口层,因此 inductive bias 的引入仅在这一部分发生(2D neighborhood structure),它并没有 CNN 那些每层都出现的 inductive bias——locality 和 spatial invariance(但 ViT 还是有一点的,主要是注意力计算的 MLP 部分,它可以视为 locality 与 spatial invariance 的).这也导致了对于中等规模的数据集,它的泛化表现不如使用 CNN 架构的 ResNets 。但 ViT 的泛化表现在大规模数据集上会得到改善。

Screenshot 2024-02-05 at 16.50.14.png

文章还观察了计算过程中各层 heads 的注意力权重,发现在最低的注意力层,有一些 heads 负责全局层面的处理。而有些 heads 负责局部层面的处理,而后者可能类似 CNN 中的卷积操作。但随着层数的增加,每个 head 都倾向于全局处理了。
(这里我的理解是,团队将测试过程中计算出的注意力权重记录下来进行分析)

在预训练部分,它们使用了类似 BERT 的 masked patch 的自监督训练方法。