Vision Transformer 模型

随着 Transformer 架构彻底改变了 Attention 的实现,并在自然语言处理领域取得了非常可喜的成果,其应用于计算机视觉领域只是时间问题。Vision Transformer (ViT) 的实现最终实现了这一目标。

在本教程中,您将了解 Vision Transformer 模型的架构及其在图像分类任务中的应用。

完成本教程后,您将了解:

  • ViT 在图像分类背景下如何工作。
  • ViT 的训练过程包含哪些内容。
  • ViT 在归纳偏置方面与卷积神经网络的比较。
  • ViT 在不同数据集上与 ResNet 的表现对比。
  • ViT 如何在内部处理数据以实现其性能。

使用我的书《使用 Attention 构建 Transformer 模型》来启动您的项目。它提供了自学教程可运行代码,指导您构建一个功能完备的 Transformer 模型,该模型可以
将句子从一种语言翻译成另一种语言的完整 Transformer 模型...

让我们开始吧。 

Vision Transformer 模型
图片由 Paul Skorupskas 拍摄,保留部分权利。

教程概述

本教程分为六个部分;它们是:

  • Vision Transformer (ViT) 简介
  • ViT 架构
  • 训练 ViT
  • 与卷积神经网络的归纳偏置比较
  • ViT 变体与 ResNet 的比较性能
  • 数据的内部表示

先决条件

本教程假设您已熟悉以下内容:

Vision Transformer (ViT) 简介

我们已经看到了 Vaswani 等人(2017)的 Transformer 架构的出现如何彻底改变了 Attention 的使用,而无需像早期 Attention 模型那样依赖于循环和卷积。在他们的工作中,Vaswani 等人将他们的模型应用于自然语言处理 (NLP) 的特定问题。

然而,在计算机视觉中,卷积架构仍然占据主导地位……

—— 一张图片胜过 16x16 个词:用于大规模图像识别的 Transformers,2021。

受其在 NLP 领域成功的启发,Dosovitskiy 等人(2021)试图将标准 Transformer 架构应用于图像,我们很快就会看到。他们当时的目标应用是图像分类。

想开始构建带有注意力的 Transformer 模型吗?

