编码器-解码器模型提供了使用递归神经网络来解决有挑战性的序列-序列预测问题的方法,比如机器翻译等。
注意力模型是对编码器-解码器模型的扩展,其提升了在较长序列上预测的效果。全局注意力模型是注意力模型的一种简化,其更容易在像Keras这样的声明式深度学习库中实现,并且可能会比传统注意力机制有更好的效果。
在这篇文章中,您将开始探索发现编码器-解码器递归神经网络模型的全局注意力机制。
阅读这篇文章后,你会知道:
让我们开始吧。

编码器 - 解码器循环神经网络的全局注意力机制简介
Kathleen Tyler Conklin拍摄照片,保留部分权利。
本教程分为4个部分; 分别是:
编码器 - 解码器模型是一种组织循环神经网络来处理序列到序列的预测问题的方法。在这类问题中,输入和输出的时间步数是不同的。
该模型是针对机器翻译的问题而被设计出来的,比如将法语句子翻译成英文。
该模型涉及两个子模型,如下所示:
下图显示了编码器和解码器之间的关系。

编码器-解码器网络的例子 来自于文章“Sequence to Sequence Learning with Neural Networks”,2014。
长短期记忆递归神经网络通常被编码器和解码器使用。编码器的输出代表了源序列,其用来开启解码的过程,并以目前已经生成的单词作为输出。具体来说,编码器最后时间步骤的隐状态用来初始化解码器。
LSTM通过如下方式计算条件概率:首先获得由LSTM的最后隐状态给出的输入序列(x1,...,xT)的固定维度表示v,然后使用一个标准LSTM-LM公式计算y1,...,yT'的出现概率,而y1,...,yT'的初始隐状态设置为v。
- 文章:Sequence to Sequence Learning with Neural Network, 2014年。
下图显示了源序列到上下文向量c的显式编码,向量c与目前生成的单词一起输出目标序列中的下一个单词。

将源序列编码成一个上下文向量,这个上下文向量之后被解码 出自文章“Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation“,2014。
然而,yt和h(t)都是以yt-1和输入序列的c为条件的。
- Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation,2014。
编码器 - 解码器模型被证明是一个端到端的模型,可以很好地处理序列到序列的预测问题,如机器翻译。
该模型在处理很长的序列上似乎是限制的。其原因被认为是源序列的编码长度固定。
这种编码器 - 解码器方法的潜在问题是神经网络需要能够将源语句的所有必要信息压缩成固定长度的向量。这可能使神经网络很难处理长句,尤其是那些比训练语料库中的句子更长的句子。
- Neural Machine Translation by Jointly Learning to Align and Translate,2015。
在他们2015年的论文“Neural Machine Translation by Jointly Learning to Align and Translate,”,Bahdanau等人描述一个解决这个问题的注意力机制。
注意力机制是提供源序列的更丰富的编码的机制,从源序列编码构建可以被解码器使用的上下文向量。
注意力机制是使得模型在目标序列预测每个单词过程中,学习到源序列中编码的单词如何以及以什么程度集中注意力。

有注意力机制的编码器 - 解码器模型示例 出自文章“Neural Machine Translation by Jointly Learning to Align and Translate,”,2015。
每个输入时间步骤的隐状态是从编码器收集的,而不是源序列最后时间的隐状态。
上下文向量是专门针对目标序列中的每个输出单词而构建的。首先,使用神经网络对来自编码器的每个隐藏状态进行打分,然后归一化为编码器隐藏状态的概率。最后,使用这些概率来计算编码器隐藏状态的加权和,以提供解码器中使用的上下文向量。
关于Bahdanau如何通过一个成功运行的例子对注意力机制更全面的解释,请参阅:
斯坦福大学NLP研究人员Minh-Thang Luong等人在他们的论文“ Effective Approaches to Attention-based Neural Machine Translation”中,提出了用于机器翻译的编码器 - 解码器模型的注意机制,被称为“全局注意力”。
其是由Bahdanau等人在他们的论文“ Neural Machine Translation by Jointly Learning to Align and Translate.” 中提出的简化的注意力机制。在Bahdanau提出的注意力机制中,注意力的计算需要解码器在前一个时间的输出。
另一方面,全局注意力仅仅利用编码器和解码器当前时间的输出。这使得在像Keras这样的向量化库中实现它变得很有吸引力。
我们的计算步骤更加简单 我们从ht - > at - > ct - >~ht 然后进行预测。另一方面,在任何时间t,Bahdanau 等人(2015)从前一个隐状态ht-1 - > at - > ct - > ht构建而成,反过来,在进行预测之前通过一个深度输出和一个maxout层。
- Effective Approaches to Attention-based Neural Machine Translation, 2015。
在Luong 等人的论文中评价的模型与Bahdanau等人的模型不同。(例如,反向输入序列而不是双向输入,LSTM而不是GRU元素以及dropout的使用),然而,具有全局注意力的模型在标准机器翻译任务上表现更好。
...全局注意力的方法有+2.8 BLEU的显著提升,使得我们的模型稍好于Bahdanau等人的基本注意力系统。
- Effective Approaches to Attention-based Neural Machine Translation,2015。
接下来,我们来仔细看一下全局注意力是如何计算的。
全局注意力是编码器-解码器注意力循环神经网络模型的延伸。
虽然是为机器翻译开发的,但它与其他语言生成任务(如字幕生成和文本摘要,甚至一般序列预测任务)相关。
对于一个给定的输入序列预测时间步骤的编码器-解码器神经网络,我们可以把全局注意力的计算分成以下计算步骤。相关等式请参阅其他文章。
最后的解码通过softmax来预测下一个输出词典中单词在序列出现的概率。
下图提供了计算全局注意力时,数据流的一个高层概念。

编码器 - 解码器循环神经网络中的全局注意力的描述。 出自文章“Effective Approaches to Attention-based Neural Machine Translation.”。
作者评估了所有评分函数,发现大体上来说,点 评分函数表现较好。
有趣的是,点操作对于全局注意力机制效果很好。
— Effective Approaches to Attention-based Neural Machine Translation, 2015。
由于更简单和更多的数据流,全局注意力机制可能是声明性深度学习库(如TensorFlow,Theano和Keras等包装)中实现的一个很好的选择。
如果您想深入了解,本节将提供更多有关该主题的资源。
在这篇文章中,您发现了编码器 - 解码器循环神经网络模型的全局注意力机制。
具体来说,你了解到:
你有任何问题吗? 在下面的评论中提出您的问题,我会尽我所能来回答。

只有几行python代码
在我的新电子书了解: Long Short-Term Memory Networks with Python
它提供了一些主题的自学教程,如 CNN LSTM,编码器 - 解码器LSTM,生成模型,数据准备,预测等等。
略过学术部分。仅仅说明结果。
点击了解更多。