论文:Attention Is All You Need
链接:https://arxiv.org/pdf/1706.03762.pdf
1、Introduction
在序列建模(sequence modeling)和转换问题(transduction problems),例如例如语言建模和机器翻译,循环神经网络是效果最好的网络。但是循环神经网路并不具备并行的能力,尤其是在长序列上,模型的速度受到循环神经网络顺序执行的限制。因此,研究人员提出了 Transformer,这是一种避免重复的模型架构,而是完全依赖注意力机制来绘制输入和输出之间的全局依赖关系。Transformer 允许显着提高并行度,并且在 8 个 P100 GPU 上进行短短 12 小时的训练后,可以在翻译质量方面达到新的水平。
2、Background
在transformer,为了提高并行能力Extended Neural GPU , ByteNet和ConvS2S等基于卷积神经网络的模型被提出,在这些模型中,关联来自两个任意输入或输出位置的信号所需的操作数量随着位置之间的距离而增加,对于 ConvS2S 呈线性增长,对于 ByteNet 呈对数增长(本质上就是通过一层一层叠加卷积池化结构)。这使得学习遥远位置之间的依赖关系变得更加困难。而在 Transformer 中,这被减少到恒定数量的操作,尽管由于平均注意力加权位置而导致有效分辨率降低,我们用多头注意力来抵消这种影响。
3、Model Architecture
3.1 总体架构
模型的维度为512维,编码器,解码器分别为6层(N=6)。
从上图可以看到,Encoders 的输出(最后一层的输出),会和每一层的 Decoder 进行结合(Encoder 向每层的 Decoder 输入 KV ,Decoder 产生的Q 从Encoder KV 里 查询信息,在训练期间,Decoder最开始的输入,代表开始的标签,第二个输入是I,第三个输入是am,然后依次出入是a , student,即输入的是正确答案)
3.2 注意力层
3.2.1 单头注意力
注:
scal 这里指的是除以 d k \sqrt{d_k} dk,The input consists of queries and keys of dimension d k d_k dk, and values of dimension d v d_v dv,
两种最常用的注意力功能是加法注意力和点积(乘法)注意力。两者在理论上的复杂性相似,但是点积注意力在实践中要快得多并且更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。对于较小的
d
k
\sqrt{d_k}
dk值,这两种机制的表现相似,但对于较大的
d
k
\sqrt{d_k}
dk值,加法注意优于点积注意。我们推测,对于较大的
d
k
\sqrt{d_k}
dk值,点积的幅度会变大,从而将softmax函数推到梯度极小的区域。为了抵消这种影响,我们将点积缩放
1
d
k
\frac{1}{\sqrt{d_k} }
dk1 。
如果q,k都是均值为零,方差为一的向量,那么q·k结果为均值为0方差为
d
k
d_k
dk。
3.2.2 多头注意力机制
多头注意力允许模型在不同位置共同注意来自不同表征子空间的信息。即对于相同的两个位置,可以通过不同的头来注意到表征空间不同的信息。
这里使用8头注意力机制。
3.2.3 Applications of Attention in our Model
总体架构前边已经说过了,需要注意的是,在decorder中我们需要防止信息向左流动,因此在解码其中,使用的是Masked自注意机制,即在自注意力过程中,给当前位置后的softmax(注意力分数)给
a
3
,
a
4
a_3,a_4
a3,a4取无穷小。
3.3 前馈层
3.4 嵌入层和softmax
encorder和decorder的嵌入层以及decorder的FC(最终softmax输出最终结果的那一层)的权重共享。
3.5 位置嵌入
p
o
s
pos
pos是位置,
i
i
i是维度。因为一个位置编码应该是
d
m
o
d
e
l
d_{model}
dmodel维度的,所以计算过程中存在
i
i
i。