Jason Brownlee博士的系列博客真的很受用哦。原文链接见:Attention in Long Short-Term Memory Recurrent Neural Networks
1. 原来的Encoder–Decoder
在这个模型中,encoder只将最后一个输出递给了decoder,这样一来,decoder就相当于对输入只知道梗概意思,而无法得到更多输入的细节,比如输入的位置信息。所以想想就知道了,如果输入的句子比较短、意思比较简单,翻译起来还行,长了复杂了就做不好了嘛。
2. 对齐问题
前面说了,只给我递来最后一个输出,不好;但如果把每个step的输出都传给我,又有一个问题了,怎么对齐?
什么是对齐?比如说英文翻译成中文,假设英文有10个词,对应的中文翻译只有6个词,那么就有了哪些英文词对哪些中文词的问题了嘛。
传统的翻译专门有一块是搞对齐的,是一个比较独立的task(传统的NLP基本上每一块都是独立的task啦)。
- attention机制
我们从输出端,即decoder部分,倒过来一步一步看公式。
是指decoder在t时刻的状态输出,是指decoder在t−1时刻的状态输出,是t−1时刻的label(注意是label,不是我们输出的y),看下一个公式,f是一个RNN。
是指第j个输入在encoder里的输出,是一个权重
这个公式跟softmax是何其相似,道理是一样的,是为了得到条件概率P(a|e),这个a的意义是当前这一步decoder对齐第j个输入的程度。
最后一个公式,
这个g可以用一个小型的神经网络来逼近,它用来计算这两者的关系分数,如果分数大则说明关注度较高,注意力分布就会更加集中在这个输入单词上,这个函数在文章Neural Machine Translation by Jointly Learning to Align and Translate(2014)中称之为校准模型(alignment model),文中提到这个函数是RNN前馈网络中的一系列参数,在训练过程会训练这些参数, 基于Attention-Based LSTM模型的文本分类技术的研究(2016)给出了上式的右侧部分作为拓展。
好了,把四个公式串起来看,这个attention机制可以总结为一句话:当前一步输出StSt应该对齐哪一步输入,主要取决于前一步输出和这一步输入的encoder结果。