[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函数计算编码。
公式如下所示,其中pos指的是该词汇在整个输入句子中的位置,2i以及2i+1指的是该词汇的嵌入向量中的维度,dmodel指的是在嵌入层之后嵌入向量的总维度。即对于每个输入词汇,都要计算dmodel次位置编码。
PE(pos,2i)=sin(100002i/dmodelpos)(1)
PE(pos,2i+1)=cos(100002i/dmodelpos)(2)
根据三角函数的性质,对于pos+k位置的嵌入向量的某一维度(2i或2i+1)而言,可以表示为pos位置与k位置的嵌入向量的2i与2i+1维度的线性组合,使得位置向量中蕴含了相对位置的信息。
PE(pos+k,2i)=PE(pos,2i)×PE(k,2i+1)+PE(pos,2i+1)×PE(k,2i)PE(pos+k,2i+1)=PE(pos,2i+1)×PE(k,2i+1)−PE(pos,2i)×PE(k,2i)(3)
最终,位置编码向量的维度与词汇的嵌入维度相同,进行element-wise的相加操作。
InputEmbedding(pos,i)=WordEmbedding(pos,i)+PositionEncoding(pos,i)(4)
具体结构