经典论文 ViT。非常喜欢这篇论文,第一次直观一窥 Attention 内部,模型真的学到了图片知识。 感觉关键的是不要对原始数据做过多的处理,让 AI 自己去学习规律。 想法不值钱,没钱的 lab 也没法搞,所以最近几年好的模型都是谷歌微软推进的。 美国 AI 从业者 / 研究者 60% 以上为华人 / 华裔,已经是统治级别的地位了。 有好的丹炉和原料也还要有过硬的炼丹技术。
但是当训练数据集不够大的时候,ViT 的表现通常比同等大小的 ResNets 要差一些,因为 Transformer 和 CNN 相比缺少归纳偏置(inductive bias),即一种先验知识,提前做好的假设。CNN 具有两种归纳偏置,一种是局部性(locality / two-dimensional neighborhood structure),即图片上相邻的区域具有相似的特征;一种是平移不变形(translation equivariance), $f(g(x))=g(f(x))$ ,其中 $g$ 代表卷积操作,$f$ 代表平移操作。当 CNN 具有以上两种归纳偏置,就有了很多先验信息,需要相对少的数据就可以学习一个比较好的模型。
按照 Transformer 结构中的位置编码习惯,这个工作也使用了位置编码。不同的是,ViT 中的位置编码没有采用原版 Transformer 中的 sincos 编码,而是直接设置为可学习的 Positional Encoding。对训练好的 Positional Encoding 进行可视化。我们可以看到,位置越接近,往往具有更相似的位置编码。此外,出现了行列结构,同一行 / 列中的 patch 具有相似的位置编码。
实际实验结果表明,不管使用哪种位置编码方式,模型的精度都很接近,甚至不适用位置编码,模型的性能损失也没有特别大。原因可能是 ViT 是作用在 image patch 上的,而不是 image pixel,对网络来说这些 patch 之间的相对位置信息很容易理解,所以使用什么方式的位置编码影像都不大。
ViT block 第一层(linear projection)的前 28 个主成分:
很像 Gabor 滤波器。 Gabor 和小波变换突破了傅里叶变换的局限性。
为了理解 self-attention 是如何聚合信息的(To understand how ViT uses self-attention to integrate information across the image),基于 attention weight 计算不同 layer 不同 head 的 average attention distance。 每一个 layer 的每一个 head 的 average attention distance,类似于 CNN 感受野的概念,可以发现一些 head 在第一个 layer 就 attent 到了几乎整张图片的范围。
Representative examples of attention from the output token to the input space.