Transformers详细原理

Transformers详细原理

Transformers的背景

之前讲的self-attention模型中,输入和输出数量相等。现在我们来看,当输出序列的长度不确定时,该怎么办?这种情况只能让模型来自己来决定输出长度。

如下图所示,举个输出序列长度不确定的例子,如语音辨识机器翻译语音翻译等。

image-nnht.png

Transformers是一个标准的Seq2Seq, 包含Encoder(编码器)和Decoder(译码器)两部分。

image-rmdh.png

Transformers的网络结构

整体结构

Transformers由Encoder和decoder组成,并且Encoder和decoder都包含6个block。如下图所示,其中​N_x=6

image-lkrq.png

Encoder结构

如下图所示,为Transformers的Encoder部分。每一个Encoder Block的结构如右图所示。

image-gcat.png

打开来看Encoder block, 如下图所示。对于Encoder而言,输入是inputs ​x经过编码之后,再加上位置编码​p(Positional Encoding),得到一个结果,再传入Multi-Head Attention,得到输出结果。得到的输出结果和输入相加(这个过程称之为残差,Risidual),然后经过Layer Norm,传入全神经网络,全神经网络的输入结果和输入相加,再经过Norm,得到最终输出结果。

image-tuum.png

上面的过程重复6次,完成编码过程。

这里有两个疑问,在问题答疑里面讲解,分别是为什么要做residual 和 为什么要做Layer Norm。

Decoder结构

如下图所示,Encoder的输出结果作为Decoder的输入来获得预测结果,下面会讲Encoder的输入在decoder中具体是怎么处理的。

  • 输入特殊字符作为开始,经过Decoder,得到输出结果,输出结果是每一个字符的概率,选择概率最大的那个字符作为输出结果。比如说,让机器翻译一段内容为“机器学习”的语音,期望decoder的输出的第一个字符是“机”。

image-nvgn.png

  • 把上个时刻的输出作为当前时刻的输入,经过decoder,得到输出。比如说输入“STASRT, 机”,得到“器”的输出。
  • 以此类推,直接输出“END”字符,意味着结束。

image-gbfr.png

上述是Decoder的大致运作流程。具体内容是怎么运作的呢?

如下图所示,decoder的内部结构分为三部分

Part1 Masked Multi-Head Attention

在decoder部分,对输入矩阵进行的masked multi-head attention操作,这是因为decoder是一个字符一个字符的进行输出,比如说输出“机器学习”,是先输出“机”,再输出“器”,再输出“学”,再输出“习”。也就是说,decoder只能看到当前时刻及以前时刻的信息,无法看到未来的信息,因为,decoder在对输入进行处理时,需要对未来时刻的信息进行遮掩。

如下图所示, 输出​b^2是根据​a^1​a^2预测得到的,而与​a^3​a^4无关。

再经过add & LayerNorm,输出。

image-rttx.png

Part2 Multi-Head Attention

在第二部分,就需要将encoder的输出结果和刚才decoder Part1的输出结果进行联合处理了。将Encoder的输出输出,和decoder Part1 部分的输出做Cross attention, Cross attention的运作流程还是和self-attention一样,只不过是输入序列是由两个不同的序列组成。

image-nzkq.png

Part3 LinearLayer 和 SoftmaxLayer

Part 3就是常见的处理了,经过Linear层和Softmax,选择概率最大的结果作为输出。

image-bvfg.png

常见问题

1. 为什么要做add,即Risudal操作?

2. 为什么要做Linear Norm? Linear Norm的具体操作是什么?

3. 为什么要做Masked Self-attention?

4. Cross attention的作用是什么?

Licensed under CC BY-NC-SA 4.0