Seq2Seq那些事:详解深度学习中的“注意力机制”

yueguizhilin 2019-01-21

点击上方关注,All in AI中国

作者——Raimi Karim

几十年来,统计机器翻译一直是主导的翻译模型[9],直到神经机器翻译(NMT)的诞生。NMT是一种新兴的机器翻译方法,它试图构建和训练单个的大型神经网络来读取文本并输出翻译[1]。

Seq2Seq那些事:详解深度学习中的“注意力机制”

NMT是来自Kalchbrenner、Blunsom( https://www.aclweb.org/anthology/D13-1176),Sutskever、Cho等人的提议。本文将基于seq2seq框架以及如何在此基础上构建注意力。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图0.1:输入序列长度为4的seq2seq

在seq2seq中,我们的想法是让两个具有编码器——解码器架构的递归神经网络(RNN):逐个读取输入字以获得固定维度(编码器)的向量表示,并且以这些输入为条件,使用另一个RNN(解码器)一个接一个地提取输出字。解释改编自[5]。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图0.2:输入序列长度为64的seq2seq

seq2seq的问题在于,解码器从编码器接收的唯一信息是最后一个编码器的隐藏状态(参见图0.2中的2个微小节点),这是一种向量表示,类似于输入序列的数字汇总。因此,对于长文本,我们不合理地期望着解码器仅使用这一个向量表示来输出翻译。让我们来看看,你能否将此段翻译成你知道的另一种语言?

如果我们做不到,那么我们就不应该对解码器这么苛刻。让我们从每一个编码器的时间步长中给编码器一个向量表示,以便它可以做出优秀的翻译,而不仅仅是一个向量表示。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图0.3:作为编码器和解码器之间的接口引起注意力。这里,第一个解码器时间步骤是准备在给出第一个翻译单词之前从编码器接收信息。

注意力是编码器和解码器之间的接口,它为解码器提供来自每个编码器隐藏状态的信息(除了图0.3中的红色隐藏状态)。通过此设置,模型能够选择性地输入序列的有用部分,从而了解它们之间的对齐排列。这有助于模型有效地处理较长的句子。)[9]。

定义:对齐

对齐意味着将原始文本的片段与其对应的翻译片段进行匹配。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图0.3:法语单词"la"的对齐分布在输入序列中,但主要分布在这四个词

上:'the','European','Economic'和'Area'。深紫色表示更好的注意力得分

如[2]中所介绍的,有两种类型的注意力。使用所有编码器隐藏状态的注意力类型也称为全局注意力。相反,局部注意力仅使用编码器隐藏状态的子集。由于本文的范围是全局注意力,因此本文中对"注意力"的任何引用均被视为"全局注意力"。

本文概述了注意力是如何工作的,以便我们可以在没有(或在阅读了论文或教程之后)数学符号的情况下理解它们。

内容

  1. 注意力:概述
  2. 注意力:例子
  3. 总结

附录:得分函数

1. 注意力:概述

在了解如何使用注意力之前,请允许我与你分享使用seq2seq模型的翻译任务背后的直觉。

直觉:seq2seq

从头到尾读取德语文本。完成后,开始逐字翻译成英文。如果句子非常长,他可能已经"忘记"了他在文本的前面部分读过的内容。

这是一个简单的seq2seq模型。我将要经历的注意力层的分布计算是seq2seq +注意力模型。这是对这个模型的快速直觉。

直觉:seq2seq +注意力

译者在阅读德语文本的同时,写下关键词,之后他开始翻译成英语。在翻译每个德语单词时,他会使用他写下的关键词。、

通过给每个单词分配一个分数,注意力将不同的焦点放在不同的单词上。然后,利用softmax,再使用编码器隐藏状态的加权和来聚合编码器隐藏状态,以获得上下文向量。注意力层的实现可以分为4个步骤。

步骤0:准备隐藏状态。

让我们首先准备第一个解码器隐藏状态(红色)和所有可用的编码器隐藏状态(绿色)。在我们的例子中,我们有4个编码器隐藏状态和当前解码器隐藏状态。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图1.0:准备好注意力

步骤1:获取每个编码器隐藏状态的分数。

通过得分函数(也称为比对评分函数[2]或比对模型[1])获得得分(标量)。在该示例中,得分函数是解码器和编码器隐藏状态之间的点积。

有关各种评分功能,请参阅附录A。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图1.1:获得分数

Seq2Seq那些事:详解深度学习中的“注意力机制”

