Transformer模型结构详解

Transformer模型结构详解_第1张图片

1、模型架构

大部分序列到序列(seq2seq)模型都使用编码器-解码器结构 (引用)。编码器把一个输入序列(1,...)(x1,...xn)映射到一个连续的表示=(1,...)z=(z1,...zn)中。解码器对z中的每个元素,生成输出序列(1,...)(y1,...ym)。解码器一个时间步生成一个输出。在每一步中,模型都是自回归的(引用),在生成下一个结果时,会将先前生成的结果加入输入序列来一起预测。

2、结构细节

2.1 Encoder

Transformer模型结构详解_第2张图片

 编码器的每层encoder包含Self Attention 子层和FFNN子层,每个子层都使用了残差连接(cite),和层标准化(layer-normalization) (cite)。

我们称呼子层为:Sublayer()Sublayer(x),每个子层的最终输出是LayerNorm(+Sublayer())LayerNorm(x+Sublayer(x))。 dropout (cite)被加在Sublayer上。

每一层encoder都有两个子层。 第一层是一个multi-head self-attention层,第二层是一个简单的全连接前馈网络,对于这两层都需要使用SublayerConnection类进行处理。

2.2 Decoder

Transformer模型结构详解_第3张图片

单层decoder与单层encoder相比,decoder还有第三个子层,该层对encoder的输出执行attention:即encoder-decoder-attention层,q向量来自decoder上一层的输出,k和v向量是encoder最后层的输出向量。与encoder类似,我们在每个子层再采用残差连接,然后进行层标准化。

对于单层decoder中的self-attention子层,我们需要使用mask机制,以防止在当前位置关注到后面的位置。

2.3 Attention

Attention功能可以描述为将query和一组key-value映射到输出,其中query、key、value和输出都是向量。输出为value的加权和,其中每个value的权重通过query与相应key的计算得到。
我们将particular attention称之为“缩放的点积Attention”(Scaled Dot-Product Attention")。其输入为query、key(维度是dk)以及values(维度是dv)。我们计算query和所有key的点积,然后对每个除以 ⎯⎯⎯⎯√dk, 最后用softmax函数获得value的权重。

Transformer模型结构详解_第4张图片

 Transformer模型结构详解_第5张图片

Transformer模型结构详解_第6张图片

Transformer模型结构详解_第7张图片

 Transformer模型结构详解_第8张图片

2.4 模型中Attention的应用

multi-head attention在Transformer中有三种不同的使用方式:

  • 在encoder-decoder attention层中,queries来自前面的decoder层,而keys和values来自encoder的输出。这使得decoder中的每个位置都能关注到输入序列中的所有位置。这是模仿序列到序列模型中典型的编码器—解码器的attention机制,例如 (cite).
  • encoder包含self-attention层。在self-attention层中,所有key,value和query来自同一个地方,即encoder中前一层的输出。在这种情况下,encoder中的每个位置都可以关注到encoder上一层的所有位置。
  • 类似地,decoder中的self-attention层允许decoder中的每个位置都关注decoder层中当前位置之前的所有位置(包括当前位置)。 为了保持解码器的自回归特性,需要防止解码器中的信息向左流动。我们在缩放点积attention的内部,通过屏蔽softmax输入中所有的非法连接值(设置为−∞−∞)实现了这一点。

 2.5 基于位置的前馈网络

 除了attention子层之外,我们的编码器和解码器中的每个层都包含一个全连接的前馈网络,该网络在每个层的位置相同(都在每个encoder-layer或者decoder-layer的最后)。该前馈网络包括两个线性变换,并在两个线性变换中间有一个ReLU激活函数。

 2.6 Embeddings and Softmax

2.7 位置编码

Transformer模型结构详解_第9张图片

 此外,我们会将编码器和解码器堆栈中的embedding和位置编码的和再加一个dropout。对于基本模型,我们使用的dropout比例是=0.1。

你可能感兴趣的:(transformer,自然语言处理,深度学习,nlp)