1. 前言
再读Attention开创论文,看看会不会对视觉开发有启发。
2. 摘要
作者是谷歌的一个组,提出了Transformer(变形金刚),本质上是一种与RNN和CNN同等级的特征提取方式,在这篇文章中,用Multi-head-self-attention代替了之前的recurrent层,在文本翻译的上面去的了很好的成果。目前在图片和视频上也有应用。
3. 主要优化点
传统的RNN并行度较差,且是时序向前的,如果处理时序较长,很久之前的信息可能在传递过程中权重已经非常低了。
Attention的计算机制并行度非常高,而且对于时序的追踪或者sequence length长度内的追踪是可以调节的。
4. Transformer模型
整个Transformer模型分成了Encoder和Decoder两部分,其中decoder一部分输入来自Encoder,另一部输入来自上次的输出。
4.1 Encoder部分
Encoder的输入有Input Embedding和Positional Encoding,后面再补充解释这两部分。
Encoder整个模型有两部分(重复几次),一部分是Muliti-Head Attention,一部分是FeedForward(这里是多层感知机),两部分都有残差结构和Norm处理,这里的Norm是LayerNorm。
下图一图就可以说明
对于句子这些不定长度的识别,不同长度的句子就是一堆batch,如果按照batch方向去切,你会发现不同长度有不同的补0位数,虽然补0不参与计算,但是由于句子长度不断的变化,这样batch normalization出来的结果会非常不稳定。但是feature方向去切,其实只是对一句话或者一个样本进行normalization,这样就会相对稳定一些。
作者其实做了三个向量,Q(query),K(Keys), V(Value),向量长度为dk,Q和K通过点积或者余弦相关求出相关系数,通过softmax得到归一化的概率分布,将这个归一化系数与V相乘,最终得到的就是attention。当然实际计算的时候,我们不可能只算一个样本,我们会把所有的样本压缩在一起。我们假设有n个Q,m个K,Q的矩阵维度就是n * dk,K的矩阵维度m * dk。二者相乘得到一个n * m的矩阵,每一行都是一个Query,对行求softmax,得到归一化的概率。V的矩阵维度为m * dv,最后得到的attention矩阵就是n * dv
我们发现我们刚刚的处理其实是没有什么可以学习的地方,基本就是数据的处理过程。多头的Attention其实有点类似卷积处理过程中的下采样操作,通过增加channel,来减少特征层大小。这样其实就提供了一个可以学习的参数h,但实际上这个一般是自己设置的超参数。