在上面的例子中,我们获得了编码器隐藏状态[5,0,1]的高注意力分数60分。这意味着要翻译的下一个词将受到此编码器隐藏状态的严重影响。

步骤2:通过softmax层运行所有得分。

我们将得分放到softmax层,使得softmaxed得分(标量)加起来为1。这些softmaxed得分代表注意力的分布[3,10]。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图1.2:获得softmaxed分数

Seq2Seq那些事:详解深度学习中的“注意力机制”

请注意力,基于softmaxed得分,注意力仅按预期分布在[5,0,1]上。实际上,这些数字不是二进制数,而是0到1之间的浮点数。

步骤3:将每个编码器隐藏状态乘以它的softmaxed得分。

通过将每个编码器隐藏状态与其softmaxed得分(标量)相乘,我们获得对齐向量[2]。这正是进行对齐的机制。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图1.3:获取对齐向量

Seq2Seq那些事:详解深度学习中的“注意力机制”

在这里,我们看到除了[5,0,1]之外的所有编码器隐藏状态的对齐由于低注意力分数而减少到0。这意味着我们可以期望第一个被翻译的单词应该与输入单词匹配[5,0,1]嵌入。

步骤4:总结对齐向量。

将对齐向量相加以得到上下文向量[1,2]。上下文向量是来自前一步骤的对齐向量的聚合信息。

Seq2Seq那些事:详解深度学习中的“注意力机制”

Seq2Seq那些事:详解深度学习中的“注意力机制”

步骤5:将上下文向量输入到解码器中。

这样做的方式取决于架构设计。稍后我们将在第2a、2b和2c节的示例中看到架构如何利用解码器的上下文向量。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图1.5:将上下文向量输入解码器

这是整个动画过程:

Seq2Seq那些事:详解深度学习中的“注意力机制”

图1.6:注意力

直觉:注意力实际上是如何工作的?

答:反向传播。反向传播将尽一切努力确保输出接近实际情况。这是通过改变RNN中的权重和得分函数(如果有的话)来完成的。这些权重将影响编码器隐藏状态和解码器隐藏状态,进而影响注意力得分。

2.注意力:例子

我们在上一节中已经看到了seq2seq和seq2seq +注意力架构。在接下来的小节中,让我们检查另外3个基于seq2seq的NMT架构,以实现注意力。为了完整起见,我还附加了他们的双语评估研究(BLEU)分数:用于评估生成的句子到参考句子的标准度量。

2a.Bahdanau等(2015)[1]

作者在论文《基于共同学习对齐和翻译的神经机器翻译》中使用"对齐"一词来表示在训练模型时调整直接负责得分的权重。以下是有关架构的注意力事项:

1. 编码器是一个双向(正向+反向)门控循环单元(BiGRU)。解码器是一个GRU,其初始隐藏状态是从反向编码器GRU的最后隐藏状态修改而来的向量(未在下图中示出)。

2.注意力层中的得分函数是add/ concat。

3. 到下一个解码器步骤的输入是来自前一个解码器时间步长(粉红色)的输出和来自当前时间步长(深绿色)的上下文向量之间的串联。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图2a:来自Bahdanau等的NMT。编码器是BiGRU,解码器是GRU

作者在WMT'14英法数据集上获得了26.75的BLEU分数。

直觉:具有双向编码器的seq2seq+注意力

译者A在阅读德语文本的同时写下关键字。译者B从最后一个单词到第一个单词阅读相同的德语文本,同时记下关键词。这两个人定期讨论他们到目前为止阅读的每一个字。一旦读完这篇德语文本,翻译者B就会负责根据讨论和他们俩所选择的综合关键词,将德语句子逐字翻译成英语。

译者A是正向RNN,译者B是反向RNN。

2b. Luong 等(2015)[2]

基于注意力的神经机器翻译的有效方法的作者已经明确地简化和概括了Bahdanau等人的体系结构。方法如下:

1. 编码器是一个两层的长短期记忆(LSTM)网络。解码器也具有相同的架构,其初始隐藏状态是最后的编码器隐藏状态。

2. 他们实验的得分函数是(i) additive/concat, (ii)dot product, (iii) location-based, and (iv) 'general'

3.来自当前解码器时间步长的输出与来自当前时间步长的上下文向量之间的串联被输入到前馈神经网络,以给出当前解码器时间步长的最终输出(粉红色)。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图2b:来自Luong等人的NMT。编码器是2层LSTM,同样用于解码器

在WMT'15英德测试中,该模型的BLEU得分为25.9。

直觉:具有2层堆叠编码器的seq2seq+注意力

译者A在阅读德语文本的同时写下关键字。同样,译者B(比译者A更专业)也会读取相同的德语文本,同时记下关键字。请注意,译者A阅读的每个单词都要向译者B报告。完成阅读后,他们都会根据他们所选择的综合关键词,逐字逐句地将句子翻译成英语。

2c.谷歌的神经机器翻译(GNMT)[9]

因为我们大多数人都必须以这样或那样的方式使用谷歌翻译,所以我觉得有必要谈论谷歌的NMT,它是在2016年发布的。GNMT是我们见过的前两个例子的组合。

1. 编码器由8个LSTM组成,其中第一个是双向的(其输出是连接的),来自连续层的输出之间存在残余连接(从第3层开始)。解码器是8个单向LSTM的独立堆栈。

2.使用的得分函数是add/ concat,如[1]中所示。

3.同样,与[1]中一样,下一个解码器步骤的输入是前一个解码器时间步长(粉红色)的输出与当前时间步长(深绿色)的上下文向量之间的串联。

Seq2Seq那些事:详解深度学习中的“注意力机制”

图2c:Google的谷歌翻译NMT。跳过连接用弯曲箭头表示。 *注意力LSTM单元只显示隐藏状态和输入;它不显示单元格状态输入。

该模型在WMT'14英法测试上达到38.95 BLEU,在WMT'14英德测试上达到24.17 BLEU。

直觉:GNMT——具有8个堆叠编码器的seq2seq(+双向+剩余连接)+注意力

从译者A,B,...,H开始,8位译者从下到上排成一列。每位译者都阅读相同的德语文本。在每个单词中,译者A与译者B分享他/她的发现,译者B将改进它并与译者C分享——重复这个过程,直到传递给译者H。此外,在阅读德语文本时,译者H写下相关的关键词基于他所知道的和他收到的信息。

当每个人都读完了这个英文文本后,译者A就会被告知翻译第一个单词。首先,他试图回忆,然后他与译者B分享他的答案,译者B改进答案并与译者C分享——重复这个过程直到传递给译者H。译者H然后根据他写的关键词写出第一个翻译词。重复此操作,直到我们完成翻译。

3.总结

以下是你在本文中看到的所有体系结构的快速总结:

  • seq2seq
  • seq2seq+注意力
  • 具有双向编码器的seq2seq+注意力
  • 具有2个堆叠编码器的seq2seq+注意力
  • GNMT——具有8个堆叠编码器的seq2seq(+双向+剩余连接)+注意力

附录A:得分函数

以下是Lilian Weng编写的一些得分函数。本文提到了add/ concat和点积。涉及点积运算(点积,余弦相似度等)的得分函数的思想是测量两个向量之间的相似性。对于前馈神经网络得分函数,其思想是让模型与翻译一起学习对齐权重。

Seq2Seq那些事:详解深度学习中的“注意力机制”

Seq2Seq那些事:详解深度学习中的“注意力机制”

参考

[1]基于共同学习对齐和翻译的神经机器翻译(Bahdanau et.al,2015)(https://arxiv.org/abs/1409.0473)

[2]基于注意力的神经机器翻译的有效方法(Luong et.al,2015)(https://arxiv.org/abs/1508.04025)

[3]Attention Is All You Need(Vaswani et.al,2017)(https://arxiv.org/abs/1706.03762)

[4]自我注意力GAN(Zhang et.al,2018)(https://arxiv.org/abs/1805.08318)

[5]用神经网络进行序列学习的序列(Sutskever等,2014)(https://arxiv.org/abs/1409.3215)

[6] TensorFlow的seq2seq教程注意力事项(seq2seq +注意力教程)(https://github.com/tensorflow/nmt)

[7] Lilian Weng的博客(开始注意力的开始)(https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html#a-family-of-attention-mechanisms)

[8] Jay Alammar关于Seq2Seq的博客(关于seq2seq的精彩插图和工作实例+注意力)(https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/)

[9]谷歌的神经机器翻译系统:缩小人机翻译之间的差距(Wu等,2016)(https://arxiv.org/abs/1609.08144)

相关文章

动画RNN,LSTM和GRU(https://towardsdatascience.com/animated-rnn-lstm-and-gru-ef124d06cf45)

逐行Word2Vec实现(关于字嵌入)(https://towardsdatascience.com/an-implementation-guide-to-word2vec-using-numpy-and-google-sheets-13445eebd281)

Seq2Seq那些事:详解深度学习中的“注意力机制”

相关推荐