第二十四周:文献阅读笔记(VIT)

第二十四周:文献阅读笔记

  • 摘要
  • Abstract
  • 1. 文献阅读
    • 1.1 文献题目
    • 1.2 文献摘要
    • 1.3 引言
    • 1.4 VIT
      • 1.4.1 Embedding层结构详解
      • 1.4.2 BN和LN算法
      • 1.4.3 Transformer Encoder详解
      • 1.4.4 MLP Head(全连接头)
    • 1.5 实验
    • 1.6 文献总结
  • 2. 随机梯度下降(回顾)

摘要

VIT是一种基于Transformer模型的视觉处理方法。传统上,卷积神经网络(CNN)在计算机视觉任务中表现出色,但Transformer在自然语言处理任务中取得了很大的成功,VIT的目标是将Transformer模型应用于计算机视觉领域,以处理图像数据,其使用了一种将图像数据转换为序列数据的方法。它将输入的图像分割成一系列的图像块,然后将这些图像块展平为一维向量序列。随后,VIT引入了Transformer的编码器部分,来对这个一维序列数据进行处理。本文我们将详细介绍VIT

Abstract

VIT is a visual processing method based on the Transformer model. Traditionally, Convolutional Neural Networks (CNNs) have performed well in computer vision tasks, but Transformer has had great success in natural language processing tasks.The goal of VIT is to apply the Transformer model to the field of computer vision to process image data, and it uses a method that converts image data into sequence data. It splits the input image into a series of image blocks and then spreads these blocks into a one-dimensional sequence of vectors. VIT then introduces the encoder part of the Transformer to process this one-dimensional sequence data. In this paper we will introduce VIT in detail

1. 文献阅读

1.1 文献题目

题目:AN IMAGE IS WORTH 16X16 WORDS:
TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
文献链接:点此链接下载文献

1.2 文献摘要

虽然 Transformer 架构已成为自然语言处理任务事实上的标准,但其在计算机视觉中的应用仍然有限。在视觉中,注意力要么与卷积网络结合应用,要么用于替换卷积网络的某些组件,同时保持其整体结构不变。经过作者证明,这种对 CNN 的依赖是不必要的,直接应用于图像块序列的纯 Transformer 可以在图像分类任务上表现良好。

1.3 引言

基于自注意力的架构,特别是 Transformer,已成为自然语言处理(NLP)的首选模型。主要方法是在大型文本语料库上进行预训练,然后在较小的特定于任务的数据集上进行微调。得益于 Transformers 的计算效率和可扩展性,随着模型和数据集的增长,性能仍然没有饱和的迹象。多项工作尝试将CNN与Transformer结合,但在大规模图像识别任务中,仍然是ResNet最先进,作者尝试将标准的Transformer直接应用于图像,并进行尽可能少的修改,通过将图像分割成若干个补丁,并对这些若干个补丁做 Embedding位置嵌入、位置编码操作,将其作为Transformer的输入,其图像的处理方式与文本处理方式一致。

但是由于Transformers 缺乏 CNN 固有的一些归纳偏置,例如平移等方差和局部性,因此在数据量不足的情况下无法很好地进行泛化。然而,如果模型在更大的数据集(14M-300M 图像)上进行训练,情况就会发生变化。作者的团队发现大规模训练胜过归纳偏置。当以足够的规模进行预训练并转移到数据点较少的任务时,ViT取得了优异的结果。

1.4 VIT

第二十四周:文献阅读笔记(VIT)_第1张图片
上图为原论文的VIT架构图,根据该图,模型由三个模块组成:Linear Projection of Flattened Patches(Embedding层)、Transformer Encoder、MLP Head。

1.4.1 Embedding层结构详解

