[NeurIPS 2017] Attention Is All You Need
Transformer是Sequence-to-Sequence (Seq2Seq) 模型,模型的输入是向量序列,输出同样是向量序列,且输出的长度由模型经过学习决定。
整体结构
Transformer由Encoder和Decoder组成,编码器和解码器都包含6个Block,整体结构如下图所示。

Encoder
整体结构
Transformer Encoder结构如下图所示。其中,Add指的是残差连接Residual Connection,Norm指的是Layer Normalization。

位置编码(Positional Encoding)
对于输入的句子,对一个词汇的嵌入向量的 奇数维度使用sine函数进行编码,对偶数维度使用cosine函数计算编码。
公式如下所示,其中指的是该词汇在整个输入句子中的位置,以及指的是该词汇的嵌入向量中的维度,指的是在嵌入层之后嵌入向量的总维度。即对于每个输入词汇,都要计算次位置编码。
根据三角函数的性质,对于位置的嵌入向量的某一维度(或)而言,可以表示为位置与位置的嵌入向量的与维度的线性组合,使得位置向量中蕴含了相对位置的信息。
最终,位置编码向量的维度与词汇的嵌入维度相同,进行element-wise的相加操作。
具体结构

输入向量由Word Embedding和Positional Embedding相加得到。输入序列经过Mutil-Head Self-Attention之后,通过Residual Connection加上自身的输入向量,再经过Layer Normalization,之后送入FCN并进行Residual Connection加上送入FCN的输入自身,最终再进行Layer Normalization,以上构成了一个Encoder Block。每一个Block输出的向量序列长度等于输入的向量序列长度。
Decoder
Decoder的任务是生成输出,可以根据是否一次性生成输出分为Autoregressive(自回归,abbr. AT)以及Non-Autoregressive(非自回归,abbr. NAT)两种模式。
自回归类型的Decoder需要逐步生成输出,并将之前自身输出的所有词汇经过嵌入层后生成token作为下一次的输入,通常每次生成一个词或一个符号。这种方式的缺点是需要保存和更新词表中的所有可能选项,因此在大词汇表上可能会变得非常慢。然而,它的优点是能够利用上下文信息来生成输出,这有助于提高翻译的质量。
非自回归类型的Decoder试图在一次操作中生成整个输出序列。这通常通过使用诸如注意力机制等策略来实现,这些策略允许解码器关注输入序列的不同部分,同时生成输出序列的不同部分。NAT的优点在于其高效性,因为它不需要保存和更新大量的可能选项。然而,由于它不能利用上下文信息来生成输出,因此其生成的输出质量普遍会低于AT。