视觉Transformer(vision transformer, ViT)
/ VIZH-un trans-FOR-mer (V-I-T) /
视觉Transformer把Transformer——也就是驱动现代语言模型的那套架构——用到了图像上。它的巧妙之处,在于把一张图当成一个句子来对待。它把图像切成一格格的小方块(比如每块16×16像素),按顺序排好,再把每一块当作一个「词」。然后它使用Transformer的核心机制——自注意力——让每一块去看其他所有块,并衡量彼此之间有多相关。一块毛皮可以去「注意」图像另一头很远处的一块耳朵,从而共同得出「猫」这个结论。
这是一次显著的转向。近十年来,卷积网络(CNN)一直主导着视觉;它们用小小的局部滤镜扫描图像,内建了一个假设:相邻的像素最重要。ViT抛掉了这个假设,让注意力直接去学习长距离的关系。2020年提出它的那篇论文,标题直白得就是要说明这一点:只要数据足够多,你根本不需要卷积,也能做出出色的图像识别。
关键的提醒,恰恰就在那最后一句:只要数据足够多。因为ViT没有内建的「局部性」概念,它必须从零学起这种结构,这意味着它对数据很「饥渴」——在小数据集上,一个朴素的ViT可能输给CNN。它真正大放异彩,是在用海量图像集合预训练、再做微调之后。实践中,界限已经模糊:许多现代系统把Transformer与卷积的思想混在一起,所以「ViT对CNN」与其说是一场战争,不如说是一份菜单,按你手头的数据和算力来点。
一个ViT把224×224的照片切成196块16×16像素的小方块。为了认出一只火烈鸟,显示它弯曲脖颈的那一块,可以直接去「注意」显示它粉色长腿的那一块——尽管二者在图像里相距很远——而不必像卷积那样一个像素一个像素地传递信号。
把图像当作一串小方块;注意力直接连接相距很远的方块。代价是对数据的饥渴。
ViT相对CNN的优势,主要在大规模下才显现;在数据量不大的情况下,CNN内建的局部性往往胜出。「Transformer取代了视觉里的CNN」这种说法言过其实——许多顶尖系统其实是混合体,正确的选择取决于你的数据和算力预算。