attention机制详解

原论文:Neural Machine Translation by Jointly Learning to Align and Translate

参考博客:https://blog.csdn.net/shijing_0214/article/details/75194103

注意一点:这篇论文把输入端隐含层状态称为注释h,输出端隐含层状态称为隐含层状态s

叫法不同,其实都是隐含层状态

 

没有引入注意力的模型在输入句子比较短的时候问题不大,但是如果输入句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,可想而知会丢失很多细节信息,这也是为何要引入注意力模型的重要原因。

由传统的解码过程,我们知道: 

可以看到,在对每个时刻的输出做预测的时候,用到的上下文向量都是一样的,引入注意力机制后,我们希望实现的是在预测每个时刻的输出时用到的上下文是跟当前输出有关系的上下文,比如在翻译“知识就是力量”的时候,我们希望翻译“is”的时候关注的信息是“就是”,而不是其他无关的词。也就是: 

ct(或者ci)就是引入注意力的关键所在,为了加入注意力,我们新模型如下: 

模型的下面是一个双向的RNN,也可以是单向的,这个不是加入注意力的关键,只不过在序列模型中,双向RNN可以更好地编码信息。具体如何理解该图,我们看下面, 

在上面的定义中,ct是引入注意力的关键所在,它的作用就是要起到将输出与相关输入联系起来,我们定义: 

其中,hj是编码输入第j个位置的隐状态信息,这里针对双向RNN,hj=[hj→;hj←],即把前向后项RNN得到的隐状态向量进行拼接。权重α很重要,它能够标识输入中的哪些词汇当前的输出关系比较大。我们定义权重α: 

可以把α理解为一个归一化的概率值,表示输入的第j个词对当前输出的关系概率。 

上面α的定义中引入了记号eij, 

它实际上是一个对齐模型,是一个嵌套在RNN中的一个前馈神经网络,记录了位置j处的输入和位置i处的输出的匹配程度,由输出层的隐层状态si-1(决定了yi)和输入层的隐含层状态hj决定,在训练的时候一起被训练,如图: 

(总感觉这幅图有问题,yi应该与yi-1,si,ci有关,这个图上面总感觉画的怪怪的) 

 

对齐模型与整个模型放在一起训练,得到权重α,再结合隐状态序列(h1,h2,...,hT)就可以得到上下文向量序列,将其带入到解码过程就可以求得生成序列,每一步生成过程如下: 

 

以上是序列模型引入注意力机制的基本思路,本质上还是利用输入隐状态序列(h1,h2,...,hT)增强了对句子有选择地记忆能力,这对解码过程是非常有帮助的。

附原文截图

这里t和上面提到的i是一个意思

 

展开阅读全文

没有更多推荐了,返回首页