对于标准的Transformer模块,要求输入的是token(向量)序列,即二维矩阵[num_token, token_dim],如下图,token0-9对应的都是向量,以ViT-B/16为例,每个token向量长度为768。
第二十四周:文献阅读笔记(VIT)_第2张图片
标准Transformer接收token嵌入的一维序列作为输入。而对于图像数据而言,其数据格式为[H, W, C]是三维矩阵明显不是Transformer想要的。所以需要先通过一个Embedding层来对数据做个变换。如下图所示,首先将一张图片按给定大小分成一堆Patches。以ViT-B/16为例,将输入图片¥、 H ∗ W = ( 224 ∗ 224 ) H*W=(224*224) HW=(224224) 按照 P 2 = 16 ∗ 16 P^{2}=16*16 P2=1616 大小的Patch进行划分,而将图像划分的块数 N = H W P 2 N=\frac{HW}{P^{2}} N=P2HW,划分后会得到 N = ( 224 / 16 ) 2 = 196 N=(224/16)^{2}=196 N=(224/16)2=196个patches。接着通过线性映射将每个Patch映射到一维向量中,以ViT-B/16为例,每个Patche数据shape为[16, 16, 3]通过映射得到一个长度为768的向量(后面都直接称为token),即 [16, 16, 3] -> [768]
第二十四周:文献阅读笔记(VIT)_第3张图片
【注】:卷积计算公式: H 2 = H 1 − F H + 2 P S + 1 H_{2}=\frac{H_{1}-F_{H}+2P}{S}+1 H2=SH1FH+2P+1

其中 H 1 H_{1} H1表示输入的长度, H 2 H_{2} H2表示输出特征图的长度, F F F表示卷积核长和宽的大小, S S S表示感受野的大小(滑动窗口), P P P表示边界填充

在代码实现中,我们可以直接通过一个卷积层来实现。 以ViT-B/16为例,直接使用一个卷积核大小为16x16,步距为16,卷积核个数为768的卷积来实现。输出的尺寸为 (224-16)/16+1=14,通过卷积 [224, 224, 3] -> [14, 14, 768],然后H以及W两个维度展平即可 [14, 14, 768] -> [196, 768],,此时变成了一个二维矩阵,满足Transformer的输入。

在输入Transformer Encoder之前注意需要加上[class]token以及Position Embedding。 在本文中,作者说参考BERT,在刚刚得到的一堆tokens中插入一个专门用于分类的[class]token,这个[class]token是一个可训练的参数,数据格式和其他token一样都是一个向量,以ViT-B/16为例,就是一个长度为768的向量,与之前从图片中生成的tokens拼接在一起,即 Cat([1, 768], [196, 768]) -> [197, 768]。

对于Position Embedding作者也有做一系列对比试验,在源码中默认使用的是 1D Pos. Emb. 对比不使用Position Embedding准确率提升了大概3个点,
第二十四周:文献阅读笔记(VIT)_第4张图片

1.4.2 BN和LN算法

BN(Batch Normalization)
通常来说,数据标准化预处理对于浅层模型就足够有效了。随着模型训练的进行,当每层中参数更新时,靠近输出层的输出较难出现剧烈变化。但对深层神经网络来说,即使输入数据已做标准化,训练中模型参数的更新依然很容易造成靠近输出层输出的剧烈变化。这种计算数值的不稳定性通常令我们难以训练出有效的深度模型。

论文中关于BN(batch normalization)提出的解释:训练深度神经网络非常复杂,因为在训练过程中,随着先前各层的参数发生变化,各层输入的分布也会发生变化,图层输入分布的变化带来了一个问题,因为图层需要不断适应新的分布,因此训练变得复杂,随着网络变得更深,网络参数的细微变化也会放大。

由于要求较低的学习率和仔细的参数初始化,这减慢了训练速度,并且众所周知,训练具有饱和非线性的模型非常困难。我们将此现象称为内部协变量偏移,并通过归一化层输入来解决该问题。

其它的解释:假设输入数据包含多个特征 x 1 , x 2 , … x n x_1,x_2,…x_n x1x2xn。每个功能可能具有不同的值范围。例如,特征x1的值可能在1到5之间,而特征x2的值可能在1000到99999之间。

如下左图所示,由于两个数据不在同一范围,但它们是使用相同的学习率,导致梯度下降轨迹沿一维来回振荡,从而需要更多的步骤才能达到最小值。且此时学习率不容易设置,学习率过大则对于范围小的数据来说来回震荡,学习率过小则对范围大的数据来说基本没什么变化。

