四万字全面详解 | 深度学习中的注意力机制(上)

共 16166字,需浏览 33分钟

 ·

2020-11-15 03:37

↑ 点击蓝字 关注极市平台

作者丨蘑菇先生
来源丨NewBeeNLP
编辑丨极市平台

极市导读

 

本文介绍了基础的Attention模型的应用,并通过论文讨论了Attention机制的各种变体。文章讲述详细,能够帮助大家对注意力机制有更全面的了解。>>加入极市CV技术交流群,走在计算机视觉的最前沿

目前深度学习中热点之一就是注意力机制(Attention Mechanisms)。Attention源于人类视觉系统,当人类观察外界事物的时候,一般不会把事物当成一个整体去看,往往倾向于根据需要选择性的去获取被观察事物的某些重要部分,比如我们看到一个人时,往往先Attend到这个人的脸,然后再把不同区域的信息组合起来,形成一个对被观察事物的整体印象。

「同理,Attention Mechanisms可以帮助模型对输入的每个部分赋予不同的权重,抽取出更加关键及重要的信息,使模型做出更加准确的判断,同时不会对模型的计算和存储带来更大的开销,这也是Attention Mechanism应用如此广泛的原因」,尤其在Seq2Seq模型中应用广泛,如机器翻译、语音识别、图像释义(Image Caption)等领域。Attention既简单,又可以赋予模型更强的辨别能力,还可以用于解释神经网络模型(例如机器翻译中输入和输出文字对齐、图像释义中文字和图像不同区域的关联程度)等。

本文主要围绕核心的Attention机制以及Attention的变体展开。

Seq2Seq Model

Attention主要应用于Seq2Seq模型,故首先简介一下Seq2Seq模型。Seq2Seq模型目标是学习一个输入序列到输出序列的映射函数。应用场景包括:机器翻译(Machine translation)、自动语音识别(Automatic speech recognition)、语音合成(Speech synthesis)和手写体生成(Handwriting generation)。

Seq2Seq模型奠基性的两个工作如下:

NIPS2014:Sequence to Sequence Learning with Neural Networks[1]

该论文介绍了一种基于RNN(LSTM)的Seq2Seq模型,基于一个Encoder和一个Decoder来构建基于神经网络的End-to-End的机器翻译模型,其中,Encoder把输入编码成一个固定长度的上下文向量,Decoder基于「上下文向量」「目前已解码的输出」,逐步得到完整的目标输出。这是一个经典的Seq2Seq的模型,但是却存在「两个明显的问题」

  • 把输入的所有信息有压缩到一个固定长度的隐向量,忽略了输入的长度,当输入句子长度很长,特别是比训练集中所有的句子长度还长时,模型的性能急剧下降(Decoder必须捕捉很多时间步之前的信息,虽然本文使用LSTM在一定程度上能够缓解这个问题)。

  • 把输入编码成一个固定的长度过程中,对于句子中每个词都赋予相同的权重,这样做是不合理的。比如,在机器翻译里,输入的句子与输出句子之间,往往是输入一个或几个词对应于输出的一个或几个词。因此,对输入的每个词赋予相同权重,这样做没有区分度,往往使模型性能下降。

注意上图中Encoder得到的上下文向量「仅用于作为Decoder的第一个时间步的输入」

Decoder的另一个输入是前一时刻的单词 ,需要注意的是,在训练阶段  是「真实label」(需要embedding一下),而不是上一时刻的预测值。而在测试阶段,则是上一时刻的预测值(具体使用时需要借助beam-search来得到最优翻译序列)。
但是实际训练过程中,「label是否使用真实数据2种方式,可以交替进行」,即一种是把标准答案作为Decoder的输入,还有一种是把Decoder上一次的输出的结果作为输入,因为如果完全使用标准答案,会导致收敛的过快,导致测试的时候不稳定。
另外,上述输入输出中的每个单词,都要借助「embedding」技术。

EMNLP2014:Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation[2]

和NIPS2014几乎同时发表,思想也是一样的。只不过在这篇文章中,作者提出了一种新的RNN Cell,即GRU代替LSTM来构建Seq2Seq模型。
还有一点不同的是,Encoder得到的上下文向量会作用于Decoder「每一个时间步」的预测。
总结起来:RNN-based Encoder-Decoder Framework,目标是预测
 ,其中  都是one-hot向量。
  • 「Encoder」
