浅谈Attention-based Model【源码篇】


或者矩阵变换α=hTWz
  • (Multiplicative attention,Luong et al., 2015)

现在已经由match模块算出了当前输入输出的匹配度,然后我们需要计算当前的输出 和 每一个输入做一次match计算,分别可以得到当前的输出和所有输入的匹配度,由于计算出来并没有归一化,所以我们使用softmax,使其输出时所有权重之和为1。那么和每一个输入的权重都有了,那么我们可以计算出其加权向量和,作为下一次的输入。
浅谈Attention-based Model【源码篇】

算出C0

之后,把这个向量作为 RNN 的输入。然后第一个时间点的输出的编码z1c0和初始状态z0共同决定。我们计算得到z1之后,替换之前的z0

再和每一个输入的encoder的vector计算匹配度,然后softmax,计算向量加权,作为第二时刻的输入……如此循环直至结束。
浅谈Attention-based Model【源码篇】

再看看 Grammar as a Foreign Language 一文当中的公式:
浅谈Attention-based Model【源码篇】
上面的符号表示和前面描述的不太一样,经统一符号的公式如下:

  • uti=vTtanh(W1hi+W2Zt)

αti=softmax(uti)
ct=iαithi

得到ct之后,就可以作为第t时刻RNN的input,而Zt可以作为t时刻RNN的隐状态的输入,这样就能够得到新的隐状态Zt+1

,如此循环,直到遇到停止符为止。


一些例子:

“在文本翻译任务上,使用attention机制的模型每生成一个词时都会在输入序列中找出一个与之最相关的词集合。之后模型根据当前的上下文向量
(context vectors) 和所有之前生成出的词来预测下一个目标词。


它将输入序列转化为一堆向量的序列并自适应地从中选择一个子集来解码出目标翻译文本。这感觉上像是用于文本翻译的神经网络模型需要“压缩”输入文本中的所有信息为一个固定长度的向量,不论输入文本的长短。”

— Dzmitry Bahdanau, et al., Neural machine translation by jointly
learning to align and translate,
2015

虽然模型使用attention机制之后会增加计算量,但是性能水平能够得到提升。另外,使用attention机制便于理解在模型输出过程中输入序列中的信息是如何影响最后生成序列的。这有助于我们更好地理解模型的内部运作机制以及对一些特定的输入-输出进行debug。

大型图片带来的问题:

被广泛应用于计算机视觉领域的卷积神经网络模型同样存在类似的问题: 对于特别大的图片输入,模型学习起来比较困难。
由此,一种启发式的方法是将在模型做预测之前先对大型图片进行某种近似的表示。

“人类的感知有一个重要的特性是不会立即处理外界的全部输入,相反的,人类会将注意力专注于所选择的部分来得到所需要的信息,然后结合不同时间段的局部信息来建立一个内部的场景表示,从而引导眼球的移动及做出决策。”
Recurrent Models of Visual Attention,
2014

这种启发式方法某种程度上也可以认为是考虑了attention,但在这篇博文中,这种方法并不认为是基于attention机制的。

基于attention机制的相关论文如下:

Recurrent Models of Visual Attention, 2014
DRAW: A Recurrent Neural Network For Image Generation, 2014
Multiple Object Recognition with Visual Attention, 2014


正如博客 Deep Learning基础–理解LSTM/RNN中的Attention机制
提及 基于attention模型的应用实例:列举几个具体的应用实例,介绍attention机制是如何用在LSTM/RNN模型来进行序列预测的。

  1. Attention在文本翻译任务上的应用
    给定一个法语的句子作为输入序列,需要输出翻译为英语的句子。Attention机制被用在输出输出序列中的每个词时会专注考虑输入序列中的一些被认为比较重要的词。
  2. Attention在图片描述上的应用
    与之前启发式方法不同的是,基于序列生成的attention机制可以应用在计算机视觉相关的任务上,帮助卷积神经网络重点关注图片的一些局部信息来生成相应的序列,典型的任务就是对一张图片进行文本描述。
    给定一张图片作为输入,输出对应的英文文本描述。Attention机制被用在输出输出序列的每个词时会专注考虑图片中不同的局部信息。
  3. Attention在语义蕴涵 (Entailment) 中的应用
    给定一个用英文描述的前提和假设作为输入,输出假设与前提是否矛盾、是否相关或者是否成立。
    Attention机制被用于关联假设和前提描述文本之间词与词的关系。
    Reasoning about Entailment with Neural Attention, 2016:在模型中加入了attention机制来找出假设和前提文本中词/短语之间的对齐关系。
  4. Attention在语音识别上的应用
    给定一个英文的语音片段作为输入,输出对应的音素序列。
    Attention机制被用于对输出序列的每个音素和输入语音序列中一些特定帧进行关联。
  5. Attention在文本摘要上的应用
    给定一篇英文文章作为输入序列,输出一个对应的摘要序列。
    Attention机制被用于关联输出摘要中的每个词和输入中的一些特定词。

… 在最近神经网络翻译模型的发展基础之上,提出了一个用于生成摘要任务的基于attention的神经网络模型。通过将这个概率模型与一个生成式方法相结合来生成出准确的摘要。

A Neural Attention Model for Abstractive Sentence Summarization, 2015

具体而言,采用传统编码器-解码器结构的LSTM/RNN模型存在一个问题:不论输入长短都将其编码成一个固定长度的向量表示,这使模型对于长输入序列的学习效果很差(解码效果很差)。而attention机制则克服了上述问题,原理是在模型输出时会选择性地专注考虑输入中的对应相关的信息。使用attention机制的方法被广泛应用在各种序列预测任务上,包括文本翻译、语音识别等。

感谢 作者:蓝鲸王子 博客 Deep Learning基础–理解LSTM/RNN中的Attention机制
感谢 作者:Jason Brownlee。原文链接见:Attention in Long Short-Term Memory Recurrent Neural Networks
感谢 作者:joshuaxx316 博客:Attention注意力机制–原理与应用
感谢 作者:wuzqchom 博客:浅谈Attention-based Model【原理篇】