如下右图所示,当进行归一化后,特征都在同一个大小范围,则loss landscape像一个碗,学习率更容易设置,且梯度下降比较平稳。
第二十四周:文献阅读笔记(VIT)_第5张图片
BN层中,对每个样本的同一通道,计算它们的均值和方差,再对数据进行归一化,归一化的值具有零均值和单位方差的特点,最后使用两个可学习参数gamma和beta对归一化的数据进行缩放和移位。
第二十四周:文献阅读笔记(VIT)_第6张图片
此外,在训练过程中还保存了每个mini-batch每一BN层的均值和方差,最后求所有mini-batch均值和方差的期望值,以此来作为推理过程中该BN层的均值和方差。另外,BN放在激活函数后比放在激活函数前效果更好。

BN算法的优点:

  • 通过加入BN算法,可使用更大的学习率
  • 明显加快收敛速度
  • 避免梯度爆炸和梯度消失

BN算法的缺点:

  • 依赖Batch size
  • 对于RNN这样的动态网络效果不明显
  • 当mini-batch中的样本非独立同分布时,性能比较差。

LN(Layer Normalization)算法

BN的第一个缺陷是依赖Batch size,第二个缺陷是对于RNN这样的动态网络效果不明显,且当推理序列长度超过训练的所有序列长度时,容易出问题。为此,提出了Layer Normalization。

Layer Normalization是针对自然语言处理领域提出的,例如像RNN循环神经网络。

RNN为什么不使用直接BN呢,因为在RNN这类时序网络中,时序的长度并不是一个定值(网络深度不一定相同),比如每句话的长短都不一定相同,所有很难去使用BN,所以作者提出了Layer Normalization(注意,在图像处理领域中BN比LN是更有效的,但现在很多人将自然语言领域的模型用来处理图像,比如Vision Transformer,此时还是会涉及到LN)。
第二十四周:文献阅读笔记(VIT)_第7张图片
和BN没什么区别,都是减均值,再除以标准差。同样也有两个可训练的参数β , γ 。不同的是:BN是对一个batch数据的每个channel进行Norm处理,但LN是对单个数据的指定维度进行Norm处理,与batch无关。而且在BN中训练时是需要累计moving_mean和moving_var两个变量的(所以BN中有4个参数:moving_mean,moving_var, β, γ),但LN不需要累计,只有 β , γ 两个参数。LN广泛适应于RNN、Transformer中。

1.4.3 Transformer Encoder详解

Vit中所使用的Transformer 编码器结构和原 Transformer 结构一样,具体理论细节请参考 第十五周:文献阅读笔记(Transformer)。主要还是使用了多头注意力机制,另外,不像nlp领域中的翻译任务,vit 没有利用解码器的结构。

Transformer Encoder 其实就是重复堆叠 Encoder Block L次,下图是绘制的Encoder Block,主要由以下几部分组成:

  • Layer Norm,这种Normalization方法主要是针对NLP领域提出的,这里是对每个token进行Norm处理,在 1.4.2 我们已经详细的介绍过了
  • Multi-Head Attention,这个多头注意力机制在第十五周的文献阅读笔记中已经详细介绍
  • Dropout/DropPath,在原论文的代码中是直接使用的Dropout层,在但rwightman实现的代码中使用的是DropPath(stochastic depth),可能后者会更好一点。
  • MLP Block,如下图所示,就是全连接+GELU激活函数+Dropout组成也非常简单,需要注意的是第一个全连接层会把输入节点个数翻4倍[197, 768] -> [197, 3072],第二个全连接层会还原回原节点个数[197, 3072] -> [197, 768]。

第二十四周:文献阅读笔记(VIT)_第8张图片

1.4.4 MLP Head(全连接头)

上面通过Transformer Encoder 后输出的shape和输入的shape是保持不变的,以ViT-B/16为例,输入的是[197, 768]输出的还是[197, 768]。

  • 注意,在Transformer Encoder后其实还有一个Layer Norm没有画出来,后面有细画的 ViT 的模型可以看到详细结构。
  • 这里我们只是需要分类的信息,所以我们只需要提取出[class]token生成的对应结果就行,即[197, 768]中抽取出 [class]token(也就是添加的分类向量) 对应的[1, 768]。
  • 接着我们通过MLP Head得到我们最终的分类结果。MLP Head原论文中说在训练ImageNet21K时是由Linear+tanh激活函数+Linear组成。
  • 但是迁移到ImageNet1K上或者你自己的数据上时,只用一个Linear即可。