立即参加我的免费12天电子邮件速成课程(含示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

ViT 架构

回想一下,标准 Transformer 模型接收一维词嵌入序列作为输入,因为它最初是为 NLP 设计的。相比之下,当应用于计算机视觉中的图像分类任务时,Transformer 模型的输入数据以二维图像的形式提供。

为了以类似于 NLP 领域中输入数据结构(即具有单个词序列)的方式构造输入图像数据,将高度为 $H$、宽度为 $W$、通道数为 $C$ 的输入图像“切分”成更小的二维块。这将产生 $N = \tfrac{HW}{P^2}$ 个块,其中每个块的分辨率为 ($P, P$) 像素。

在将数据输入 Transformer 之前,执行以下操作:

  • 每个图像块被展平为长度为 $P^2 \times C$ 的向量 $\mathbf{x}_p^n$,其中 $n = 1, \dots N$。
  • 通过将展平的块映射到 $D$ 维,并使用可训练的线性投影 $\mathbf{E}$,生成嵌入图像块序列。
  • 一个可学习的类别嵌入 $\mathbf{x}_{\text{class}}$ 被添加到嵌入图像块序列的前面。$\mathbf{x}_{\text{class}}$ 的值表示分类输出 $\mathbf{y}$。
  • 最终,补丁嵌入通过一维位置嵌入 $\mathbf{E}_{\text{pos}}$ 进行了增强,从而将位置信息引入输入,该信息也在训练期间学习。

上述操作产生的嵌入向量序列如下:

$$\mathbf{z}_0 = [ \mathbf{x}_{\text{class}}; \; \mathbf{x}_p^1 \mathbf{E}; \; \dots ; \; \mathbf{x}_p^N \mathbf{E}] + \mathbf{E}_{\text{pos}}$$

Dosovitskiy 等人使用了 Vaswani 等人的 Transformer 架构的编码器部分。

为了执行分类,他们将 $\mathbf{z}_0$ 输入到 Transformer 编码器中,该编码器由 $L$ 个相同层堆叠而成。然后,他们取编码器输出的第 $L$ 层中 $\mathbf{x}_{\text{class}}$ 的值,并将其输入到分类头中。

分类头在预训练时由一个带有一个隐藏层的 MLP 实现,在微调时由一个单一线性层实现。

—— 一张图片胜过 16x16 个词:用于大规模图像识别的 Transformers,2021。

构成分类头的多层感知器 (MLP) 实现了高斯误差线性单元 (GELU) 非线性。

因此,总而言之,ViT 采用了原始 Transformer 架构的编码器部分。编码器的输入是一个嵌入图像块序列(包括一个可学习的类别嵌入,预先附加到序列中),该序列还增加了位置信息。连接到编码器输出的分类头接收可学习类别嵌入的值,根据其状态生成分类输出。所有这些都由下图说明:

Dosovitskiy 等人提出的另一个要点是,原始图像也可以选择先输入到卷积神经网络 (CNN) 中,然后再传递给 Transformer 编码器。图像块序列将从 CNN 的特征图获得,而随后的特征图块嵌入、添加类别标记和增加位置信息的处理过程保持不变。

训练 ViT

ViT 在更大的数据集(如 ImageNet、ImageNet-21k 和 JFT-300M)上进行预训练,并微调到更少的类别。

在预训练期间,连接到编码器输出的分类头由一个带有一个隐藏层和 GELU 非线性的 MLP 实现,如前所述。

在微调期间,MLP 被一个大小为 $D \times K$ 的单一(零初始化)前馈层替换,其中 $K$ 表示当前任务对应的类别数量。

微调是在比预训练期间使用的分辨率更高的图像上进行的,但输入图像被切割成的块大小在训练的所有阶段都保持不变。这导致微调阶段的输入序列长度比预训练期间使用的更长。

输入序列更长的含义是,微调需要比预训练更多的位置嵌入。为了解决这个问题,Dosovitskiy 等人根据原始图像中的位置对预训练位置嵌入进行二维插值,以获得与微调期间使用的图像块数量相匹配的更长序列。

与卷积神经网络的归纳偏置比较

归纳偏置是指模型为泛化训练数据和学习目标函数所做的任何假设。

在 CNN 中,局部性、二维邻域结构和平移等变性被嵌入到整个模型的每一层中。

—— 一张图片胜过 16x16 个词:用于大规模图像识别的 Transformers,2021。

在卷积神经网络 (CNN) 中,每个神经元仅连接到其邻域中的其他神经元。此外,由于位于同一层的神经元共享相同的权重和偏差值,当感兴趣的特征落在其感受野内时,这些神经元中的任何一个都会激活。这导致了一个与特征平移等变的特征图,这意味着如果输入图像被平移,则特征图也会相应地平移。

Dosovitskiy 等人认为,在 ViT 中,只有 MLP 层具有局部性和平移等变性。另一方面,自注意力层被描述为全局的,因为这些层中执行的计算不受局部二维邻域的限制。

他们解释说,关于图像二维邻域结构的偏差仅用于:

  • 在模型的输入端,每个图像都被切割成块,从而固有地保留了每个块中像素之间的空间关系。
  • 在微调时,预训练的位置嵌入根据其在原始图像中的位置进行二维插值,以生成与微调期间使用的图像块数量相匹配的更长序列。

ViT 变体与 ResNet 的比较性能

Dosovitskiy 等人让三个尺寸逐渐增大的 ViT 模型与两个不同尺寸的修改后的 ResNet 模型进行对比。他们的实验得出了一些有趣的发现:

  • 实验 1 – 在 ImageNet 上进行微调和测试
    • 当在最小数据集 (ImageNet) 上进行预训练时,两个较大的 ViT 模型表现不如其较小的对应模型。所有 ViT 模型的性能普遍低于 ResNet 模型。
    • 当在更大的数据集 (ImageNet-21k) 上进行预训练时,三个 ViT 模型的表现彼此相似,也与 ResNet 模型相似。
    • 当在最大的数据集 (JFT-300M) 上进行预训练时,较大 ViT 模型的性能超过了较小 ViT 模型和 ResNet 模型。
  • 实验 2 – 在 JFT-300M 数据集的随机不同大小子集上进行训练,并在 ImageNet 上进行测试,以进一步研究数据集大小的影响
    • 在较小的数据集子集上,ViT 模型比 ResNet 模型更易过拟合,并且性能明显较差。
    • 在较大的数据集子集上,较大 ViT 模型的性能超过了 ResNet 模型。

这一结果强化了以下直觉:卷积归纳偏置对于较小数据集很有用,但对于较大数据集,直接从数据中学习相关模式是足够的,甚至是受益的。

—— 一张图片胜过 16x16 个词:用于大规模图像识别的 Transformers,2021。

数据的内部表示

在分析 ViT 中图像数据的内部表示时,Dosovitskiy 等人发现以下几点:

  • 在 ViT 的第一层最初应用于图像块的已学习嵌入滤波器,类似于可以提取每个块内低级特征的基函数。
  • 在原始图像中空间上彼此接近的图像块,其学习到的位置嵌入也相似。
  • 模型最低层的几个自注意力头已经关注了大部分图像信息(基于它们的注意力权重),这表明自注意力机制能够整合整个图像的信息。

不同自注意力头关注的图像区域大小
摘自“一张图像胜过 16x16 个词:用于大规模图像识别的 Transformer

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

论文

总结

在本教程中,您学习了 Vision Transformer 模型的架构及其在图像分类任务中的应用。

具体来说,你学到了:

  • ViT 在图像分类背景下如何工作。
  • ViT 的训练过程包含哪些内容。
  • ViT 在归纳偏置方面与卷积神经网络的比较。
  • ViT 在不同数据集上与 ResNet 的表现对比。
  • ViT 如何在内部处理数据以实现其性能。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

学习 Transformer 和注意力!

Building Transformer Models with Attention

教您的深度学习模型阅读句子

...使用带有注意力的 Transformer 模型

在我的新电子书中探索如何实现
使用注意力机制构建 Transformer 模型

它提供了自学教程可运行代码,指导您构建一个可以
将句子从一种语言翻译成另一种语言的完整 Transformer 模型...

为理解人类语言提供神奇力量
您的项目


查看内容

, , ,

Vision Transformer 模型》的 5 条回复

  1. DuX 2022 年 10 月 30 日上午 3:18 #

    感谢这个很棒的教程!

    据我理解,如果我们使用图像,我们应该首先实现 CNN 来局部捕获空间特征,然后
    将该输出作为 ViT(Attention)的输入,通过块来全局捕获空间特征?

    • James Carmichael 2022 年 10 月 30 日上午 5:52 #

      嗨 DuX…您的理解是正确的!请告诉我们您模型的结果。

  2. DuX 2022 年 11 月 1 日下午 6:44 #

    我还会问一个问题,attention 通常在 RNN (LSTM, ...) 中用于序列预测 (NLP),但是用于 CNN 的 Attention 是自注意力,即带有多头缩放点积注意力机制的 transformer 吗?

  3. Malathi 2023 年 9 月 10 日下午 8:59 #

    能否详细解释一下 TrOcr?

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。