从Transformer到VIT再到MAE
引言
最近一年来,Transformer在CV领域又掀起了一股新的潮流,尤其是ViT这篇文章,可以说是在CV的Transformer的应用方面挖了一个大坑,后面也如雨后春笋般掀起了一个改进和优化ViT的大潮,或者说在VIT的启发下又出现了新的方法(比方说MAE,BEIT等)。
这篇文章的主要目的是梳理从Transformer到VIT再到MAE都有什么思路上,架构上的变化,为什么要对某些地方进行修改或者提升,以及一些具体的技术细节,总的来说,是为了穿起来一个故事,来介绍这一整个趋势的前因后果和我自己的一些思考。
并且这三篇论文的写作可以说都是很成功的,从写作的角度也可以学到如何书写一篇优秀的论文。
Transfomer
先放论文链接:Attention Is All You Need
提出的背景
这篇文章在最初的时候是针对机器翻译的场景下提出的。
相对于RNN提出的主要原因
- RNN的计算是单向序列化的,当前词的状态是由钱前一个隐藏状态和当前词共同决定的,这样就保证了信息的传递。但这样带来的缺点是,计算当前状态的时候,必须要前面的状态计算完成才可以,是无法并行的,不能发挥GPU的计算优势。
- 如果当前的序列比较长,前面的状态都需要存下来,导致内存开销比较大。
相对于CNN提出的主要原因:
每个卷积核比较小(例如3*3),如果两个像素的距离比较远的话,想要融合两个像素的信息则需要很多层卷积才能办到。用注意力机制的话可以一次看到所有的输入序列。
模型架构
这里用的是论文里面的插图:
左边框内的是编码器,右边框内的是解码器,编码器解码器的层数都是N层的。
编码器:一次性可以看全句子,将输入序列的每一个元素转化为一系列的连续的向量。
解码器:自回归,在过去时刻的输出作为当前的输入,一个词一个词的往外翻译,不能看到全句。
具体细节
Add&Norm
这一层相当于是ResNet的直连和Normalization
但是需要注意的是,RseNet的Normalization是指在Batch中的Normalization,针对的场景是我们输入图片的尺寸都是相同的,这样的话可以对一个batch内的所有图片做Norm,但是对于文本序列来讲,很有可能长度是不一样的,这样在一个batch内做norm就会失去意义,因为尺度是不同的,用较短的序列求得的batch norm不一定会适合长序列,会有抖动比较大的问题。
所