第二十四周:文献阅读笔记(VIT)_第9张图片

1.5 实验

VIT训练的基本策略是首先在大数据集上先做预训练,然后在小数据集上做迁移使用。ViT做预训练使用到的大数据集包括ILSVRC-2012 ImageNet dataset:1000 classes、ImageNet-21k:21k classes、JFT:18k High Resolution Images,ViT预训练迁移到的数据集包括CIFAR-10/100、Oxford-IIIT Pets、Oxford Flowers-102、VTAB、ImageNet。

论文共设计了Base、Large和Huge三款不同大小的ViT模型,分别表示基础模型、大模型和超大模型,三款模型的各参数如下表所示。在源码中除了有Patch Size为16x16的外还有32x32的。
第二十四周:文献阅读笔记(VIT)_第10张图片
ViT实验—预训练数据集和大模型
ViT最核心的实验就是将前述的训练方法进行实现,即在大规模数据集上预训练后迁移到小数据集上看模型效果。为了比对CNN模型,论文特地用了Big Transfer (BiT),该模型使用大的ResNet进行监督迁移学习,是2020 ECCV上提出的一个大CNN模型。另外一个比对CNN模型是2020年CVPR上的Noisy Student模型,是一个半监督的大型CNN模型。

ViT、BiT 和 Nosiy Student 模型经三大数据集预训练后在各小数据集上的准确率如下表所示。
第二十四周:文献阅读笔记(VIT)_第11张图片
从表中可以看到,ViT经过大数据集的预训练后,在各小数据集上的迁移后准确率超过了一些SOTA CNN模型的结果。但要取得这种超越CNN的性能效果,仍然需要大的预训练数据集和大模型的结合。

1.6 文献总结

我们探索了Transformer在图像识别中的直接应用。与之前在计算机视觉中使用self-attention的工作不同,除了初始的patch抽取步骤外,我们没有在架构中引入特定于图像的inductive bias。相反,我们将图像转化为一系列patch,并通过NLP中使用的标准Transformer编码器对其进行处理。这种简单但可扩展的策略在与大型数据集上的预训练相结合时效果非常好。因此,Vision Transformer在许多图像分类数据集上达到或超过了最先进的水平,同时预训练成本相对较低。

尽管这些初步成果令人鼓舞,但仍存在许多挑战。一种是将ViT应用于其他计算机视觉任务,如检测和分割。我们的结果,加上Carion等人的结果,表明了这种方法的前景。另一个挑战是继续探索自监督的预训练方法。我们的初步实验表明,自监督预训练有所改善,但自监督预训练与大规模监督预训练之间仍有较大差距。最后,ViT的进一步扩展可能会提高性能。

2. 随机梯度下降(回顾)

在我们训练网络的过程中,通过SGD优化网络的参数θ,从而使损失最小化第二十四周:文献阅读笔记(VIT)_第12张图片
其中, x 1 、 x 2 、 . . . 、 x N x_1、x_2、... 、x_N x1x2...xN是训练数据集,我们在使用使用SGD,训练将逐步进行,并且在每个步骤中,我们考虑大小为m的小批次,即 x 1 , . . . . 、 m x_1,.... 、m x1....m,通过计算 1 m ∂ ( x i , θ ) ∂ θ \frac{1}{m}\frac{\partial (x_{i},\theta )}{\partial \theta } m1θ(xi,θ),使用小批量数据来近似损失函数关于参数的梯度。使用小批量样本,而不是一次一个样本,在一些方面是有帮助的。首先,小批量数据的梯度损失是训练集上的梯度估计,其质量随着批量增加而改善。第二,由于现代计算平台提供的并行性,对一个批次的计算比单个样本计算 m 次效率更高。

虽然随机梯度简单有效,但它需要仔细调整模型超参数,特别是优化中使用的学习率以及模型参数的初始值。由于每一层的输入都受到前面所有层的参数的影响,因此训练变得很复杂——因此,随着网络变得更深,网络参数的微小变化会放大

你可能感兴趣的:(笔记)