文章提出一种新型的网络结构-Transformer,他丢弃了传统的CNN、RNN,整个网络结构完全由attention机制组成,在两个机器翻译任务上的实验表明,他不仅在效果上有优势,同时还具有更强的并行性,需要的训练时间也显著减少。目前广泛应用于NLP领域,如机器翻译、问答系统、文本摘要等。
在文章发表时,RNN、LSTM、GRU等还是非常先进的方法,大量的工作推进着RNN以及encode-decode结构的发展。
RNN模型都是沿着序列的方向从左到右或者从右到左的方向去进行计算,计算时间与序列长度对齐,$h^t$ 状态的值,由$h^{t-1}$ 状态及位置$t$ 的输入计算得到。这种顺序计算的特性,使得训练无法做到并行化,而在较长的序列长度下,并行化是至关重要的,内存的约束,会限制模型一个batch训练的数量。虽然有一些计算上的trick,可以提高模型训练的一部分性能,但是RNN顺序计算的约束还是在。
而且在顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期依赖的现象,LSTM依旧无能为力。
在许多任务中,attention机制早已经是序列模型不可少的一部分了,它可以使模型在不考虑在序列中距离的情况下,建立依赖关系。但是当时,这种注意力机制基本上都是和RNN一起使用的。
于是作者提出了Transformer,一个避免了循环网络的结构模型,完全依赖于一个注意机制来完成输入和输出之间的全局依赖关系。并且可以实现更强大的并行化。
在这之前的模型中,我们一般都是使用CNN去计算序列元素的位置信息,在这些模型中,将两个任意位置的信号联系起来所需要的操作数量,也随着位置之间的距离增加而增加。也使得获得距离较远的位置之间的依赖关系变得更加困难。而在transformer中,这部分将使用常数的等式计算来简化。而且尽管transformer为了提高性能,使用注意力的加权位置的平均值来计算,会减少数据的有效信息,作者在后面使用多头注意力机制也抵消了这个问题。
self_attention(自注意),有时也称为(intra_attention)内注意,是一种注意机制,将单个序列的不同位置联系起来,以计算序列的表示。目前已经被成功地应用于各种任务中,包括阅读理解、文本摘要、机器翻译等。
端到端记忆网络是基于循环注意机制,而不是顺序对齐的递归,并已被证明在简单语言问题回答和语言建模任务上表现良好。
下面我们将详细解析一下模型的结构。
一个基于transformer的可训练神经网络通过堆叠transformer的形式进行搭建,作者的实验是通过搭建编码器和解码器各6层,总共12层的Encoder-Decoder。
编码器将输入序列映射到信号表征$(x_1,...,x_n)$再继续到一个联系表示序列$z=(z_1,...z_n)$ 得到$z$ 之后,解码器再依次生成输出序列$(y_1,...y_m)$ 计算的每一步,模型都是自回归的,在生成下一个符号之前,都会使用先前生成的符号作为附加输入。
模型的主体结构图如下,左边代表编码器的堆叠,右边代表解码器的堆叠。