Transformer系列论文阅读

这是博主在五一期间对Transformer几篇相关论文阅读的小笔记和总结
也借鉴参考了很多大佬的优秀文章,链接贴在文章下方,推荐大家前去阅读

该文章只是简单叙述几个Transformer模型的基本框架,对其详细信息(如实验情况等)请阅读论文或点击下方对应文章链接前往阅读

阅读论文

A Survey on Visual Transformer[1]

Transformers in Vision: A Survey[2]

An Image Is Worth 16X16 Words: Transformers for Image Recognition at Scale[3]

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows[4]

Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions[5]

Transformer in Transformer[6]

ConvBERT: Improving BERT with Span-based Dynamic Convolution[7]

Tokens-to-Token ViT: Training Vision Transformers from Scratch on ImageNet[8]

AutoTrans: Automating Transformer Design via Reinforced Architecture Search[9]

综述

[1],[2]讲述了目前Visual Transformer的爆火和Transformer在CV方面的各种应用,

Transformer应用

虽然Transformer爆火,但目前CV领域还是由CNN主导

但人们依然很看好Transformer在CV领域的应用于前景,希望将Transformer迁移到CV领域中,

主要分为两大类

  • 将self-attention机制与常见的CNN架构结合
  • 用self-attention机制完全替代CNN,如[3],[4],[5]

[3]提出VIT模型,应用于CV领域的Image Classification,在大规模数据上训练的得到的模型达到不错的效果

[4]提出Swin Transformer模型,基于VIT模型的改进,应用于Image classification,Object detection,Semantic segmentation

[5]提出Pyramid Vision Transformer模型,基于VIT模型的改进,应用于Object detection,Semantic segmentation

[6]提出Transformer in Transformer模型,应用于Image benchmark and downstream tasks

[7]提出ConvBERT模型,基于BERT的预训练语言模型

[8]提出Tokens-to-Token ViT模型,基于VIT模型改进

[9]讨论了Transformer Model 的自动化设计,对于layer-norm的位置,个数,attention head 的个数,使用哪个激活函数的问题

VIT

VIT是早期提出用于CV中Image classification的结构,虽然存在着不足,但对最近Swin TransformerPyramid Vision Transformer等模型提出提供了宝贵经验。

Transformer在NLP中处理的是序列化的数据,而CV中处理的是三维的图像数据(H,W,C)

所以,VIT提出了Patch划分的方法,将三维图像数据转化为序列化数据

基础模型

