【Transformer】Attention Is All You Need

Attention Is All You Need

在这里插入图片描述

1.Abstract

主要的序列转导模型是基于复杂的循环或卷积神经网络,其中包括一个编码器和一个解码器。性能最好的模型还通过一种注意机制将编码器和解码器连接起来。
我们提出了一种新的简单的网络架构, Transformer,完全基于注意机制,完全取消递归和卷积
在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更并行,需要的训练时间明显更少。
成功地将Transformer应用到训练数据大和有限的英语选区解析中,可以很好地推广到其他任务。

2.Introduction

循环模型通常是沿着输入和输出序列的符号位置进行因素计算。将这些位置与计算时间中的步骤对齐,它们生成一个隐藏状态ht序列,作为前一个隐藏状态htt 1和位置t的输入的函数。这种固有的顺序性质排除了训练示例中的并行化,这在较长的序列长度时变得至关重要,因为内存限制了示例之间的批处理。最近的工作通过[21]分解技巧和条件计算[32]显著提高了计算效率,同时也提高了后者的模型性能。然而,序列计算的基本约束仍然存在。

注意机制已经成为各种任务中引人注目的序列建模和转导模型的一个组成部分,允许对依赖关系进行建模,而不考虑它们在输入或输出序列中的距离。然而,在除了少数情况下,所有[27],这种注意机制与循环网络一起使用。在这项工作中,我们提出了Transformer,一个避免重复出现的模型架构,而是完全依赖于一个注意机制来绘制输入和输出之间的全局依赖关系。

在这项工作中,我们提出了Transformer,一个避免重复出现的模型架构,而是完全依赖于一个注意机制来绘制输入和输出之间的全局依赖关系。

3. Transformer

大多数竞争性的神经序列转导模型都有一个编码器-解码器结构的。
编码器将一个符号表示的输入序列(x1,…,xn)映射到一个连续表示的序列z =(z1,…,zn)。

给定z,解码器一次生成一个元素的符号的输出序列(y1,…,ym)。

在每一步中,模型都是自回归的,在生成下一个符号时,使用之前生成的符号作为附加的输入。
变压器遵循这种整体架构,对编码器和解码器使用堆叠的自注意层和点级的全连接层,分别如图1的左半部分和右半部分所示:
在这里插入图片描述
Transformer是第一个完全依赖于自我关注来计算其输入和输出的表示的转导模型,而不使用序列对齐的rnn或卷积。

1.Encoder and Decoder Stacks:

Encoder:

编码器由N堆=6个相同的层组成。每个层都有两个子层。第一种是一个多头自注意机制,第二种是一个简单的、位置上完全连接的前馈网络。我们在两个子层周围使用残差连接[11],然后进行层归一化[1]。也就是说,每个子层的输出是LayerNorm(x +子层(x)),其中子层(x)是由子层本身实现的函数。为了方便这些剩余连接,模型中的所有子层以及嵌入层都产生维度模型= 512的输出

Decoder:

解码器也由N = 6个相同的层组成。除了每个编码器层中的两个子层外,解码器还插入第三个子层,该子层对编码器堆栈的输出执行多头注意。与编码器类似,我们在每个子层周围使用剩余连接,然后进行层归一化。我们还修改了解码器堆栈中的自注意子层,以防止位置关注后续的位置。这种掩蔽,加上输出嵌入被一个位置偏移的事实,确保了对位置i的预测只能依赖于小于i的位置的已知输出。

2.Attention

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

Scaled Dot-Product Attention:

输入由维度dk的查询和键,以及维度dv的值组成。我们计算具有所有键的查询的点积,将每个键除以√dk,并应用一个softmax函数来获得这些值的权重。
在这里插入图片描述
在这里插入图片描述

Multi-Head Attention:

利用不同的键、值和值v维的线性投影,对dk的线性投影与dk、值和查询不同。在每个查询、键和值的投影版本上,我们会并行地执行注意函数,生成dv维输出值。这些值被连接起来并再次投影,从而得到最终的值,如图2所示
多头注意允许模型共同关注来自不同位置的不同表示子空间的信息。用一个注意力头,平均可以抑制这一点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Applications of Attention in our Model:

The Transformer uses multi-head attention in three different ways:
1.在"encoder-decoder attention" layers,中,查询来自上一个解码器层,内存密钥和值来自编码器的输出。这允许解码器中的每个位置都参与输入序列中的所有位置。这模拟了序列到序列模型中典型的编码器-解码器注意机制,

2.该编码器包含自我注意层(self-attention layers)。在自注意层中,所有的键、值和查询都来自同一个位置,在这种情况下,是编码器中上一层的输出。编码器中的每个位置都可以处理编码器上一层中的所有位置。
3.解码器中的自注意层( self-attention layers)允许解码器中的每个位置关注解码器中的所有位置,直到并包括该位置。我们需要防止解码器中向左的信息流,以保持自回归特性。我们通过屏蔽(设置为−∞)softmax输入中对应于非法连接的所有值来实现缩放点积注意内部实现这一点.

Position-wise Feed-Forward Network:

除了注意子层外,我们的编码器和解码器中的每个层都包含一个完全连接的前馈网络,它分别和相同地应用于每个位置。这由两个线性变换组成,中间有一个ReLU激活。
在这里插入图片描述
虽然线性转换在不同的位置上是相同的,但它们每层都使用不同的参数。另一种描述它的方法是用核大小为1的两个卷积。输入和输出的维数为d模型= 512,内层的维数为dfff=2048。

Embeddings and Softmax:

在这里插入图片描述

Positional Encoding

在编码器和解码器堆栈的底部向输入嵌入中添加“ Positional Encoding”。位置编码与嵌入具有相同的维数d模型,因此两者可以求和。

4.Conclusion

在这项工作中,我们提出了 Transformer,第一个完全基于注意的序列转导模型,用多头自注意取代了编解码器结构中最常用的循环层。对于翻译任务, Transformer的训练速度可以比基于循环层或卷积层的架构要快得多。在WMT 2014英德语和WMT 2014英法翻译任务中,我们实现了一种新的艺术状态。在前一项任务中,我们最好的模型甚至优于所有之前报道的集成。我们对基于注意力的模型的未来感到很兴奋,并计划将它们应用到其他任务中。我们计划将 Transformer扩展到涉及文本以外的输入和输出模式的问题,并研究局部的、受限的注意机制,以有效地处理大型输入和输出,如图像、音频和视频。减少一代的顺序是我们的另一个研究目标

[1]https://github.com/tensorflow/tensor2tensor.

猜你喜欢

转载自blog.csdn.net/weixin_45840199/article/details/128976463