本文介绍attention机制和基于attention的transformer模型。网上关于这两者的博客很多,但大都照搬论文,千篇一律,不够深入和通俗,本文在参考这些博客和原始论文的基础上,加入自己的理解,深入且通俗的讲解attention和transformer。
Attention in RNN
Bengio等人在2014年Neural machine translation by jointly learning to align and translate中提出Attention机制。
传统的RNN在t时刻的输入是h(t-1)和x(t),encoder在最后时刻输出一个针对input sequence的特征表示,decoder在生成output sequence时输入该特征表示和上一时刻的解码结果。在长句子翻译任务中,decoder并不关心input sequence的整个句子,而只关心input sequence的某一些局部特征,因此Bengio等人提出Attention机制,学习input sequence和output sequence的对齐(Align)和翻译(Translate)关系,在编码过程中,将原句子编码成特征向量的集合,在解码时,每个时刻会从该特征集合中选择一个子集用于生成解码结果。模型结构如下图所示:
Encoder
Encoder采用双向RNN结构,每个时刻的隐层输出是前向rnn隐层和后向rnn隐层的拼接,即
这样,j时刻的特征表示就包含了整个句子(前向和后向)的信息,而每个时刻均有一个特征表示,从而构成输入序列的特征表示集合。
Decoder
如果说encoder跟传统seq2seq结构并没有本质上的区别的话,Decoder跟传统seq2seq则发生了本质变化,这也是Attention机制的精华所在,即在Decode时同时学习对齐模型(align model)和翻译模型(translate model)。
对齐模型
对齐模型学习的是输入时刻j和输出时刻i的匹配关系alpha(i,j),j与i匹配程度越高,alpha(i,j)值越大,表示如下:
其中,si-1是decoder在i的上一时刻的输出,hj是encoder在j时刻的隐层拼接,a是前馈神经网络,alpha(i, j)是j时刻在时刻i上的概率分布,表示为softmax的输出。
翻译模型
翻译模型即解码过程&