Transformer模型由《Attention is All You Need》提出,有一个完整的Encoder-Decoder框架,其主要由attention(注意力)机制构成。论文地址:https://arxiv.org/abs/1706.03762。
其整体结构如图所示:
模型分为编码器(Encoder)和解码器(Decoder)两部分,包含内部结构的总体结构如下图所示:
图二
在论文中编码器部分由6个相同编码器叠在一起,解码器部分也是由6个相同解码器叠在一起,编码器之间不共享参数。(这里不一定要是6个)
在将词向量表示送入编码器、解码器之前,先做positional encoding,下面依次对positional encoding、encoding、decoding进行介绍:
1、positional encoding
如图所示,由于attention机制不包含位置信息,因此句子首先进行embedding得到词向量表示,同时为了增加位置信息,根据句子中词的位置信息给词嵌入添加位置编码向量,论文中添加位置编码的方法是:构造一个跟输入embedding维度一样的矩阵,然后跟输入embedding相加得到multi-head attention 的输入。
作者希望引入绝对位置的编码公式,让模型能够学习到相对位置信息,作者使用的positional encoding生成固定位置表示如下:
已知三角函数公式如下:
作者希望通过绝对位置的编码公式,让模型可以学习到相对位置信息。虽然如此获得的 position embeddings,两者之间的点积能够反应相对距离,但它缺乏方向性,并且这种特性(相对距离)会被原始 Transformer 的注意力机制破坏。
基于公式 (1),位置t的位置嵌入可以表示为:
2、encoding
如图二左边结构所示,编码器主要由前馈神经网络层与多头自注意力层构成,值得注意的是,在每个编码器中的每个子层(自注意力、前馈网络)的周围都有一个残差连接,并且都跟随着一个“层-归一化”步骤。这里先介绍attention机制,还是举个栗子:
假设我们想要翻译这个句子:
“The animal didn\'t cross the street because it was too tired”
那么it在这句话中是是指animal还是street,人类好理解这句话,但是对机器来说就很困难了。当模型处理这个单词“it”的时候,自注意力机制会允许“it”与“animal”建立联系。随着模型处理输入序列的每个单词,自注意力会关注整个输入序列的所有单词,帮助模型对本单词更好地进行编码。如下图。
当我们在编码器#5(栈中最上层编码器)中编码“it”这个单词的时,注意力机制的部分会去关注“The Animal”,将它的表示的一部分编入“it”的编码中。
接下来介绍attention实现的思想。