Abstract部分:
开始时这个网络作者尝试应用在机器翻译任务上面,他们提出Transformer可以不使用递归和卷积,并且网络较为简单,实现效果也很好。(仅仅使用注意力机制,把之前应用在encoder-decoder结构的循环层全部换成mult-headed self-attention)
Background:
之前运用卷积的方式,对于两个距离很远的像素需要很多卷积层才可以将其放在一起(感受野),而transformer运用注意力机制一层就可以看到整个序列。但是卷积的好处可以实现多通道的输出,因此文章提出了一种multi-head attention。
Self—attention(自注意力机制)
将一个序列的不同位置联系起来,以便于计算整个序列。
这是第一个只依赖于自注意力机制的模型。
Model architecture
Encoder(编码器),输入一个长为n的序列(x1, ..., xn),进行表示处理后得到的是一个连续表示序列z = (z1, ..., zn)。Decoder(解码器),拿到z后,生成一个长为m的序列(y1, ..., ym)
左半部分编码器,右半部分解码器
Encoder(编码器)
用了6个完全一样的层,如上图左边,每一层首先是一个mulit-head self-attention,再跟了一个mlp。对于每一个子层使用了一个残差连接。为了满足做残差链接时每一部分的维度相同,于是将每一部分的输出都做成512大小。(这部分的超参数:N=6,维度=512)
Decoder(解码器)
同样运用了6个完全一样的层,如上图右边,也同样时6个层,每一层中有三个子层,与编码器不同之处在于解码器中加入了一个mask的多头注意力机制,防止t时刻中看到t时刻之后的输入。
注意力机制:
设queries和keys的维度为dk,value的维度为dv。
这里的scale指的是结果处于根号下dk。
多头注意力机制:
做法是把qkv都投影h次,分别进行点乘计算注意力,然后最后的结果进行拼接得到输出。