All about Vision Transformer

Vision Transformer (ViT) 论文讲解

Posted by Kylin on March 28, 2023

[TOC]

Transformer in CV

Transformer的优势:

  • 并行计算

3333xsdwqs

  • 全局视野
  • 灵活的堆叠

ViT的研究价值

  • 展示了在计算机视觉中使用纯Transformer结构的可能

图片—〉transformer—〉 结果

图片—〉backbone(CNN) —〉transformer—〉 结果

ViT Network Dataflow

Dataflow

截屏2023-03-30 14.50.00-1

Self-Attention

本质上是一种自相似性的计算

早期的 Attention mechanism:

截屏2023-03-30 15.03.48

Transformer中的Self Attention这样计算:

截屏2023-03-30 15.05.51

Q、K、V 是从输入向量(矩阵)线性变换得到的三个向量(矩阵);在代码层面,我们可能只是使用一次矩阵乘,然后切分成三个矩阵:

Query: 查询, 询问;相当于你在淘宝搜索 “游戏机”

Key: 键值,关键词 ;相当于在后端数据库中“游戏机”

Value: 价值,数值;相当于商品页面的“选项”

所以Q(K^T)相当于计算搜索词与数据库的匹配度,Q(K^T)V相当于输出搜索结果

截屏2023-03-30 15.31.28

这里的 Z1=V1+V2+V3 结果就是词语在句子背景下的词义

  • 这里的向量乘可以通过矩阵乘法并行

v2-8628bf2c2bb9a7ee2c4a0fb870ab32b9_1440w

这个图里的乘法转置过

Multi-Head

本质上就是有多个Wq,Wk,Wv, 上述操作重复多次,结果concat一起,再过一次linear使得结果与输入维度一致。

截屏2023-03-30 15.21.36

Multi-Head使得模型可以使用多种注意力:短注意力、长注意力等

Details

为什么会有 Patch 0?

从NLP角度看,Patch 0 是一个句子的起始符,NLP认为 输出的 Cls Token 可以用在句子级语义判断上(比如句子分类问题);

从CV角度上看,ViT 需要一个整合信息的向量,如果只有原始输出的9个向量,用哪个向量来分类都不好,全用计算量又很大(也可以,就是求均值),所以加一个可学习的 vector 也就是patch 0来整合信息。

截屏2023-03-30 14.48.06

Positional encoding

Motivation:图像切分重排后失去了位置信息,并且Transformer的内部运算是空间信息无关的,所以需要把位置信息编码重新传进网络

Solution:ViT使用了一个可学习的vector来编码,编码vector和patch vector直接相加组成输入

  • 相加是一种特殊的 concat:

$W(I+P)=WI+W P$

$[W_1, W_2][I, P]=W_1 I+W_2 P$

$\mathrm{W} 1=\mathrm{W} 2$ 时,两式一致; 其实也有为了简化计算的原因

截屏2023-03-30 15.10.43

为什么scale取sqrt(d_k)?

https://github.com/BAI-Yeqi/Statistical-Properties-of-Dot-Product/blob/master/proof.pdf