Model
  • 将图像转化为序列化数据

    • 将图像划分为一个个Patch,对这一系列Patch进行reshape,从而得到序列化的Patch数据,即Flattened Patch

    对于一张 H × W × C H \times W \times C H×W×C的图片,采用 P × P P \times P P×P的Patch来划分,得到 N = H P × W P N=\frac{H}{P} \times \frac{W}{P} N=PH×PW个patch( P × P × C P\times P\times C P×P×C),reshape后得到维度 P 2 C P^2C P2C的Flattened Patch(向量),对N个Flattened Patch进行concat之后得到一个 N × ( P 2 C ) N\times (P^2C) N×(P2C)的二维矩阵,相对于NLP中输入Transformer的Word Embedding

    • Linear Projection:对维度 P 2 C P^2C P2C的Flattened Patch进行维度转化,得到固定长度 D D D的特征向量
      • 防止模型结构受Patch大小的影响

    综上,原本 H × W × C H \times W \times C H×W×C的图片转化为了 N 个 D N个D ND维向量(或一个 N × D N \times D N×D的二维矩阵)

  • Position embedding

    • 0-9的紫色框表示各个位置的position embedding,粉色框为经过Linear Projection后的Flattened Patch,二者相加
  • Learnable embedding

    • 分类标志位[class],即图中0编号,它经过Encoder后的结果作为整个图像的表示
    • 假如随意指定1-9作为整个图像的表示,则会导致整体表示偏向这个Embedding信息,即图像表示偏重于反映某个Patch
  • Transformer Encoder

    • 第一层输入, x x x表示一个Patch, E E E表示Linear Projection转化矩阵
      z 0 = [ x c l a s s ; x p 1 E ; . . . x p N E ] + E p o s E ∈ R ( P 2 ⋅ C ) × D , E p o s ∈ R ( N + 1 ) × D z_0=[x_{class};x^1_pE;...x_p^NE]+E_{pos}\\ E\in \Bbb R^{(P^2·C)\times D},E_{pos}\in \Bbb R^{(N+1)\times D} z0=[xclass;xp1E;...xpNE]+EposER(P2C)×D,EposR(N+1)×D

    • 对于第 l l l

    z l ′ = M S A ( L N ( z l − 1 ) ) + z l − 1 z l = M L P ( L N ( z l ′ ) ) + z l ′ l = 1... L z^{'}_l=MSA(LN(z_{l-1}))+z_{l-1}\\ z_l=MLP(LN(z^{'}_l))+z^{'}_l\\ l = 1...L zl=MSA(LN(zl1))+zl1zl=MLP(LN(zl))+zll=1...L

    • 每个块后使用Residual connection,每个块前使用Layernorm

不足

在中等大小的数据集(如 ImageNet)上训练得到的VIT模型准确率低于CNN模型

Swin

Swin Transformer基于VIT进行了改进,可以作为通用backone,应用于Image classification,Object detection,Semantic segmentation

  • 引入层次化结构
    • 解决CV领域scale变化范围大的问题
  • 将self-attention计算限制在local window中
    • 解决CV使用Transformer计算复杂度为图像size二次方的问题
  • 支持cross-window connection

基础模型

总体结构

创新

  • 引入stage,随着网络深度增加,合并patch
  • 使用基于Shifted Windows的W-MSA替换标准的MSA
  • 提出Shifted Window划分

Stage

引入4个stage,每个stage的操作类似于上述的VIT模型

区别

Swin随着网络深度的加深,patch的数量在不断减少,且每个patch的感知范围在不断扩大,而VIT模型的patch保持不变

  • Patch Partition:如VIT模型将图像转化为序列化数据,将原始图像划分为一个个Patch,但彼此不重叠

    • 根据设置的Patch大小( 4 × 4 4 \times 4 4×4),对输入的Image( H × W × 3 H\times W\times 3 H×W×3)划分为 H 4 × W 4 \frac{H}{4} \times \frac{W}{4} 4H×4W个Patch
    • 将原始图像的像素值作为其 Feature
    • 每个Patch的维度为 4 × 4 × 3 = 48 4 \times 4 \times 3 = 48 4×4×3=48
  • Stage1

    • Linear Embedding:将 Feature 映射到任意维度,记作 C C C
    • Transformer Block:进行Self-Attention运算,不改变token数量
  • Stage2

    • Patch Merging:对 2 × 2 2 \times 2 2×2的相邻Patch进行合并,通过linear layer将Feature映射到 4 C 4C 4C维度
      • 合并过后,Patch数量降为 1 4 \frac{1}{4} 41,MLP作用后,维度为 2 C 2C 2C
  • Stage3,Stage4

    • 类似于Stage2,最终得到一个层次化的结构

W-MSA

每个window包含 M × M M \times M M×M个patch,整个图像包含 h × w h \times w h×w个patch,总共 h 4 × w 4 \frac{h}{4} \times \frac{w}{4} 4h×4w个Patch

复杂度计算
Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C Ω ( W − M S A ) = 4 h w C 2 + 2 M 2 h w C \Omega(MSA) = 4hwC^2 + 2(hw)^2C\\ \Omega(W-MSA)=4hwC^2 + 2M^2hwC Ω(MSA)=4hwC2+2(hw)2CΩ(WMSA)=4hwC2+2M2hwC
M M M固定大小时, Ω ( W − M S A ) \Omega(W-MSA) Ω(WMSA)线性增长

Shifted Window 划分

在连续的Swin Transformer Block之间交替进行两种划分配置,进而保持 non-overlapped windows 的高效计算同时引入 cross-window connection

Shifted Windows划分

  • Layer1:将 8 × 8 8\times 8 8×8的Feature Map 划分为 2 × 2 2 \times 2 2×2个window,每个window大小为 4 × 4 , 即 M = 4 4 \times4,即M=4 4×4,M=4
  • Layer2:将Layer1的一系列window移动 ( ⌊ M 2 ⌋ , ⌊ M 2 ⌋ ) (\lfloor\frac{M}{2} \rfloor,\lfloor\frac{M}{2} \rfloor) (2M,2M)个像素

存在问题

  • 可能会生成过多window,范围 [ ⌈ h M ⌉ × ⌈ w M ⌉ , ( ⌈ h M ⌉ + 1 ) × ( ⌈ w M ⌉ + 1 ) ] [\lceil\frac{h}{M} \rceil\times\lceil\frac{w}{M} \rceil,(\lceil\frac{h}{M} \rceil+1)\times(\lceil\frac{w}{M} \rceil+1)] [Mh×Mw,(Mh+1)×(Mw+1)]
  • 生成window大小不一致,部分window较小

解决方案

Cyclic Shift

经过循环填补,Layer2的window划分类似于Layer1,此时的batch window由不相邻的sub-window构成,采用masking mechanism来限制seft attention在sub-window中的计算

Cyclic Shift

不足

图像分类上比ViT、DeiT等Transformer类型的网络效果更好,但是比不过CNN类型的EfficientNet,猜测Swin Transformer还是更加适用于更加复杂、尺度变化更多的任务。

Swin Transformer没有提供类似反卷积的上采样的算法

每一个window的Q,K,V都是独立的,即没有CNN的权值共享特性

PVT

Pyramid Vision Transformer同样基于VIT模型进行改进,是一种使用Transformer模型的无卷积骨干网络,主要用于除图像分类外的密集预测任务。

  • 引入金字塔结构
    • Feature Map的分辨率随着网络加深,逐渐减小
    • Feature Map 的Channel数随着网络加深,逐渐增大
    • 解决了VIT模型中,输入高分辨率图像产生高内存占用甚至显存溢出的问题
  • PVT继承了CNN和Transformer的优势,通过简单的替换CNN骨干使其成为不同视觉任务的统一骨干结构
  • 在object detection,semantic and instance segmentation 任务上取得优越性

基础模型

PVT

创新

  • 引入stage,随着网络深度增加,Feature Map的分辨率逐渐减小Channel数逐渐增大
  • 使用**spatial-reduction attention(SRA)**替换标准的MSA

Stage

  • Stage1
    • patch embedding:对输入的 H × W × 3 H\times W\times 3 H×W×3 图像(Feature Map)进行token化,设定其patch的大小 p × p p\times p p×p,将RGB图像划分为 H W P 2 \frac{HW}{P^2} P2HW个patch
      • 对这一系列的patch进行展开,然后传入linear projection中进行Patch Embedding
      • 将结果reshape后得到大小 H W P 2 × C \frac{HW}{P^2}\times C P2HW×C的embedded patch
    • 将embedded patch 和其对应的position embedding 一起传入Transformer Encoder中
      • SRA处理:使用函数 R e s h a p e ( x , R i ) Reshape(x,R_i) Reshape(x,Ri)将传入的embedding patch进行变形,由 R ( H W ) × C \Bbb R^{(HW)\times C} R(HW)×C转换为 R H W R i 2 × ( R i 2 C ) \Bbb R^{\frac{HW}{R_i^2}\times(R_i^2C)} RRi2HW×(Ri2C),然后乘以一个 W s ∈ R ( R i 2 C ) × C W^s\in \Bbb R^{(R_i^2C)\times C} WsR(Ri2C)×C矩阵,进而将原本的空间规模降为 1 R i 2 \frac{1}{R_i^2} Ri21,即 R H W R i 2 × C \Bbb R^{\frac{HW}{R_i^2}\times C} RRi2HW×C,这是SRA的核心
    • 将Transformer Encoder的结果进行reshape得到 H P × W P × C \frac{H}{P}\times\frac{W}{P}\times C PH×PW×C Feature Map,即 F 1 F_1 F1
  • Stage2,Stage3,Stage4
    • 由上一个Stage的输出作为输入,重复流程

SRA

SRA

SRA的核心是减少K与V的空间规模,也就是<K,V>对的数量,对比于MHA,K与V的空间规模降为其 1 R i 2 \frac{1}{R_i^2} Ri21

处理过程
S R A ( Q , K , V ) = C o n c a t ( h e a d 0 , . . . , h e a d N i ) W o h e a d j = A t t e n t i o n ( Q W j Q , S R ( K ) W j V , S R ( V ) W j V ) SRA(Q,K,V)=Concat(head_0,...,head_{N_{i}})W^o\\ head_j=Attention(QW_j^Q,SR(K)W_j^V,SR(V)W_j^V) SRA(Q,K,V)=Concat(head0,...,headNi)Woheadj=Attention(QWjQ,SR(K)WjV,SR(V)WjV)
SR(·)为spatial-reduction operation, W s W^s Ws是一个linear projection,它把input sequence的维度降到 C i C_i Ci
S R ( x ) = N o r m ( R e s h a p e ( x , R i ) W s ) SR(x)=Norm(Reshape(x,R_i)W^s) SR(x)=Norm(Reshape(x,Ri)Ws)

不足

  • 随着输入图片的增大,PVT的资源消耗增长率比ResNet高

TNT

Transformer in Transformer,用于视觉识别

  • 对patch-level和pixel-level representation都进行建模
    • 解决VIT相关模型忽略了每个patch内部固有结构信息的问题
  • 堆叠TNT Block来构建TNT模型

基础模型

TNT

创新

  • Inner Transformer Block用于提取pixel embedding的局部结构信息
  • Outer Transformer Block用于提取patch embedding的全局信息
  • 通过Linear Projection将pixel embedding投影到patch embedding space
  • 将输入图像划分为一个个Patch,

  • Unfold & Linear:将输入的Patch,转换为对应的Patch Embedding,Pixel Embedding

    TNT

    • Patch
      γ 0 = [ Y 0 1 , . . . Y 0 n ] ∈ R n × p ′ × p ′ × c Y 0 i ∈ R p ′ × p ′ × c \gamma_0=[Y_0^1,...Y_0^n]\in\Bbb R^{n \times p^{'}\times p^{'} \times c}\\ Y_0^i\in \Bbb R^{p^{'}\times p^{'} \times c} γ0=[Y01,...Y0n]Rn×p×p×cY0iRp×p×c

    • Pixel
      Y 0 i = [ y 0 i , 1 , . . . , y 0 i , m ] m = p ′ 2 Y_0^i=[y_0^{i,1},...,y_0^{i,m}]\\ m=p^{'2} Y0i=[y0i,1,...,y0i,m]m=p2

  • TNT Block

    • inner transformer block
      Y l ′ i = Y l − 1 i + M S A ( L N ( Y l − 1 i ) ) Y l i = Y l ′ i + M L P ( L N ( Y l ′ i ) ) Y_l^{'i}=Y_{l-1}^{i}+MSA(LN(Y_{l-1}^{i}))\\ Y_l^{i}=Y_{l}^{'i}+MLP(LN(Y_{l}^{'i}))\\ Yli=Yl1i+MSA(LN(Yl1i))Yli=Yli+MLP(LN(Yli))

    • outer transformer block 输入, V e c ( ) Vec() Vec()将Pixel展开成向量,b为bias
      Z l − 1 i = Z l − 1 i + V e c ( Y l − 1 i ) W l − 1 + b l − 1 Z_{l-1}^i=Z_{l-1}^i+Vec(Y_{l-1}^{i})W_{l-1}+b_{l-1} Zl1i=Zl1i+Vec(Yl1i)Wl1+bl1

    • outer transformer block
      Z l ′ i = Z l − 1 i + M S A ( L N ( Z l − 1 i ) ) Z l i = Z l ′ i + M L P ( L N ( Z l ′ i ) ) Z_l^{'i}=Z_{l-1}^{i}+MSA(LN(Z_{l-1}^{i}))\\ Z_l^{i}=Z_{l}^{'i}+MLP(LN(Z_{l}^{'i}))\\ Zli=Zl1i+MSA(LN(Zl1i))Zli=Zli+MLP(LN(Zli))

    • TNT block
      γ l , Z l = T N T ( γ l − 1 , Z l − 1 ) \gamma_l,Z_l=TNT(\gamma_{l-1},Z_{l-1}) γl,Zl=TNT(γl1,Zl1)

position encoding

position encoding

  • Pixel position encoding 在每一个Patch是共享的

ConvBERT

ConvBERT是一种基于span的动态卷积模型

  • 提出span-based dynamic convolution来代替一些冗余的self-attention head
    • 减少了预训练的计算花销,提高了local dependencies的建模能力
  • 提出mixed attention block
    • 结合span-based dynamic convolution和剩余的self-attention head
    • 更高效地学习 global and local context
  • 基于BERT结合mixed attention block,建立ConvBERT模型
    • 在各种downstream tasks中表现比BERT及其变体模型优越
    • 且更少的训练花销和更少的模型参数

基础模型

Span-based dynamic convolution
  • self-attention:使用所有token来捕获全局依赖关系,但由观察得知,BERT模型学习的更多是局部依赖关系

    • 随着序列增长,复杂度呈现二次增长

    • 故传统BERT模型存在大量冗余

      attention map
  • dynamic convolution:使用一个Kernel Generator来为每一个word embedding生成自己的Kernel

    • 但对于上下文相同的word生成的Kernel是相同的,无法解决一词多义的问题
  • span-based dynamic convolution:通过输入的word embedding和其周围的word embedding结合来生成Kernel

    • 解决一词多义的问题

Span-based dynamic convolution

Span-based dynamic convolution

生成dynamic Kernel
f ( Q , K s ) = s o f t m a x ( W f ( Q ∘ K s ) ) f(Q,K_s)=softmax(W_f(Q\circ K_s)) f(Q,Ks)=softmax(Wf(QKs))
span-based dynamic convolution公式
S D C o n v ( Q , K s , V ; W f , i ) = L C o n v ( V , s o f t m a x ( W f ( Q ∘ K s ) ) , i ) SDConv(Q,K_s,V;W_f,i)=LConv(V,softmax(W_f(Q \circ K_s)),i) SDConv(Q,Ks,V;Wf,i)=LConv(V,softmax(Wf(QKs)),i)
ConvBERT架构

  • Mixed Attention
    • 结合Self-Attention和Span-based dynamic convolution
    • Self-Attention捕获全局信息,Span-based dynamic convolution捕获局部信息
ConvBERT $$ MixedAttention(K,Q,K_s,V;W_f)=Cat(SelfAttention(Q,K,V),SDConv(Q,K_s,V;W_f)) $$
  • Bottleneck design for Self-Attention

    • 使用bottleneck structure来减少attention head
    • 将输入的embedding映射到更低维度
  • Grouped Feed-Forward module

    • 对Feed-Forward的改进,减少参数数量
      M = ∏ i = 0 g [ f d g → m g i ( H [ : , i − 1 : i × d g ] ) M ′ = G e L U ( M ) H ′ = ∏ i = 0 g [ f d g → m g i ( M [ : , i − 1 : i × d g ] ′ ) ] M=\prod_{i=0}^{g}[f_{\frac{d}{g} \rightarrow \frac{m}{g}}^i(H_{[:,i-1:i\times \frac{d}{g}]})\\ M^{'} = GeLU(M)\\ H^{'}=\prod_{i=0}^{g}[f_{\frac{d}{g} \rightarrow \frac{m}{g}}^i(M_{[:,i-1:i\times \frac{d}{g}]}^{'})] M=i=0g[fgdgmi(H[:,i1:i×gd])M=GeLU(M)H=i=0g[fgdgmi(M[:,i1:i×gd])]

Tokens-to-Token ViT

Tokens-to-Token Vit是基于Vit模型进行改进的

  • 提出Tokens-to-token
    • 解决Vit无法对图像相邻像素的局部结构信息(边缘,线条,纹理)进行建模
    • 对token进行局部建模,保留token局部结构信息并且减少token长度
  • 结合了deep-narrow结构的高效backone
    • 解决Vit冗余attention对feature richness的限制

基础模型

T2T

创新

  • Tokens to token Module:对图像的local structure 信息进行建模,并且减少了token的长度
    • re-structurization
    • soft split
  • T2T-ViT backone:应用了deep-narrow结构,减少了attention冗余,提高feature richness

Tokens to token Module

T2T process

  • Re-structurization

    • 对输入进行传统Transformer处理
      T ′ = M L P ( M S A ( T ) ) T^{'}=MLP(MSA(T)) T=MLP(MSA(T))

    • Reshape:将 T ′ ∈ R l × c T^{'}\in \Bbb R^{l\times c} TRl×c转为 I ∈ R h × w × c I \in \Bbb R^{h \times w\times c} IRh×w×c
      I = R e s h a p e ( T ′ ) I=Reshape(T^{'}) I=Reshape(T)

  • Soft Split

    • 建立local structure信息,减少token长度 l l l

    • 避免re-structurization过程中信息丢失,在split中采取overlap机制,将每一个patch与其周围的patch联系起来,从而捕获周围pixel和patch的信息
      l 0 = ⌊ h + 2 p − k k − s + 1 ⌋ × ⌊ w + 2 p − k k − s + 1 ⌋ l_0=\lfloor\frac{h+2p-k}{k-s}+1 \rfloor \times \lfloor\frac{w+2p-k}{k-s}+1 \rfloor l0=ksh+2pk+1×ksw+2pk+1

      T i + 1 = S S ( T i ) T_{i+1}=SS(T_i) Ti+1=SS(Ti)

T2T-ViT backone

backone

AutoTrans

  • comprehensive search space
    • 对layer-norm的位置设置
  • PL strategy and parameter sharing strategy
    • 对attention head数量的设置

参考文章

感谢下列文章提供的帮助,推荐大伙们阅读

用Transformer完全替代CNN

Swin Transformer对CNN的降维打击

大白话Pyramid Vision Transformer

Transformer in Transformer论文解读

ConvBERT:使用基于区间的动态卷积来提升BERT

  • 2
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值