VIT视觉tansformer(一) transform介绍
博主近期受到2021顶刊CVPR、ICCV等有关transformer的启发,考虑结合到自课题组的相关工作于是开始学习一下这个新的网络。
本总结参考知乎大佬深度眸,本系列通过介绍transformer的基本结构,结合VIT的相关成果如vision transformer和detr进行分析,目的在于快速初步入门。
1.摘要
transformer结构首先是google在17年的Attention Is All You Need论文中提出的,在NLP领域取得了很好的效果。其最大特点是抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成,对下游任务有很大的友好性,对下游任务仅仅微调即可得到不错的效果,近期引入到计算机视觉领域,取得了不错的效果,比如目标检测领域的detr和可变形detr。分类领域的vision transformer等等
2.teansformer介绍
最初的transformer是以机器翻译为例子的,如下图所示
2.1早期seq2seq
机器翻译的本质可以理解为序列转序列问题,也可以称为encoder-decoder结构,如下图所示。
其核心思想都是通过Encoder编码成一个表示向量,即上下文编码向量,然后交给Decoder来进行解码,翻译成目标语言。一个采用典型RNN进行编码码翻译的可视化图如下:
需要注意的是不管输入和输出的长度,中间的上下文编码向量都是固定长度,这也就存在问题当输入句子过长时,上下文编码向量不能包含足够的信息,存在信息瓶颈,造成翻译精度的下降。
2.2基于attention的seq2seq
是基于上述的缺陷提出来的带有注意力机制的seq2seq,,可以应用于RMM、LSTM、GRU模块中。
**注意力机制:**假设给定一张图片,我们会自动聚焦到一些关键信息位置,而不需要逐行扫描全图。此处的注意力是指对输入的自适应加权比较类似SENet中的SE。总结其机制为
将Query(通常是向量)和4个Key(和Q长度相同的向量)分别计算相似性,然后经过softmax得到q和4个key相似性的概率权重分布,然后对应权重乘以Value(和Q长度相同的向量),最后相加即可得到包含注意力的attention值输出
# 假设q是(1,N,512),N就是最大标签化后的list长度,k是(1,M,512),M可以等于N,也可以不相等
# (1,N,512) x (1,512,M)-->(1,N,M)
attn = torch.matmul(q, k.transpose(2, 3))
# softmax转化为概率,输出(1,N,M),表示q中每个n和每个m的相关性
attn=F.softmax(attn, dim=-1)
# (1,N,M) x (1,M,512)-->(1,N,512),V和k的shape相同
output = torch.matmul(attn, v)
在没有attention时候,不同解码阶段都仅仅利用了同一个编码层的最后一个隐含输出,加入attention后可以通过在每个解码时间步输入的都是不同的上下文向量解码阶段会将第一个开启解码标志(也就是Q)与编码器的每一个时间步的隐含状态(一系列Key和Value)进行点乘计算相似性得到每一时间步的相似性分数,然后通过softmax转化为概率分布,然后将概率分布和对应位置向量进行加权求和得到新的上下文向量,最后输入解码器中进行解码输出,其详细解码可视化如下
优点:
1.注意力允许解码器以不同程度的权重利用到编码器的所有信息,可以绕过瓶颈
2.通过检查注意力分布,可以看到解码器在关注什么,可解释性强
2.3基于transformer的seq2seq
基于attention的seq2seq结构依然存在一些不足
(1)不管是采用RNN、LSTM还是GRU都不利于并行训练和推理,因为相关算法只能从左向右依次计算或者从右向左依次计算
(2)长依赖信息丢失问题,顺序计算过程中信息会丢失.
Attention Is All You Need论文中抛弃了传统的CNN和RNN,将attention机制发挥到底,整个网络结构完全是由Attention机制组成,这是一个比较大的进步
系统的整体结构由完全相同的6个编码器和6个解码器组成 ,详细结构如下图
其中N=6,由于基于transformer的翻译任务已经转化为分类任务(目标翻译句子有多长,那么就有多少个分类样本),故在解码器最后会引入fc+softmax层进行概率输出,训练也比较简单,直接采用ce loss即可,对于采用大量数据训练好的预训练模型,下游任务仅仅需要训练fc层即可。