1. 引言
RNN、LSTM和Gated RNN被认为是序列建模和翻译任务的SOTA。
循环神经网络通过一步一步地将输入和上一步的输出结果输入到模型中来得到下一步的输入。这个特点天生地让它只能用于串行计算,不能很好地利用并行化技术。虽然进来有一些用于改进的技术,但效果仍不理想。
注意力机制已经在序列化预测与转化任务中取得了广泛的应用,允许模型将不同位置的输入或输出建立联系。在少数情况下,注意力机制还被用于RNN中。
在这份工作中我们提出了Transformer,一种新的模型结构,抛弃了卷积和循环,仅仅使用注意力机制捕输出和输入间的获全局联系。
并且在翻译任务中取得了最优的效果。
2. 背景
减少顺序计算使得模型训练能够放在GPU上进行。许多模型采用卷积作为基本块,并行的计算中间表示和输出,如ByteNet和ConvS2S。这些模型对于长输入,不能很好的处理输入之间的联系性——计算所消耗的资源将会增长,ConvS2S是线性的,ByteNet是对数的,而我们的模型结构会将其压缩到常量复杂度。
自我注意力,是一种用于将某个序列的各个部分联系起来的计算序列的表示的注意力机制。已经被用于各种任务。
端到端记忆网路基于循环注意力机制,而不是对齐循环网络(关于对齐神经网络可以参考Neural Machine Translation by Jointly Learning to Align and Translate),在单一语言问答和语言模型任务中表现良好。
就目前而言,Transformer是第一个仅仅依靠自注意力机制获取句子表示的模型,下面我们将会介绍该模型的结构。
3. 模型结构
许多序列翻译模型使用编解码结构。这里,编码层负责将符号输入$ (x_1,…,x_n) 转 化 成 向 量 中 间 表 示 转化成向量中间表示 转化成向量中间表示z=(z_1,…,z_n) 。 给 出 。给出 。给出z$,解码器每次计算一个Token。每一步,模型都是自回归的,使用前面的Token生成下一个Token。Transformer同样遵循这个结构:堆叠的子注意力和全连接层(编码器和解码器)。
3.1 编码器、解码器列
-
编码器
编码器部分由6个基本单元组成。每一个单元含有两个子层,第一层是多头注意力机制,第二层是一个全连接层。每一个子层后接了一个残差结构和Layer Norm层,也就是说每一个子层的输出是 L a y e r N o r m ( x + S u b L a y e r ( x ) ) LayerNorm(x+SubLayer(x)) LayerNorm(x+SubLayer(x)),其中的 S u b L a y e r SubLayer SubLayer是对两个子层来说是不一样的,第一个子层对应的是多头注意力,第二个子层对应的是全连接层。为了方便计算,所有层的输出维度设置为 d m o d e l = 512 d_{model}=512 dmodel=512。
-
解码器
解码器部分同样由六个基本单元组成,每个单元由三个子层组成,后两层和编码器相同。第一个子层的结构稍作修改,目的是以防泄露后面的子序列的位置信息。这里的掩码的意思是将输出表示向右移动一个位置,确保预测第 i i i个位置时仅仅依靠 i i i前面的元素。
3.2 注意力
注意力可以表示为查询(q)、键(k)和值(v)的函数,是用于增强一条输入元素之间的联系的机制。在[【Attention九层塔】注意力机制的九重理解这篇文章中有一个详细的解释。
3.2.1 放缩点积注意力
我们把我们用到的注意力称为“放缩点积注意力”。输入由* d k d_k dk维的查询和键和 d v d_v dv维的值*组成。
我们计算查询(q)和键(k)的点积,并用 d k \sqrt{d_k} dk缩放,应用softmax计算得到值(v)的权重。
在实际计算时,会将多次查询合并成一个查询矩阵 Q Q Q,键和值同样的被拼接为一个矩阵 K K K和 V V V,最终的计算是以矩阵形式的:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q, K, V ) = softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dkQKT)