本文最后更新于:2021年3月20日 晚上

Attention is all you need

摘要

主流的顺序翻译模型基于复杂的循环或卷积神经网络,其包含编码器和解码器。效果最好的模型通过注意力机制连接编码器和解码器。本文提出了一个新的简单的网络结构,Transformer,仅仅基于注意力机制,完全抛开循环和卷积。

递归模型通常沿着输入输出序列的符号位置进行因子计算。这种固有的顺序性排除了训练示例中的并行化,当序列长度变长时,并行化就变得至关重要,因为内存约束限制了示例之间的批处理。

本文提出的Transformer模型结构,避开了循环,完全依赖注意力机制来庙会输入和输出之间的全局依赖。

背景

自注意力(内部注意力)是一个注意力机制,联系不同位置的单个序列,来计算序列的一个表示。自注意力已经在多种任务上成功应用,包括阅读理解,抽象总结等。

端到端的memory网络基于递归注意力机制,而不是序列对其的递归,并且已经被证明在简单语言问答和语言建模任务中表现良好。

Transformer是第一个完全依赖自注意力来计算输入和输出表示的转移模型,而无需使用序列对齐的RNN或卷积。

模型结构

最有竞争力的神经序列转移模型具有一个编码-解码结构。这里的编码器将符号表示的输入序列(x1…xn)映射为连续表示的序列z=(z1,…zn)。给出z,解码器生成一个输出序列(y1,…ym)每次表示一个元素。在每一步模型是自动回归的。生成下一个时,将先前生成的符号用作附加输入。

Transformer遵循以上的整体结构,使用堆叠的self-attention和point-wise、编码器使用全连接层。

image-20210320215803807

3.1 编码器和解码器的堆叠

编码器

编码器由N=6个完全相同的层堆叠组成。每一层有两个子层。首先是一个multi-head 自注意力机制,其次是一个简单的position-wise的全连接前向传播网络。在这两个子层中采用了残差连接、层正规化。每个子层的输出是

,其中$Sublayer(x)$是sub-layer自身的函数。为了促进残差连接,模型中所有的子层和嵌入层的输出维度都是512维。

解码器

解码器也由N=6个完全相同的层堆叠而成。除了每个编码器层中的两个子层之外,解码器插入了第三个子层,该第三个子层在编码器堆栈的输出上执行multi-head attention。与编码器相同,解码器也在每个子层中采用了残差连接、层正规化。作者也修改了解码器堆栈中的self-attention子层,以防止器出现在后续的位置。这种掩盖,以及输出嵌入被一个位置偏移的事实,确保了对位置i的预测只能依赖于小于i位置的已知输出。

3.2 Attention

注意力函数可以描述为将查询和一组键值对映射到输出,其中查询、键、值和输出都是向量。将输出计算为值的加权和,其中分配给每个值的权重是通过查询与相应键的兼容性函数来计算的。

image-20210320215823909

总结

和大多数seq2seq模型一样,transformer的结构也是由encoder和decoder组成。

编码器的输入句子首先会经过一个自注意力层,可以帮助编码器再对每个单词编码时关注输入句子的其他单词。

自注意力层的输出会传递到前馈神经网络中,每个位置单词对应的前馈神经网络都完全一样。

解码器中也有编码器的自注意力层和前馈层。此外,这两个层之间还有一个注意力层,用来关注输入句子的相关部分。