主要的序列转导模型基于包括编码器和解码器的复杂递归或卷积神经网络。表现最好的模型也通过注意机制连接编码器和解码器。作者提出了一个新的简单的网络结构,变压器,完全基于注意机制,完全免除了递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上是优越的,同时具有更好的并行性,并且需要更少的训练时间。
针对nlp里的机器翻译问题,提出了一种被称为”Transformer”的网络结构,基于注意力机制。文章提出,以往nlp里大量使用RNN结构和encoder-decoder结构,RNN及其衍生网络的缺点就是慢,问题在于前后隐藏状态的依赖性,无法实现并行,而文章提出的”Transformer”完全摒弃了递归结构,依赖注意力机制,挖掘输入和输出之间的关系,这样做最大的好处是能够并行计算了。
所有使用卷积神经网络作为基本构建块,并行计算所有输入和输出位置的隐藏表示。将来自两个任意输入或输出位置的信号联系起来所需的运算数量随着位置之间的距离而增加,对于ConvS2S是线性的,对于ByteNet是对数的。这使得学习遥远位置之间的依赖关系更加困难。在Transformer中,这被减少到恒定的操作次数,尽管代价是由于平均注意力加权位置而降低了有效分辨率,可以使用多头注意力抵消。
Slef-attention是一种将单个序列的不同位置联系起来的注意机制,目的是计算序列的表示。
端到端记忆网络是基于一种循环注意机制,而不是序列对齐的循环,并已被证明在简单语言问答和语言建模任务中表现良好。Transformer是第一个完全依靠自我注意来计算其输入和输出表示的转导模型,而不使用序列比对的RNNs或卷积。
大多数自然语言转换模型都包含一个encoder-decoder结构,模型的输入是一个离散符号序列(symbol),encoder负责将它映射成连续值序列。而给定,decoder负责生成一个输出符号序列。模型是自回归的,即之前生成的输出会作为额外的输入,用于生成下一个输出。
Transformer遵循编码器和解码器均采用堆叠式自我关注层和点状完全连接层。
Encoder:Transformer模型的Encoder由6个基本层堆叠起来,每个基本层包含两个子层,第一个子层是一个注意力机制,第二个是一个全连接前向神经网络。对两个子层都引入了残差边以及layer normalization。为了方便残差连接,模型中的所有子层以及嵌入层都产生尺寸的输出。
Decoder:解码器也由N = 6个相同的层组成。除了每个编码器层中的两个子层之外,解码器还插入第三个子层,该子层对encoder的输出执行多头注意力。与encoder类似,在每个子层周围使用残差连接,然后进行层标准化。我们还修改encoder中的自我关注子层,以防止位置影响后续位置。这种掩码,加上输出嵌入偏移一个位置的事实,确保了位置i的预测只能依赖于小于i的位置处的已知输出。
注意函数可以描述为将查询和一组键值对映射到输出,其中查询、键、值和输出都是向量。输出计算为值的加权和,其中分配给每个值的权重由查询与相应键的兼容函数计算。
输入包含维的query和key,以及维的value。通过计算query和各个key的点积,除以归一化,然后经过softmax激活变成权重,最后再乘value。点积注意力机制的优点是速度快、占用空间小。
用h(本文取8)个不同的线性变换分别将维的key、value和query映射成维、维和维,然后再代入注意力机制,产生总共维输出,然后拼起来,再用一个线性变换得到最终的输出。
其中h=8,即8个head,
这是一个 Position-wise 前向神经网络,encoder和decoder的每一层都包含一个前向神经网络,激活函数顺序是线性、RELU、线性。
虽然线性变换在不同位置上是相同的,但它们在层与层之间使用不同的参数。描述这种情况的另一种方式是两个内核大小为1的卷积。输入和输出的维度是,内层的维度。
类似于其他序列转导模型,使用学习嵌入将输入标记和输出标记转换为维度为的数据模型的向量。还使用通常学习的线性变换和softmax函数将decoder输出转换为预测的下一个令牌概率。在两个嵌入层和预softmax变换之间共享相同的权重矩阵。在嵌入层中,我们将这些权重乘以。
由于本文的模型结构没有使用任何递归结构或卷积结构,为了让模型能利用输入序列的顺序信息,必须引入某种能表达输入序列每个部分的绝对或相对位置的信息才行。文章采取的方法是位置编码(positional encoding),在送入encoder和decoder之前,先对输入进行编码,编码后的向量维度是。具体来说,采用正弦和余弦函数进行编码。
其中,pos是位置,i是维度。也就是说,位置编码的每个维度对应于正弦曲线。波长形成从2π到10000⋅2π的几何级数。选择了这个函数,因为我们假设它允许模型容易地学习相对位置,因为对于任何固定偏移k,可以表示为的线性函数。
从三个方面去对比self-attention和递归结构、卷积结构的优劣性,首先是每一层的计算复杂度,其次是能够被并行的计算量,最后是网络中长期依赖的路径长度。对比显示,self-attention表现最好。\
训练数据使用WMT English-German数据集,包含450w对语句。句子都被编码过了,使用了一个大小约37000个token的字典。样本被分为若干个batch,每个batch大概25000个token,每个batch中的句子长度保持基本一致。硬件上使用了8块GPU。Optimizer使用了Adam。过拟合方面使用了dropout和Label Smoothing。
不论是英语-德语还是英语-法语的翻译任务,对比之前的一些模型,本文提出的模型都达到更好的BELU值,同时Training Cost也最低。
https://github.com/tensorflow/tensor2tensor