理解 Vision Transformer - ViT

引言

如果要问过去一年 CV 领域什么工作最火,ViT 绝对是其中之一,自 AlexNet 问世以来,卷积神经网络几乎一直是处理图像的主流框架,ViT 的出现首次对该框架提出了挑战。


1 背景

transformer 起源于论文 Attention is all you need,本身是用于处理 NLP 领域相关问题的,它提出了一个非常有价值的思想 —— 自注意力,当需要处理的句子变得很长时,先前模型无法很好利用相距很远单词之间的关系,自注意力引入了全局感受野,让模型能够关注到全局信息,缓解了上述问题。之后 transformer 提升了 NLP 大量任务的性能,成为了 NLP 领域的基础模型。

其实在 ViT 之前,已经有大量工作研究如何将自注意力机制应用到 CV 领域,但它们要么将卷积和自注意力一起用,要么是把一部分替换为自注意力。本文是将 NLP 的 transformer 尽最小的修改直接用到了 CV 领域,想探索其在图像数据上的性能。

2 动机

ViT 作者想,既然 transformer 在 NLP 领域的贡献如此大,能不能也用到 CV 领域来提升性能呢?经过实验后作者发现:如果能在足够多的数据上进行预训练,transformer 可以达到和 ResNet 相同甚至更高的图像分类性能;且作者还发现 transformer 具有良好的可扩展性,当不断扩大数据和模型规模时,还没有观察到 ViT 出现性能饱和。

3 方法

3.1 把 transformer 应用到 CV 领域面临的困难

自注意力的计算复杂度随输入序列长度呈平方增长,目前 NLP 领域基于 transformer 的大模型 BERT 最长一次也只能处理 512 个单词(后面我们把 transformer 的基本处理单元叫做 token),在 CV 领域,普通分类任务的图像大小通常是 224 × 224,如果将每个像素点作为 token,序列长度为 224 × 224 = 50716,因此不能这样直接应用。需要解决的问题就是如何把一张二维图像转化成 token 序列,且序列长度适中。

3.2 解决方法

理解 Vision Transformer - ViT_第1张图片
ViT 整体思路是:先将二维图像分成一个个 patch(图像块,上图分成了 9 个 patch),把每个 patch 拉直成一个向量,所有向量通过一层全连接网络,得到的结果就是我们需要的 token,上图得到了 9 个 token,因此我们的序列长度也是 9。下面我们进一步讲述相关细节。

假设输入图像尺寸为 224 × 224 × 3,patch size = 16 × 16,那么一张图分割成得到的 token 总数为 24 4 2 ÷ 1 6 2 = 196 244^2 \div 16^2 = 196 2442÷162=196,每个 patch 的尺寸是 16 × 16 × 3,拉直成为 768 维的向量。因此原始图像从 224 × 224 × 3 变成了 196 × 768 的张量。

图中的 Linear Projection of Flattened Patches 就是全连接层 FC,其维度是 768 × D(论文中 D = 768),经过 FC 的输出张量维度是:[196, 768] × [768, D] = [196, D],因此,序列长度为 196,每个 token 是一个 D 维向量,这样就把 CV 转化成了 NLP 问题。

为了实现图像分类,作者借鉴 BERT 额外增加了一个 class token,它是一个待学习的 D 维向量,因此实际进入 transformer 的序列长度是 196 + 1。最后将 Transformer Encoder 处理后的 class token 结果送入 MLP Head 得到图像分类结果,因为自注意力让所有 token 之间进行了交互,我们可以认为 class 这一个 token 包含了全局的表达信息。

为了让模型能够利用到每个 patch 的位置信息,给每个 token 加上了位置编码,位置编码从一个矩阵获取,该矩阵维度是 197 × D,每一行代表一个位置的编码向量,这个位置编码矩阵可以自己设计也可以学习得到。将编码向量 加到 对应的 token 上(注意是相加不是 concat !)最后输入 transformer 的仍然是一个 197 × D 的张量。

4 总结

ViT 的提出给学术界挖了一个大坑,有其下几点:

  1. 作者仅探索了 ViT 在图像分类任务上的效果,如何把 transformer 应用到目标检测,语义分割等任务还待研究;
  2. 进一步改进 transformer 的结构设计,或者引入新的损失,获得更好的性能;
  3. transformer 在 NLP 大火的原因还包括它能自监督预训练,如何在 CV 实现 transformer 的预训练待研究;
  4. 最近跨模态任务很受关注,transformer 相当于建立了 CV 和 NLP 的桥梁,对直接使用 transformer 实现 CV 和 NLP 的跨模态研究挖了坑。

你可能感兴趣的:(transformer,深度学习,人工智能)