在Encoder-Decoder结构(即Seq2Seq,N vs. M)中,Encoder把所有的输入序列都编码成一个统一的语义特征Seq2Seq中的Attention - 图1再解码,因此,Seq2Seq中的Attention - 图2 中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个Seq2Seq中的Attention - 图3可能存不下那么多信息,就会造成翻译精度的下降。

attention1.jpg或者attention2.jpg

Attention机制通过在每个时间输入不同的Seq2Seq中的Attention - 图6来解决这个问题,下图是带有Attention机制的Decoder:

attention3.jpg

每一个Seq2Seq中的Attention - 图8会自动去选取与当前所要输出的Seq2Seq中的Attention - 图9最合适的上下文信息。具体来说,我们用Seq2Seq中的Attention - 图10衡量Encoder中第Seq2Seq中的Attention - 图11阶段的Seq2Seq中的Attention - 图12和解码时第Seq2Seq中的Attention - 图13阶段的相关性,最终Decoder中第i阶段的输入的上下文信息Seq2Seq中的Attention - 图14就来自于所有Seq2Seq中的Attention - 图15Seq2Seq中的Attention - 图16的加权和。

以机器翻译为例(将中文翻译成英文):

attention4.jpg

输入的序列是“我爱中国”,因此,Encoder中的Seq2Seq中的Attention - 图18就可以分别看做是“我”、“爱”、“中”、“国”所代表的信息。在翻译成英语时,第一个上下文Seq2Seq中的Attention - 图19应该和“我”这个字最相关,因此对应的Seq2Seq中的Attention - 图20就比较大,而相应的Seq2Seq中的Attention - 图21就比较小。Seq2Seq中的Attention - 图22应该和“爱”最相关,因此对应的Seq2Seq中的Attention - 图23就比较大。最后的Seq2Seq中的Attention - 图24Seq2Seq中的Attention - 图25最相关,因此Seq2Seq中的Attention - 图26的值就比较大。

至此,关于Attention模型,我们就只剩最后一个问题了,那就是:这些权重Seq2Seq中的Attention - 图27是怎么来的?事实上,Seq2Seq中的Attention - 图28同样是从模型中学出的,它实际和Decoder的第Seq2Seq中的Attention - 图29阶段的隐状态、Encoder第Seq2Seq中的Attention - 图30个阶段的隐状态有关。

同样还是拿上面的机器翻译举例,Seq2Seq中的Attention - 图31的计算(此时箭头就表示对Seq2Seq中的Attention - 图32Seq2Seq中的Attention - 图33同时做变换):

Seq2Seq中的Attention - 图34计算: attention5.jpg

Seq2Seq中的Attention - 图36计算: attention6.jpg

Seq2Seq中的Attention - 图38计算: attention7.jpg

以上就是带有Attention的Encoder-Decoder模型计算的全过程。

Source

https://zhuanlan.zhihu.com/p/28054589