前言
Transformer是谷歌2017年发表的论文《Attention Is All You Need》中提出的,用于NLP的各项任务,其引入了自注意力机制(self-attention mechanism),具有长距离依赖关系建模、并行计算能力和通用性能的优点,已广泛应用于系列数据的处理。在本文中,我们将从Transformer的整体框架、Encoder的结构和输入输出、Decoder的结构和输入输出等方面,详细讲解Transformer的原理。
一、Transformer的整体架构
在机器翻译中,Transformer可以将一种语言翻译成另一种语言,如果把Transformer看成一个黑盒,那么拆开这个黑盒,那么可以看到Transformer由若干个编码器和解码器组成(原论文中分别有6个),如下图所示:
下面给出Transformer论文中的整体框架图:
可以看到Encoder包含一个Multi-Head Attention模块(是由多个Self-Attention组成),而Decoder包含两个Multi-Head Attention。Multi-Head Attention上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) ,用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。
Transformer的工作流程如下:
第一步:获取输入句子的每一个单词的表示向量 x, 由单词的Embedding和单词位置Embedding 相加得到。
第二步:将单词向量矩阵传入Encoder模块,经过N个Encoder后得到句子所有单词的编码信息矩阵 ,如下图:
输入句子的单词向量矩阵用,其中
是单词个数,
表示向量的维度(论文中
)。每一个Encoder输出的矩阵维度与输入完全一致。
第三步:将Encoder输出的编码矩阵 传递到Decoder中,Decoder会根据当前翻译过的单词
翻译下一个单词
,如下图所示:
上图Decoder接收了Encoder的编码矩阵,然后首先输入一个开始符 "<Begin>",预测第一个单词,输出为"I";然后输入翻译开始符 "<Begin>" 和单词 "I",预测第二个单词,输出为"have",以此类推。这是Transformer的大致流程,接下来介绍里面各个部分的细节。
二、Encoder
下图中红色方框内的部分,即为编码器:
2.1 输入
Encoder中的输入由单词Embedding和位置Embedding(Positional Encoding)相加得到:
2.1.1 单词Embedding
单词的Embedding可以通过Word2vec等模型预训练得到,可以在Transformer中加入Embedding层,主要的表现形式为将输入的句子Embedding为矩阵,句子中的每个单词Embedding为向量。
2.1.2 位置Embedding
Transformer 中除了单词的Embedding,还需要使用位置Embedding 表示单词出现在句子中的位置。因为 Transformer不采用RNN结构,而是使用全局信息,不能利用单词的顺序信息,而这部分信息对于NLP来说非常重要。所以Transformer中使用位置Embedding保存单词在序列中的相对或绝对位置。
位置Embedding用