Transformer Series
type
status
date
slug
summary
tags
category
icon
password
1、Attention is all you need
首先Transformer 是一个创新性的架构(在卷积时代),它创新性的使用了self-attention 来构建数据的全局信息 (上下文关系)

如图可以看出,Transformer架构分为encoder和decoder 两部分,并且在encoder、decoder中使用了multi-head attention。
其中,使用encoder、decoder架构是因为,在nlp任务中会出现输入和输出序列不一致的情况
如中-英翻译的时候,中文输入可能只有几句话如 白日依山尽,但是英文翻译的长度不一定与中文输入一致,在此情况下使用了encoder、decoder架构。
其次,Multi-Attention是对Self-Attention的一种扩展,而在Self-Attention中又使用了Scaled Dot-Product attention来实现其思想。
Self-Attention的主要思想是,对于序列中的每一个元素,计算它与序列中其他元素的相关性(注意力权重),然后根据这些权重对所有元素进行加权求和,从而生成该元素的新的表示。
按照Self-Attention的思想,将输入通过线性变化(矩阵左乘)构造出了Query,Key,Value三个向量(维度相同),然后计算注意力权重,最后进行加权求和,具体步骤如下:

1、假设输入为 ,通过进行线性变换得到Q,K,V,如下:
其中:
的维度为,即,Q的维度为,即
的维度为,即,K的维度为,即
的维度为,即,V的维度为,即
2、将 左乘 ,计算查询向量和键向量之间的点积 ,以衡量它们的相似度。
假设 的维度是, 的维度是,其中 是查询的数量也是键的数量, 是查询和键的维度。
- 的维度为 。
- 是维度为的相似性矩阵。
3、Scale 缩放,是为了防止Dot-Product 的结果太大,导致softmax在计算时梯度爆炸。即,
- 经过缩放后仍然是相似性矩阵
4、通过Softmax将相似性矩阵变成注意力权重,即,
5、权重与V相乘,生成最终输出,即,

Multi-Head Attention
即对Scaled Dot-Product Attention的一个扩展,具体体现在它会对输入进行多个 Scaled Dot-Product Attention,最后将输出Concat起来。即,
- 即每个head 都会使用不同的线性变换生成对应的Q,K,V
这样做的目的在于,Scaled Dot-Product Attention会生成一种结合子空间上下文信息的新表示,那么多个Scaled Dot-Product Attention则可以生成更多个新表示,最后Concat的输出不仅包含自身信息和上下文关系,还综合了来自不同注意的多种上下文表示。
举个例子来说,Attention1 可以认为 ‘我’‘是’‘谁’的表示关系为‘是’是一个介词,而Attention2 可以有新的认为比如说‘是’不是介词,那最后Concat的结果是综合了两种上下文关系的输出。当然这取决于每个Attention都是用不同的线性变换生成了不同的Q,K,V
Masked Self-Attention
在训练阶段的Decoder中,虽然给了直接的数据,但是要根据训练的阶段Masked当前模型不应该接收到的信息
如果假设输入是一个句子,比如,我是谁。则经过Scaled Dot-product attention 之后,其中的每个单词’我’’是’’谁’,都转变成了携带有上下文关系的另一种形式 。比如新的我不仅有’我‘还有与’是‘,’谁‘的关系。通过这种形式即将输入进行增强,提供更好的,更结构性的训练数据。
2、Vision Transformer

在ViT中,将image 分割为n个patches,然后按照nlp的方式进行训练,测试。同时由于不存在输入和输出长度不一致的问题,故不需要使用Encoder-Decoder架构。
3、Swin Transformer

首先Swin Transformer 探讨了Transformer在CV领域遇到的问题(主要参考ViT)
- 缺乏层次化特征的表示
- 以VGG举例来说,每一个卷积块是(两个卷积层,一个池化层(下采样)),并且随着深度在卷积块内使用的卷积核次数逐渐提升,这使得提取的特征图有递进的效果(底层到深层),但是在Transformer中并没有这样的变化,从图中可以看到在Transformer中几乎每一层都是执行相同的全局Self-Attention,没有逐层递进的特征抽象过程。从图中可以看到在ViT中一致都保持着相同的16x分辨率。
- 计算复杂度高
- resolution太大了,直接计算全局Self-Attention开销太大
- 缺乏局部信息捕捉能力
- 同理没有层次性的逐层递进的特征抽象,必然缺少局部信息
- 位置编码问题
Swin Transformer 的创新点在于,它参考了卷积的运行,形成了多尺度的特征图来进行训练,具体如下:
- Hierarchical Design
- 借鉴了Cnn中的层次化结构,通过Patch merging的方式来降低图片的分辨率来达到模拟卷积下采样的目的
- Patch merging具体如下
初始patches,假设输入特征图大小为H x W x C
patch merging,将相邻的2x2特征块合并成一个块
result,合并后的特征图,每个新的特征块包含4个原特征块的信息
其中在patch merging 中,细节如下
- 将输入特征图划分为2x2特征块,每个特征块大小为
- 将每个2 x 2 特征块展平成一个向量,这个向量长度为
- 通过线性变化(
nn.Linear(4 * dim, 2 * dim, bias=False)
)调整向量维度实现下采样作用。输出为
- Window-based Self-Attention
- 将特征图(batch_size,num_patches,C) 划分为多个固定大小的窗口,例如7 x 7,每个窗口内的特征进行Self-Attention
- 在论文中,是通过计算线性投影的复杂度(Q,K,V)和自注意力的复杂度来求总复杂度的,即如下。

- Shifted Window
- 在window中做Self-Attention会有一个问题,即一致在同一个windows中只能建立局部关系,故通过shifted window的方式对窗口进行平移来实现跨窗口的信息交互。
- 即,窗口在图像上移动一个步长,然后重新划分窗口。如图,原先四个window,shifted以后有9个window,且每个window的大小不一致

- Post Shifted Window
- 但是shifted window后,如图,图片就变成了多个不规则patches集合,这对计算后续self attention造成了困难(计算Q,K,V)。
- masked-MSA
- 使用上图的9个window举例子,不直接进行self-attention,而是先做cyclic shift,从而将9个不规则window补全成方便计算的4个规则window
- 但是反常识的是,就算补足成了规则的window可以计算Self-Attention。但是基于cyclic shift 才补足成为规则window的地方,其实是不能做Self-Attention,因为cyclic shift过来的patches,虽然在一个window中,但是语义上是不应该有所联系的。
- 使用mask来解决上述问题,让一个window中有不同语义的patches也能通过一次前向过程来能够计算Self-Attention 。


从图中可以看出,一个原始的图片划分成多个patches后经过patch partition添加上位置信息,通过Linear Embedding来进行token化输入到一个Swin Transformer Block中进行计算,通过一次W-MSA和一次SW-MSA输出经过两次自注意力计算后的结果,然后通过Patch Merging进行下采样操作得到多尺度的特征图,等等
4、Video Swin Transformer

从图中可以看到,基本的运算逻辑与Swin Transformer是一致的,仅是增加了:
将2D window改成3D window,即将时间维度作为一个额外的维度进行窗口划分和Self-Attention计算
3D Patch Partitioning,在patch划分的时候使用3Dpatch 划分。例如,Swin Transformer中的划分,转换为
Prev
Hippo: Sliding Transforms
Next
Stochastic Processes
Loading...