图解注意力机制 (Attention Mechanism)

原题:Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)
原文:HTML
作者:Jay Alammar


序列到序列(Sequence-to-sequence)模型是深度学习模型,在机器翻译、文本摘要和图像字幕等任务中取得了很大成功。谷歌翻译在2016年底开始在生产中使用这种模式。这两个模型分别在两篇开创性的论文中进行了解释(Sutskever et al., 2014; Cho et al., 2014)。

然而,我发现充分理解模型以实现需要首先了解相关概念。我认为其中的一部分如果以图像的形式来解释会更容易理解,这正是本文的目标。阅读本文,需要对深度学习有所了解。希望本文能够帮助你阅读并理解上述论文以及文末链接相关论文。

序列到序列模型是一种获取一系列项(单词、字母、图像特征等)并输出另一系列项的模型。一个训练好的模型工作流程如下:

在这里插入图片描述
在神经机器翻译中,序列是一系列单词,一个接一个地处理。输出同样是一系列单词:

在这里插入图片描述

Looking under the hood

在内部,模型由编码器(encoder)和解码器(decoder)组成。
在这里插入图片描述
机器翻译也是如此。
在这里插入图片描述

在机器翻译的情况下,上下文(context)是一个向量(基本上是一组数字)。编码器和解码器往往都是递归神经网络(请务必查看 Luis Serrano 的递归神经网络友好介绍)。

在这里插入图片描述

The context is a vector of floats. Later in this post we will visualize vectors in color by assigning brighter colors to the cells with higher values.

设计模型时,可以设置上下文向量的大小。它基本上是RNN编码器中隐藏单元的数量。这些可视化显示了大小为4的向量,但在现实世界的应用程序中,上下文向量的大小可能是256、512或1024。

根据设计,RNN在每个时间步长都有两个输入:一个输入(在编码器的情况下,来自输入句子的一个单词)和一个隐藏状态。然而,这个词需要用一个向量来表示。为了把一个单词转换成一个向量,使用单词嵌入(word embedding)将单词转换成向量空间,捕捉单词的许多含义/语义信息,例如, king - man + woman = queen

在这里插入图片描述
我们需要将输入的单词转化为向量,然后再进行处理。这种转换是使用单词嵌入算法完成的。我们可以使用预先训练好的嵌入,或者在数据集上训练我们自己的嵌入。嵌入大小为200或300的向量是典型的,为了简单起见,我们显示了大小为4的向量。

现在我们已经介绍了主要向量/张量,回顾一下RNN,并建立一种可视化语言来描述这些模型:
在这里插入图片描述
下一个RNN步骤采用第二个输入向量和隐藏状态#1来创建该时间步骤的输出。在本文后续内容中,我们将使用这样的动画来描述神经机器翻译模型中的向量。

在下面的可视化中,编码器或解码器的每个脉冲都是RNN处理其输入并生成该时间步长的输出。由于编码器和解码器都是RNNs,每当RNNs中的一个步骤进行一些处理时,它都会根据其输入和以前看到的输入更新其隐藏状态。

在这里插入图片描述

解码器还保持从一个时间步传递到下一个时间步的隐藏状态。我们只是没有在这个图形中可视化它,因为我们现在关心的是模型的主要部分。

现在让我们看看另一种可视化序列到序列模型的方法。这个动画将更容易理解描述这些模型的静态图形。这就是展开(unrolled)视图,我们不是显示一个解码器,而是为每个时间步长显示一个副本。这样,我们可以查看每个时间步的输入和输出。

在这里插入图片描述

Let’s Pay Attention Now

上下文向量被证明是这些类型模型的瓶颈。这使得模型很难处理长句。Bahdanau et al., 2014Luong et al., 2015 提出了一个解决方案。这些论文提出了注意力机制(Attention mechanism)技术,极大地提高了机器翻译系统的翻译质量。注意力允许模型根据需要关注输入序列的相关部分。

在这里插入图片描述
在时间步7,注意机制使解码器在生成英语翻译之前关注单词“étudiant”(法语中的“student”)。这种放大来自输入序列相关部分的信号的能力使得注意力模型比没有注意力的模型产生更好的结果。

首先,编码器向解码器传递更多的数据。编码器将所有隐藏状态传递给解码器,而不是传递编码阶段的最后一个隐藏状态
在这里插入图片描述

其次,注意力解码器在产生其输出之前要执行额外的步骤。为了专注于与该解码时间步骤有关的输入部分,解码器执行以下操作:

  • 看看它接收到的一组编码器隐藏状态——每个编码器隐藏状态与输入句子中的某个单词最相关。
  • 给每个隐藏状态一个分数(此处忽略目前的评分方式)。
  • 将每个隐藏状态乘以它的 softmax 分数,从而放大分数高的隐藏状态,弱化分数低的隐藏状态。
    在这里插入图片描述

计算得分是在解码器端的每个时间步完成的。

现在,可视化整个整个过程,并研究注意力机制的工作方式:

  • 注意力解码器RNN接受 <END> 令牌的嵌入和初始解码器隐藏状态。
  • RNN处理它的输入,产生一个输出和一个新的隐藏状态向量( h 4 h_4 h4)。输出被丢弃。
  • 注意力步骤:使用编码器隐藏状态和h4向量来计算这个时间步骤的上下文向量( C 4 C_4 C4)。
  • h 4 h_4 h4 C 4 C_4 C4 连接成一个向量。
  • 通过一个前馈神经网络(一个与模型联合训练的网络)传递这个向量。
  • 前馈神经网络的输出指示该时间步的输出单词。
  • 重复运行。
    在这里插入图片描述
    以另一种方式来观察在每个解码步骤中关注输入句子的哪一部分:
    在这里插入图片描述
    请注意,该模型不是无意识地将输出中的第一个单词与输入中的第一个单词对齐(aligning)。它实际上是在训练阶段学习如何对齐该语言对中的单词(在我们的示例中是法语和英语)。这种机制有多精确的一个例子来自上面列出的关注论文:

在这里插入图片描述
你可以看到模型在输出“European Economic Area”时是如何正确关注的。在法语中,这些词的顺序与英语相反(“européenne économique zone”)。句子中每隔一个单词的顺序都差不多。

如果你准备好应用,请务必查看TensorFlow的神经机器翻译(seq2seq)教程

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值