给定输入,,将其编码为上下文向量 .
 是LSTM或GRU, 是时间步  的单词的one-hot表示,先经过embedding矩阵  嵌入后作为RNN在  时刻的输入, 是  时间步的encode; 是时间步  的encode。
 是上下文向量,是关于  的函数。 是输入的最大长度。最简单的,,即最后一个时间步得到的encode作为上下文向量。
  • 「Decoder」
Decoder在给定上下文向量  以及已经预测的输出  条件下,预测下一个输出 。换句话说,Decoder将输出  上的联合分布分解为有序条件分布 (ordered conditionals):
其中, 是输出的最大长度。
使用RNN,每个条件分布可以写成下式:
 是输出词的one-hot向量(全连接+softmax激活后得到), 是前一时刻已经预测的输出词的one-hot向量,先经过 embedding后再作为  的输入。 是一个非线性函数(e.g., 全连接+softmax),输出关于  的概率分布。 是LSTM/GRU)是RNN的隐藏层状态。(注意, 不是RNN提取隐藏层状态的LSTM或GRU,而是隐藏层后面接的全连接层或其他非线性函数,LSTM或GRU提取的Decoder隐状态和上下文向量以及已经预测的输出都将作为  的输入,用于预测概率分布)。

Attention

如上文所述,传统的Seq2Seq模型对输入序列缺乏区分度,存在明显的两大问题。因此,有大牛提出使用Attention机制来解决问题。下面将按照Attention的不同类型重点介绍一些Attention上的研究工作。

Basic Attention

本小节介绍最传统和基础的Attention模型的应用。首先直观感受下Attention机制的一个示意动图。

Machine Translation

ICLR2015: Neural Machine Translation by Jointly Learning to Align and Translate[3]
这是ICLR2015提出的文章,机器翻译的典型方法。作者在RNN Encoder-Decoder框架上,引入了Attention机制来同时进行翻译和对齐。使用bidirectional RNN作为Encoder,Decoder会在翻译的过程中通过模拟搜索源句子focus到不同部位上来进行更准确的解码。模型示意图如下:

首先将Decoder中的条件概率写成下式:
其中, 一般使用softmax全连接层(或多加几层,输入的3个向量concat到一起后进行Feed Forward), 是Decoder中RNN在时间步  的隐状态,根据如下LSTM或GRU函数计算得到:
 是关于前一时刻Decoder端隐状态 ,前一时刻已经预测的输出  的embedding表示  以及该时刻  的上下文向量  的函数。 是LSTM或GRU。
注意,和已有的encoder-decoder不同,这里的条件概率对「每一个目标单词」 都需要有一个「不同的」上下文向量 
而上下文向量  取决于Encoder端输入序列encode后的RNN隐状态 (bidirectional RNN,因此  包含了输入句子  位置周围的信息,有,)
而每一个权重  使用softmax转换为概率分布:
而  是输出  和输入  的对齐模型(alignment model),衡量了输入位置  周围的信息和输出位置  的匹配程度。
 得分依赖于Decoder端  时刻的「前一时刻的隐状态」 和Encoder端  时刻的隐状态。文中使用前馈神经网络学习对齐模型,并且和其他组件联合学习, 实际上学到的是soft alignment,因此可以很容易应用梯度反向传播。
总之, 可以理解为衡量了输出单词  和输入单词  的对齐程度,而  是  时刻,所有encode隐状态根据该对齐程度得到的期望上下文向量,是所有对齐情况下的期望。 衡量了在计算下一个decoder隐状态  和预测  过程中,相对于前一个decoder隐状态 ,不同  的重要性程度。这一「Decoder中的」注意力机制使得只需要关注源句子部分的信息,而不是像此前工作中非要将源句子「所有的信息」都编码成固定长度的上下文向量来用。

Image Caption

ICML2015: Show, Attend and Tell- Neural Image Caption Generation with Visual Attention[4]
Kelvin Xu等人在该论文中将Attention引入到Image Caption中。Image Caption是一种场景理解的问题,这是视觉领域重要的一个研究方向。场景理解的难点在于既要进行物体识别,又要理解物体之间的关系。这相当于要让机器拥有模仿人类将大量显著的视觉信息压缩为描述性语言的能力。
模型包括两个部分:Encoder和Decoder。其中,Encoder会使用CNN提取图片低层特征;Decoder会在RNN中引入注意力机制,将图片特征解码为自然语言语句。模型总的示意图如下:

如上图,模型把图片经过CNN网络,变成特征图。LSTM的RNN结构在此上运行Attention模型,最后得到描述。
「目标:」 输入一个图像,输出该图像的描述 ,其中  是词典词汇的数量, 是词的one-hot表示向量, 是描述的长度。
  • 「Encoder」
在encoder端,模型使用CNN来提取L个D维vector,每一个都对应图像的一个区域(这里粗体表示向量):
在原论文中,原始图像先经过center cropped变为  的图像,然后经过卷积和pooling操作,共4次max pooling,最后得到  的feature map,feature map个数共512个,即512个通道。这里  对应的就是196个区域数量,每个区域都是原始图像经过下采样得到的,因此可以通过4次上采样能够恢复原始图像中对应区域。而 ,即每个区域的向量化表示是由所有的feature map相应位置数值构造而成。
与此前的工作使用Softmax层之前的那一层vector作为图像特征不同,本文所提取的这些vector来自于 「low-level 的卷积层,这使得Decoder可以通过从所有提取到的特征集中,选择一个子集来聚焦于图像的某些部分」。这样子就有点像NLP里的seq2seq任务了,这里的输入从词序列转变成了图像区域vector的序列。作为类比,图像上的  个区域( 平展开为196)就相当于句子的长度(单词的数量 );每个区域的D维向量化表示是由D个Filter提取的该区域的特征concat在一起形成的向量,类比于句子每个单词的embedding经过RNN提取的「隐状态向量」
上下文向量  计算如下:
即,在给定一组提取到的图像不同区域的向量表示 ,以及不同区域相应的权重  条件下,计算上下文向量,最简单的方式是使用上文所述的加权和来处理。本文使用了两种Attention Mechanisms,即Soft Attention和Hard Attention。我们之前所描述的传统的Attention Mechanism就是Soft Attention。Soft Attention是参数化的(Parameterization),因此可导,可以被嵌入到模型中去,直接训练,梯度可以经过Attention Mechanism模块,反向传播到模型其他部分。相反,Hard Attention是一个随机的过程,根据  随机采样。Hard Attention不会选择整个encoder的输出做为其输入,Hard Attention会依概率来采样输入端的隐状态一部分来进行计算,而不是整个encoder的隐状态。为了实现梯度的反向传播,需要采用蒙特卡洛采样的方法来估计模块的梯度。
而权重  的计算,作者引入了一个Attention模型,实际上就是上篇文章MT任务中的对齐模型。
 是当前要预测的「输出词」的位置, 是输入词的位置。
  • 「Decoder」
使用LSTM来解码并生成描述词序列,LSTM结构单元如下:

具体LSTM的计算:(可以发现如何将  融入到LSTM中的,实际上就是多一个线性变换,再全部加起来)
第一个式子实际上是四个式子,分别得到输入门、遗忘门、输出门和被输入门控制的候选向量。其中,三个门控由sigmoid激活,得到的是元素值皆在 0 到 1 之间的向量,可以将门控的值视作保留概率;候选向量由tanh激活,得到的是元素值皆在-1到1之间的向量。 是仿射变换,在上式也就是要对最右边的三项进行加权求和,可以将T理解为分块矩阵。最右边的三个式子,其中  是「输出词的embedding matrix」 是one-hot词表示, 用来lookup,得到dense词向量表示。 是前一时刻的decoder状态, 是LSTM真正意义上的“输入”,代表的是捕捉了特定区域视觉信息的上下文向量,既然它和时刻  有关,就说明它是一个动态变化的量,在不同的时刻将会捕捉到与本时刻相对应的「相关图像区域」。这个量将由attention机制计算。
第二个式子是更新旧的记忆单元,element-wise 的运算表示三个门控将对各自控制的向量的每个元素做“取舍”:0 到 1 分别代表完全抛弃到完全保留。第三个式子是得到隐状态。
有了隐状态,就可以计算词表中各个词的概率值,那么取概率最大的那个作为当前时刻生成的词,并将作为下一时刻的输入。其实就是softmax全连接层(两层MLPs+softmax)。 是单词的数量。

原论文中还有一些比较有意思的Trick。
  • 解码的输出:模型生成的一句caption被表示为各个词的one-hot编码所构成的集合,输出的caption y表示为:
 是字典的单词个数, 是句子长度。 的形式为 ,即只有第  处位置为1,其它位置为0。
RNN建模时, 会用在embedding,将稀疏one-hot向量转成dense的embedding向量。模型的输出概率  会用于拟合真实的 

LSTM初始输入

LSTM中的记忆单元与隐藏单元的初始值,是两个不同的多层感知机,采用所有特征区域的平均值来进行预测的:

图像的encode:
文中使用VGGnet作为encoder进行编码,且不进行finetuning。encoder得到  的feature maps。因此decoder处理的是flattened ()。
Caption的Decode:
在decode时,由于模型每次更新所需要的时间正比于最长的句子,如果随机采样句子进行解码,训练时间会很长。为了解决这个问题,文中会在预处理环节,将句子按照长度分组。每次更新时,随机采样一个长度,然后使用相应的分组内的句子进行训练,这样就能显著提高运行效率。
个人觉得输出词的embedding matrix也可以使用word2vec预训练好的词向量代替,文中没提到。

Speech Recognition

NIPS2015: Attention-Based Models for Speech Recognition[5]
给定一个英文的语音片段作为输入,输出对应的音素序列。Attention机制被用于对输出序列的每个音素和输入语音序列中一些特定帧进行关联。

Entailment

ICLR2016: Reasoning about Entailment with Neural Attention[6]
语义蕴含,句子关系推断方面的早期工作,也是采用了基本的Attention模型。给定一个用英文描述的前提和假设作为输入,输出假设与前提是否矛盾、是否相关或者是否成立。举个例子:前提:在一个婚礼派对上拍照;假设:有人结婚了。该例子中的假设是成立的。Attention机制被用于关联假设和前提描述文本之间词与词的关系。

Text Summarization

EMNLP2015: A Neural Attention Model for Sentence Summarization[7]
给定一篇英文文章作为输入序列,输出一个对应的摘要序列。Attention机制被用于关联输出摘要中的每个词和输入中的一些特定词。

Attention Variants

本部分介绍Attention机制的各种变体。包括但不限于:

  • 「基于强化学习的注意力机制」选择性的Attend输入的某个部分
  • 「全局&局部注意力机制」其中,局部注意力机制可以选择性的Attend输入的某些部分
  • 「多维度注意力机制」:捕获不同特征空间中的Attention特征。
  • 「多源注意力机制」:Attend到多种源语言语句
  • 「层次化注意力机制」:word->sentence->document
  • 「注意力之上嵌一个注意力」:和层次化Attention有点像。
  • 「多跳注意力机制」:和前面两种有点像,但是做法不太一样。且借助残差连接等机制,可以使用更深的网络构造多跳Attention。使得模型在得到下一个注意力时,能够考虑到之前的已经注意过的词。
  • 「使用拷贝机制的注意力机制」:在生成式Attention基础上,添加具备拷贝输入源语句某部分子序列的能力。
  • 「基于记忆的注意力机制」:把Attention抽象成Query,Key,Value三者之间的交互;引入先验构造记忆库。
  • 「自注意力机制」:自己和自己做attention,使得每个位置的词都有全局的语义信息,有利于建立长依赖关系。

Reinforcement-learning based Attention

  • NIPS2014: Recurrent Models of Visual Attention[1]
  • ICLR2015: Multiple Object Recognition with Visual Attention [2]

NIPS2014论文应该是最早的Attention雏形,虽然和我们通常所说的、广泛应用于Seq2Seq的Attention机制不太一样,但是还是值得提一下。这是Google DeepMind2014年提出的一篇计算机视觉领域的文章,适用于处理图像序列或帧序列来进行场景感知或处理(例如Video Caption)。

其动机在于随着分辨率提高,计算量不断增长,神经网络难以在实时应用场景中,快速处理这么大的计算量。借鉴人类视觉系统的特点,即,为了理解某个场景,并不是一下子处理整个场景,而是Focus到某些关键的位置上,然后联合起来构建出整个场景信息。故本篇论文利用RNN处理图像序列,并使用「强化学习」来训练模型,使得模型能够学习attention决策。即,针对实时的场景,基于过去的信息和任务的需要选择下一个要focus的感知区域。这个和人类的感知方式比较相似,也是我们最早理解的Attention机制。

但是,上文所述的广泛应用于Seq2Seq中的Attention不大一样。人类的注意力机制实际上是可以节省计算资源的,注意只需要集中到某些区域,可以忽略大部分区域。Recurrent Models of Visual Attention中的做法和这个是一样的。

然而,下文即将要介绍的应用于Seq2Seq模型模型的Attention就不是这样的了。实际上,下文所述Attention模型,需要把每一个部分都观察的仔仔细细(每部分权重都要算一下),才能进一步决策到底需要focus到哪些部分,这和人类的视觉系统不相符,更像是memory,而不是attention(实际上attention可以理解为一种「短期记忆」,即根据短期记忆在输入特征上分配attention;memory也是另外一种非常重要的机制),然而,这并不妨碍注意力机制的有效性。

Global & Local Attention

  • EMNLP2015: Effective Approaches to Attention-based Neural Machine Translation[3]


以往的文章,主要将attention应用于不同场景中,而这篇文章提出了新的attention架构,引入了Global Attention和Local Attention的概念。

Global Attention和上文的Soft Attention几乎一样,即计算上下文向量时,和所有的encoder隐状态向量求alignment;而Local Attention是Soft Attention和Hard Attention的权衡,既拥有Soft Attention可微分,容易使用反向传播来优化的优点,又拥有Hard Attention复杂度低的优点,除此之外,还不需要强化学习方法进行训练。

首先定义,
  • Encoder得到的源语句单词  的隐状态为:
  • Decoder中目标语句单词  的隐状态为:
  • 对每一个目标单词 ,使用Attention机制计算的上下文向量为 
  • Attention机制中的对齐模型为 (前面文章中都是使用 , 即「前一个时间步」的Decoder隐状态和Encoder隐状态来计算对齐权重)。

首先是Global Attention,如下图所示:

Global Attention中上下文向量  的计算路径为:

对齐模型计算:

s是源语句单词的位置。
score具体可以采用:

上下文向量计算:

注意图中,框起来的部分作者称为Attention Layer。


接着是Local Attention,如下图所示:

Local Attention的引入是为了解决Global Attention中Attend到源语句中所有的词,一方面复杂度高,另一方面很难翻译长序列语句。Local Attention首先根据目标词的隐状态  计算源语句中的「对齐位置」(中心),然后使用以该位置为中心的窗口  内的源语句单词 ,来计算Attention的权重,计算时使用以  为中心的高斯核函数进行衰减。具体如下:

对齐位置模型」: 是源语句长度。只与 时刻Decoder状态 有关。 

对齐权重模型: 也就是在global Attention对齐模型基 础上加了高斯函数指数衰减。 



计算上下文向量时,同上文,即对窗口内的encoder隐向量进行加权,即 

计算得到上下文向量后,本文直接将  和  concat在一起,并计算经过attention后的隐状态 

再将上述attention后的隐状态输入到一个softmax全连接层,得到预测目标值:

按照上述方式来看,每个目标输出单词的预测值,没有利用已经预测的输出单词(embedding)作为输入,也没有利用目标词位置前一时刻的decoder隐状态 ;只利用了当前时刻Decoder隐状态 (上下文向量计算中的权重也主要依据这个计算的)。也就是说,每个目标词位置的attention决策是独立的(只和  本身相关)。

然而在机器翻译当中,通常要维护一个覆盖集,即源语句中哪些单词被翻译过了;同理,在神经机器翻译中,我们在翻译一个目标词时,同样需要关注哪些源语句单词已经被翻译了。因此,作者提出了一个Input-feeding approach,把Decoder端前一时刻attention「后」的隐状态和前一时刻预测的输出单词的embedding连接起来,作为下一时刻的输入。(这个和传统Attention的几乎没差别)

本文的贡献主要是Local Attention以及提出的各种各样的Alignment函数,其余都和前面的工作大同小异。现总结下Alignment函数如下图所示:


Multi-dimensional Attention

  • AAAI2018:DiSAN: Directional Self-Attention Network for RNN/CNN-Free Language Understanding[4]

在Baisc Attention中,对于每个查询,每个key对应的value都有一个权重值,即每个查询会对应一个1-D的Attention weight向量。而Multi-dimensional Attention会产生更高维度的Attention矩阵,旨在捕获不同特征空间中的Attention特征。
实际上主要区别在于,之前每个value向量对应一个权重Alignment Score,加权的时候实际上是利用了广播机制,value每个元素feature都乘上该权重;现在修改为在feature-level,每个元素特征都乘上不同的权重系数,因此Alignment Score是和Value同维度数的向量,即右图中的 。做法很简单,使用MLP对齐的时候,MLP输出层神经元数量等于Value维度数即可,例如这篇文章中使用


其他方式如下:()


Multi-Source Attention

  • NAACL-HLT2016:Multi-Source Neural Translation[5]

这是2016发表在NAACL-HLT的一篇文章。文章使用英语,德语,法语三种语言建立了一种多源(三语言)机器翻译模型。Intuition在于,如果一篇文章被翻译成了另一种语言,那么就更加倾向于被翻译成其他语言。这样的观点对机器翻译任务有一定的启发,将原本的单一源语言替换为多种源语言,应该可以取得更好的效果。

如英语中的“bank”一词原本可以翻译为河岸或是银行,如果源语言中有德语词汇“Flussufer”(河岸)作为帮助,则自然可以精确得到法语中“Berge”(河岸)这样的翻译结果。基于这样的思想,作者在原有的seq2seq+attention模型的基础上做了修改,引入更多源语句,建立一种多源的翻译模型。模型结构如下:
左侧是两种不同语言的源语句,每种语言的源语句都有一个自己的encoder,且结构一样。问题的关键在于如何将两种语言encoder的东西combine在一起,并和decoder的表示进行对齐求attention。

由于作者采用了LSTM,因此同时考虑了hidden state和cell state的combination。核心工作就是图中黑色部分的combiners。combiners的输入是两个源语句最后时刻encoder得到的hidden state  和cell state ,输出是单个hidden state  和单个cell state 。(以往的工作似乎没有把encoder的cell state给decoder,从图中还可以看出,两个encoder中,每一层得到的两个源语句的hidden state和cell state都需要经过combiners)

  • 最基本的combiner:对于hideen state,就是把两个encoder的隐状态concat起来,再做一个线性变换+tanh激活:

    。对于cell state,直接相加: 


  • LSTM variant combiner:




唯一要提的就是, 作为输入,每个encoder得到的cell state各自对应一个自己的遗忘门。

到目前为止,都不涉及到attention。上文得到的  和  只是作为decoder的初始输入(前一时刻的输入,以前的Seq2Seq模型,似乎cell state没有传给decoder)。

至于attention,作者做了很小的改动。采用的是EMNLP2015: Effective Approaches to Attention-based Neural Machine Translation[6]中的Local Attention。

在这个基础上,让decoder的隐状态同时和两个encoder得到的隐状态进行对齐,并各自计算得到一个上下文向量,,注意这个c是上下文向量,跟上文所述cell state无关。最后计算Decoder的Attentional Hidden State时,使用

 。也就是之前只使用1个上下文向量,这里面使用两个上下文向量。

下面是实验的一个case:


Hierarchical Attention

  • NAACL-HLT2016:Hierarchical Attention Networks for Document Classification[7]

文本分类是一项基础的NLP任务,在主题分类,情感分析,垃圾邮件检测等应用上有广泛地应用。其目标是给「每篇」文本分配一个类别标签。本文中模型的直觉是,不同的词和句子对文本信息的表达有不同的影响,词和句子的重要性是严重依赖于上下文的,即使是相同的词和句子,在不同的上下文中重要性也不一样。就像人在阅读一篇文本时,对文本不同的内容是有着不同的注意度的。而本文在attention机制的基础上,联想到文本是一个层次化的结构,提出用词向量来表示句子向量,再由句子向量表示文档向量,并且在词层次和句子层次分别引入attention操作的模型。
模型结构如上图所示,

  • 词先经过Bidirectional RNN(GRU)提取到word annotation,然后经过1个MLP得到word annotation对应的隐表示(这一步在Basic Attention中没有),
  • 然后使用该隐表示和全局的「word-level上下文隐向量」  进行对齐,计算相似性,得到softmax后的attention权重,
  • 最后对句子内的词的word annotation根据attention权重加权,得到每个句子的向量表示。
  • 接着,将得到的句子表示同样经过Bidirectional RNN(GRU)提取sentence annotation,再经过MLP得到对应的隐表示,接着将其和全局的「sentence-level上下文隐向量 进行对齐计算,得到句子的attention权重,最后加权sentence annotation得到文档级别的向量表示。得到文档表示后再接一个softmax全连接层用于分类。

这里最有趣的一点是,全局的「word-level上下文隐向量 和全局的的「sentence-level上下文隐向量,是随机初始化的,且也是通过模型进行学习的。这二者就像专家一样,是高级咨询顾问。为了得到句子的向量表示,我们询问  哪些词含有比较重要的信息?为了得到文档的向量表示,我们询问  哪些句子含有比较重要的信息?

Attention over Attention

  • ACL2017:Attention-over-Attention Neural Networks for Reading Comprehension[8]

比较巧妙,但很容易理解,直接上图:
两个输入,一个Document和一个Query,分别用一个双向的RNN进行特征抽取,得到各自的隐状态  和 。(Embedding Layer+Bi-GRU Layer)。接着要计算document和query之间「每个词」的相似性得分,

然后基于query和doc的隐状态进行dot product,得到doc和query的attention关联矩阵 (Document所有词和Query所有词和之间的关联矩阵,行是Document,列是Query)。然后按列(column)方向进行softmax操作,得到query-to-document的attention值 ,表示t时刻的query 「word」的document-level attention。按照行(row)方向进行softmax操作,得到document-to-query的attention值 ,表示t时刻的document 「word」的query-level attention,再对  按照列方向进行累加求平均得到averaged query-level attention值 ,(可以证明,按列对  平均后仍然是概率分布),这个求平均的操作可以理解为求query-level每个词和document所有词的平均关联性。

最后再基于上一步attention操作得到  和 ,再进行attention操作,即attention over attention得到最终的attended attention ,即Document每个词都有一个attended attention score。

预测的时候,预测词典中每个词的概率,将词w在document中出现的位置上对应的attention值进行求和。例如图中Mary出现在Document首尾,故把这两个attention score相加,作为预测的概率。

文章的亮点在于,引入document和query所有词pair-wise的关联矩阵,分别计算query每个词document-level attention(传统的方法都只利用了这个attention),和document每个词的query-level attention,对后者按列取平均得到的averaged query-level attention。进一步,二者点乘得到attended document-level attention,也即attention-over-attention。

这个和上文层次化Attention有点像。

本文参考资料

[1]Sequence to Sequence Learning with Neural Networks: https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf

[2]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation: https://www.aclweb.org/anthology/D14-1179
[3]ICLR2015: Neural Machine Translation by Jointly Learning to Align and Translate: https://arxiv.org/pdf/1409.0473.pdf
[4]ICML2015: Show, Attend and Tell- Neural Image Caption Generation with Visual Attention: https://arxiv.org/pdf/1502.03044.pdf
[5]NIPS2015: Attention-Based Models for Speech Recognition: https://arxiv.org/pdf/1506.07503.pdf
[6]ICLR2016: Reasoning about Entailment with Neural Attention: https://arxiv.org/pdf/1509.06664.pdf
[7]EMNLP2015: A Neural Attention Model for Sentence Summarization: https://www.aclweb.org/anthology/D/D15/D15-1044.pdf

[8]NIPS2014: Recurrent Models of Visual Attention: https://papers.nips.cc/paper/5542-recurrent-models-of-visual-attention.pdf
[9]ICLR2015: Multiple Object Recognition with Visual Attention : https://arxiv.org/abs/1412.7755
[10]EMNLP2015: Effective Approaches to Attention-based Neural Machine Translation: http://aclweb.org/anthology/D15-1166
[11]AAAI2018:DiSAN: Directional Self-Attention Network for RNN/CNN-Free Language Understanding: https://arxiv.org/pdf/1709.04696.pdf
[12]NAACL-HLT2016:Multi-Source Neural Translation: http://www.aclweb.org/anthology/N16-1004
[13]EMNLP2015: Effective Approaches to Attention-based Neural Machine Translation: http://aclweb.org/anthology/D15-1166
[14]NAACL-HLT2016:Hierarchical Attention Networks for Document Classification: http://www.aclweb.org/anthology/N16-1174
[15]ACL2017:Attention-over-Attention Neural Networks for Reading Comprehension: https://arxiv.org/pdf/1607.04423.pdf



推荐阅读


添加极市小助手微信(ID : cvmart2),备注:姓名-学校/公司-研究方向-城市(如:小极-北大-目标检测-深圳),即可申请加入极市目标检测/图像分割/工业检测/人脸/医学影像/3D/SLAM/自动驾驶/超分辨率/姿态估计/ReID/GAN/图像增强/OCR/视频理解等技术交流群:每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企视觉开发者互动交流~

△长按添加极市小助手

△长按关注极市平台,获取最新CV干货

觉得有用麻烦给个在看啦~  
浏览 46
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报