目录
注意力机制是深度学习在近几年最重要的一个创新。本文将介绍简要的介绍一下注意力机制的原理。
Sequence to Sequence model
在将注意力机制之前首先要介绍一下S2S model,在rnn中,当输入为多个序列输出也为多个序列且输入输出长度不相等时我们需要使用到S2S model,例如在机器翻译中,我们输入的很有可能是一个长句子,翻译成其他语言时它的长度发生了改变,这样的话我们便需要用S2S来解决。
S2S model分为encoder 和 decoder两个部分,其中encoder是将输入序列转变为一个中间序列,这个中间序列尽可能的包含了我们输入序列的信息,之后我们的中间序列输入到decoder中,通过某种方式将中间序列转变为输入序列。举个例子:如下图所示,在机器翻译中,我们的输入是一个外文句子,我们需要将外文句子经过特征提取转变为词向量(处理过程可以看自然语言处理之特征提取和嵌入),我们的encoder是一个rnn模型,将词向量输入到rnn当中能够生成很多的输出序列,传统的S2S采用最后的一个输出序列作为我们的context。
context的形式是一个向量,它的长度是我们设定好的,可以很长也可以很短,我们采用四个方格来代表这个context向量。
回到我们刚刚的模型,“comment"转变为词向量后输入到encoder中,我们生成了一个#1方格,然后将”allez“的词向量和#1方格一同输入到encoder中,我么们得到#2方格,一次类推我们就能够得到很多的#n方格了,将最后的方格输入到decoder中进行解码。那这里最后一个向量应该需要包含我们输入的整个句子的信息,输入的句子很长的话,我们最后一个向量因为需要包含全部信息,则需要尽可能的长,但是这样不管有多长,我们的最刚开始输入的词向量的信息还是会很弱甚至消失,而且context向量太长,我们的模型将会遇到瓶颈问题以及出现过拟合的现象。
一个改进的方法是将我们所有的hiden states都作为向量输入到decoder中,这样我们保留了输入中的所有信息,在我们解码第一个单词的时候我们采用和第一个单词最接近的context,这里也就是我们的h1,当我们解码第二个单词的时候我们采用h2