上面的两幅图已经把attention model表示出来了,下面我再以文字加以描述。
为什么需要attention
传统的encoder-decoder模型大致如下图所示:
解决思路: 给定一个句子,语义信息就确定了,那么一个很自然的想法就是让不同输出单词侧重(有选择地抽取)学习语义信息的不同部分。那么就需要给每个输出单词一套参数w,让不同单词学习不同的参数w,从而达到有选择的抽取学习语义信息的功能。举个例子:翻译
为:
其中area应翻译成zone,那么输出结果zone时,它利用的句子信息,可能更偏重于area的上下文,即相应的权重比较大。这也就是ALIGNMENT MODEL(对齐模型)的由来,即翻译中某个输出应该和原句子中相应的词对齐。
网络结构如下图所示:
可以看出虽然还是使用了相同的语义信息,但是每个输出单词都可以有不同的对于语义信息的“理解”。
按照上述思想,每个输出单词给它单独一套参数w,即可以实现以上功能。为何实际上的attention机制需要再利用一个小型网络来训练相应的权值呢,即:
这里训练权值的函数利用了si-1和hj。
我的理解有两点。
(1)翻译模型和其他模型有一点不同,因为翻译过程是一步步进行的,后面的翻译结果会用到前面翻译结果的信息,所以权重的计算需要考虑已经decoder出的信息即si-1,然后再利用encoder的当前位置的信息hj求出相应的权重,而不是只利用encoder的信息hj。
(2)即使是除了翻译模型,其他用不到si-1的模型也不可能每一个输出单独给它一套参数w,首先神经网络是共享参数的,循环神经网路即使每一步输出一次,每一步的输出再接一层全连接,全连接的参数也是共享的;其次每一个输出单独给它一套参数也是不合理的,因为这样就在每个位置的参数共享,很显然网络的输出和位置并不是很相关。
那么如果不用attention,例如得到bilstm+crf中bilstm的输出h后,给每个位置相同的参数w得到crf的输入hw+b。这样有一个明显的缺点,就是没有考虑各个位置信息对当前输出的重要程度。因为由于共享参数,各个位置的信息对当前输出结果的影响是相同的。所以只有设想有一套可以综合考虑各个位置对当前输出结果影响大小的共享参数。于是想到了softmax综合所有位置的权重输出,那么同样也是只有一套参数(attention的参数也是共享的),但是却考虑了各个位置的信息对当前结果的“影响力”,点睛之笔就是softmax,使模型训练出来的一套参数可以考虑所有位置的权重。
基本公式
NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
是最早提出attention思想的论文,这篇论文中的attention框图为:
基本公式有:
注意这里的y(i-1)是上一步的真实标签,而非输出标签(在训练过程中)
其中,a激活函数可以是:
参考资料:
1. http://www.wildml.com/2016/01/attention-and-memory-in-deep-learning-and-nlp/
2. https://blog.csdn.net/qq_21190081/article/details/53083516
3. NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE