图解 Attention

写在前面

本文是对博文《Attn: Illustrated Attention》的翻译,有一部分是自己的理解,和原文出入不大。国内网盘链接

在基于神经网络的机器翻译 (NMT) 出现之前,基于统计的方法一直是机器翻译的主流方法。 NMT 是近些年才出现的机器翻译方法,它通过训练大型神经网络来读入文本并输出文本的翻译。目前NMT中最流行的框架是序列到序列 (seq2seq) 的方法,本文将通过图解的方法来介绍 seq2seq 框架以及其中的注意力机制。

01_kEKqyD.png

seq2seq 中,有一个 Encoder 和一个 DecoderEncoderDecoder 都是 RNN。即:把要翻译的语言通过 Encoder 编码,之后把编码得到的向量(图1中红色节点)输入 Decoder 解码。

seq2seq 的缺点在于 DecoderEncoder 接收的唯一信息就是最后 Encoder 隐藏状态(图1中的2个红色节点),如果输入文本很长,仍然使用定长向量来表示句子的信息显然是不合理的(不可能包含所有的信息,会导致信息的有损压缩)。

Attention 的想法基础就是在把原先输入 Decoder 的定长向量,改为对 Encoder 的输出向量加权和的形式,这个加权和的计算过程就叫 Attention

02_kElrFA.png

注意力机制可以看做是更好的联系 EncoderDecoder 的一种方式,可以为 Decoder 提供来自每个 Encoder 隐藏状态的信息。通过这种方法,模型能够有选择地关注输入序列的有用部分,从而了解它们之间的对齐关系,有助于模型更好地处理输入较长的句子。

定义:对齐

对齐的意思是把原始文本和对应的翻译进行匹配(就是哪个词对应着翻译成哪个词)。

03_kEtW3d.png

注意力机制可以分为两种。一种叫做全局注意力,就是计算注意力的时候使用 Encoder 所有的隐藏状态。还有一种叫局部注意力,使用 Encoder 一部分隐藏状态(目的是为了减少计算量,通常计算一个固定窗口内的部分)。本文的范讨论的是全局注意力,因此本文中对 Attention 都是全局注意力。

本文采用图解的方式来理解 Attention 机制,没有繁杂的数学公式,文末还使用了 4NMT 模型作为例子来展示注意力到底是怎么用的。

注意力机制概述

通过为每个单词分配一个权重,注意力机制能够保证当前翻译的单词对原文各个单词的关注点不同(就是对照着原文翻译)。由于这个权重可能大于 1,为了方便我们使用 softmax 进行归一化,得到归一化权重,然后计算 Encoder 隐藏状态和其对应归一化权重的加权和,得上下文向量。注意力层的实现可以分为 6 个步骤。

  1. 计算 EncoderDecoder 的隐藏状态
  2. 计算评分
  3. 通过 softmax 归一化分数
  4. 将每个 Encoder 隐藏状态乘以其 softmax 得分
  5. 对齐向量
  6. 将上下文向量输入到 Decoder

计算 Encoder 的隐藏状态和 Decoder 的隐藏状态

计算 Encoder 所有的隐藏状态和 Decoder 的第一个隐藏状态。要想输出 Decoder 的第一个隐藏的状态,需要给 Decoder 一个初始状态和一个输入,例如采用 Encoder 的最后一个状态作为 Decoder 的初始状态,输入为 0

04_kENEvR.md.png

计算评分

计算 Decoder 的第一个隐藏状态和 Encoder 所有的隐藏状态的相关性,这里采用点积的方式(默认两个向量长度一样)。后面是一个计算示例。

05_kENaa8.md.png

06_kEN32d.md.png

在上面的例子中,Encoder 的隐藏状态向量 [5, 0, 1] 获得了 60 分的最高分数,这说明要翻译的下一个词将受到这个 Encoder 隐藏状态很大程度的影响。

通过 softmax 归一化分数

我们把得到的分数输入到到 softmax 层,进行归一化,归一化后的分数代表的注意分配的权重。(这里我觉得有一点问题,文章里面说的是进行 softmax,即 soft 注意力,出来的应该是浮点数的概率值,但是他这里的计算结果是采用选取评分最高的那个词,即 hard 注意力,其实都可以的,但是一般 soft 用的比较多)。这里我们看到除了 [5, 0, 1] 获得 1 的注意力得分,所有 Encoder 隐藏状态的对齐到了 0。这意味着我们可以预期第一个翻译的单词应该与 [5, 0, 1] 嵌入的输入单词匹配。

07_kEUHpQ.md.png

08_kEUsYD.md.png

将每个 Encoder 隐藏状态乘以其 softmax 得分

通过将每个 Encoder 隐藏状态与其 softmaxed 得分(标量)相乘,我们获得对齐向量 。

09_kEaphF.png

10_kEULXn.md.png

对齐向量

把对齐向量和对应的归一化分数相乘相加,得到上下文向量。上下文向量就是对所有对齐向量进行信息聚合。

11_kE0sHI.png

12_kEaW34.md.png

将上下文向量输入到 Decoder 中。

输入的方式和模型有关。我们会在下面的例子中看到不同的模型是如何利用 Decoder 的上下文向量的。

注意力实际上如何运作?

答案:反向传播。反向传播会确保 Decoder 的输出(翻译的句子)和实际情况误差逐渐减小。这实际上是通过改变 RNN 中的权重和得分函数来完成的。改变权重会影响 Encoder 隐藏状态和 Decoder 隐藏状态,进而影响注意力得分。

注意力机制的例子

在上一节中我们已经了解了 seq2seqseq2seq + 注意模型,接下来会介绍 3 个基于 seq2seqNMT 架构,来看一下具体是怎么用的。为了比较效果,文章给出了每个模型的双语评估研究(BLEU)分数 -用于评估生成的句子到参考句子的标准度量。

例1:Neural Machine Translation by Jointly Learning to Align and Translate

注意力机制用于机器翻译的开篇之作。作者在 《Neural Machine Translation by Jointly Learning to Align and Translate》 一文中使用 对齐 一词来表示在训练模型时得到的注意力权重。下面是这个模型的一些关键点:

  • Encoder 是双向(前向+后向)门控循环单元(BiGRU)
  • DecoderGRU,其初始隐藏状态来自 EncoderGRU 的最后隐藏状态向量(未在下图中示出)。
  • 注意层中的评分方法是点积加权和,下一个 Decoder 时间步的输入是来自前一个 Decoder 时间步(粉红色)的输出和当前时间步(深绿色)的上下文向量之间的拼接(concat)

13_kEBtqs.md.png

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

例2: Effective Approaches to Attention-based Neural Machine Translation

这篇论文的关键点如下:

  • Encoder 是两层的LSTM网络。 Decoder 也一样,其初始隐藏状态是最后 Encoder 隐藏状态。
  • 他们实验的评分函数是(i)addconcat,(ii) dot,(iii) location,和(iv) general
  • 拼接得到的上下文向量输入一个前馈神经网络得到的输出(粉红色)作为当前Decoder时间步的输入。

14_kZaCcQ.md.png

例3:(不讲,感觉没什么特别的)

总结

本文内容回顾:

  • seq2seq
  • seq2seq + attention
  • seq2seq with bidirectional encoder + attention
  • seq2seq with 2-stacked encoder + attention
  • GNMT—seq2seq with 8-stacked encoder (+bidirection+residual connections) + attention

附录:评分函数

一些常见的Attention评分函数

15_kEBxW8.md.png

16_kEDCLj.png

坚持原创技术分享,您的支持将鼓励我继续创作!