一、Attention 原理

在Encoder-Decoder结构中,Encoder把所有的输入序列都编码成一个统一的语义特征c再解码,因此, c中必须包含原始序列中的所有信息,它的长度就成了限制模型性能的瓶颈。如机器翻译问题,当要翻译的句子较长时,一个c可能存不下那么多信息,就会造成翻译精度的下降。

相比于原始的Seq2Seq模型的Decoder中只通过同一个向量c去计算隐状态,Attention在Decoder部分的每个时间输入不同的c来解决这个问题,这就是它最核心的创新。下图是带有Attention机制的Decoder:
Attention机制详解
看一下最开始的Attention模型架构如下:
Attention机制详解

  • 输入:(x1,x2,...,xM)(x_1, x_2,...,x_M)序列是待翻译的句子。
  • Encoder:双向的RNN或LSTM,计算得到每个位置的隐状态,下面用hih_i表示。
  • Decoder:对当前输出位置 t,使用Decoder中上一个隐状态 st1s_{t-1}与Encoder的结果(也就是向量 ctc_t)计算t位置的对应的yty_t
  • 输出:(y1,y2,...,yT)(y_1,y_2,...,y_T)序列是翻译之后的句子。

来详细看一下每一个位置的输出 yty_t 是怎么计算得到的:

(1)先来看看当前t位置的上下文向量 ctc_t是怎么计算得到的,其实ctc_t是由Encoder部分所有的隐状态hmh_{m}和对应的权重αtm\alpha_{tm}加权求和得到的:
ct=m=1Mαtmhmc_t=\sum_{m=1}^{M} \alpha_{tm}h_m

这里这个权重 αtm\alpha_{tm} 是用来衡量Encoder中位置m的 hmh_m 对Decoder中当前t位置的状态sts_t的影响,也就是 hmh_msts_t相关性。那么这些权重αtm\alpha_{tm}是怎么得到的呢?事实上, αtm\alpha_{tm}和Decoder的第 t-1 阶段的隐状态 st1s_{t-1}(也有一些模型中直接使用当前状态sts_t:下面的Global Attention)、Encoder第m个阶段的隐状态 hmh_m 有关。可以表示为:

etm=ψ(st1,hm),αtm=exp(etm)j=1Mexp(etj)e_{tm}=\psi(s_{t-1}, h_m),\: \alpha_{tm}=\frac{exp(e_{tm})}{\sum_{j=1}^{M} exp(e_{tj})}
其实这个 etme_{tm} 就是我们上面提到的 hmh_msts_t相关性(对齐程度),而后面的αtm\alpha_{tm}则对etme_{tm}进行softmax将其normalization得到attention权重分布,概率值的和为1。

齐模型 etme_{tm} 的计算方式(也就是上面那个ψ\psi函数)有很多种,不同的计算方式,代表不同的Attention模型,最简单且最常用的的对齐模型是dot product乘积矩阵,即把target端的输出隐状态与source端的输出隐状态进行矩阵乘。常见的对齐计算方式如下:

  • 点乘形式:etm=st1Thme_{tm}=s_{t-1}^T \cdot h_m
  • 加权点乘:etm=st1TWhme_{tm}=s_{t-1}^T \cdot W \cdot h_m
  • concat映射:etm=vaT tanh(W[st1;hm])e_{tm}=v_a^T \ tanh(W[s_{t-1};h_m])

(3)然后,使用上一个隐状态st1s_{t-1}、上一个输出yt1y_{t-1}、当前位置的上下文向量ctc_t更新当前隐状态:
st=f(st1,yt1,ct)s_t=f(s_{t-1}, y_{t-1}, c_t)

(4)根据当前隐状态sts_{t}、上一个输出yt1y_{t-1}、当前位置的上下文向量ctc_t计算当前输出yty_t
yt=g(st,yt1,ct)y_t=g(s_{t}, y_{t-1}, c_t)

通过为每个输出位置计算一个context vector,使得每个位置的输出可以关注到输入中最相关的部分,也就是所说的“注意力”,因此效果比传统模型更好。

二、Attention 分类

2.1 Soft Attention 和 Hard Attention

Kelvin Xu等人2015年发表的论文《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》中,同时引入了Soft Attention和Hard Attention。我们之前所描述的传统的Attention Mechanism就是Soft Attention。

Soft Attention计算得到的对齐向量α\alpha是一个概率分布,总和为1。Soft Attention是参数化的(Parameterization),因此可导,可以被嵌入到模型中去,直接训练。梯度可以经过Attention Mechanism模块,反向传播到模型其他部分。原始的Attention就是Soft Attention。

相反,Hard Attention是一个随机的过程。Hard Attention不会选择整个encoder的输出做为其输入,Hard Attention会依概率Si来采样输入端的隐状态一部分来进行计算,而不是整个encoder的隐状态。为了实现梯度的反向传播,需要采用蒙特卡洛采样的方法来估计模块的梯度。Hard Attention对每个位置计算对齐概率,但只将最高的一个置为1,其余置为0

两种Attention Mechanism都有各自的优势,但目前更多的研究和应用还是更倾向于使用Soft Attention,因为其可以直接求导,进行梯度反向传播。

2.2 Global Attention 和 Local Attention

Global Attention:和原始的Attention模型一样。所有的hidden state都被用于计算Context vector 的权重,即变长的对齐向量 αt\alpha_t,其长度等于encoder端输入句子的长度。但是原始的Attention模型中的对齐向量αtm\alpha_{tm}和Decoder的第 t-1 阶段的隐状态 st1s_{t-1}、Encoder第m个阶段的隐状态 hmh_m 有关,而Global Attention的对齐向量αtm\alpha_{tm}和Decoder的当前t位置状态sts_t、Encoder第m个阶段的隐状态 hmh_m 有关。

Local Attention:Global Attention有一个明显的缺点就是,每一次,encoder端的所有hidden state都要参与计算向量c,这样做计算开销会比较大,特别是当encoder的句子偏长,比如,一段话或者一篇文章,效率偏低。因此,为了提高效率,Local Attention应运而生。

Local Attention是一种介于Kelvin Xu所提出的Soft Attention和Hard Attention之间的一种Attention方式,即把两种方式结合起来。其结构如下图所示:
Attention机制详解
Local Attention首先会为decoder端当前的词,预测一个source端对齐位置(aligned position)ptp_t,然后基于ptp_t选择一个窗口,也就是只关注一部分encoder hidden states,用于计算上下文向量ctc_tptp_t的计算公式如下:
pt=Ssigmoid(vpT tanh(Wpht))p_t=S \cdot sigmoid(v_p^T \ tanh(W_ph_t))
其中,S是encoder端句子长度,vpv_pWpW_p 是模型参数。此时,对齐向量 αt\alpha_t 的计算公式如下:
αt=align(ht,h~t)exp((spt)22σ2)\alpha_t=align(h_t,\tilde h_t)exp(-\frac{(s-p_t)^2}{2 \sigma^2})

总之,Global Attention和Local Attention各有优劣,在实际应用中,Global Attention应用更普遍,因为local Attention需要预测一个位置向量p,这就带来两个问题:

  • 当encoder句子不是很长时,相对Global Attention,计算量并没有明显减小。
  • 位置向量pt的预测并不非常准确,这就直接计算的到的local Attention的准确率。

2.3 Self Attention

《Attention is all you nedd》中提出的一种Attention模型,详见:Transformer 模型详解。它反应的是输入或者输出的序列内部的单词和单词之间的相互影响。

2.4 Hierarchical Attention

Zichao Yang等人在论文《Hierarchical Attention Networks for Document Classification》提出了Hierarchical Attention用于文档分类。Hierarchical Attention构建了两个层次的Attention Mechanism,第一个层次是对句子中每个词的attention,即word attention;第二个层次是针对文档中每个句子的attention,即sentence attention。结构图如下:
Attention机制详解
整个网络结构由四个部分组成:一个由双向RNN(GRU)构成的word sequenceencoder,然后是一个关于词的word-level的attention layer;基于word attention layar之上,是一个由双向RNN构成的sentence encoder,最后的输出层是一个sentence-level的attention layer。

2.5 Attention over Attention

科大讯飞和哈工大在2017ACL会议上的论文《Attention-over-Attention Neural Networks for Reading Comprehension》中提出了Attention Over Attention的Attention机制,计算的是问题(Query)中的每个单词对文档(Document)中某个单词的重要程度(即注意力)。结构如下图所示:
Attention机制详解

两个输入,一个Document和一个Query,分别用一个双向的RNN进行特征抽取,得到各自的隐状态h(doc)和h(query),然后基于query和doc的隐状态进行dot product,得到query和doc的attention关联矩阵

  • 按列进行计算,得到文档中每个单词对问题中的某个单词的重要程度(即注意力),最后形成一个文档级别的注意力分布 α(t)\alpha(t)问题中有多少个单词就有多少个这样的分布。然后对所有的α(t)\alpha(t)进行汇总(求和、平均值或者最大值):
    α(t)=softmax(M(1,t),M(2,t),...,M(P,t))\alpha(t)=softmax(M(1,t),M(2,t),...,M(P,t)),P是文档中单词的个数
    A=[α(1),α(2),...,α(Q)]\Alpha=[\alpha(1),\alpha(2),...,\alpha(Q)],Q是问题中单词个数
  • 按行进行计算,得到问题中的每个单词对文档中某个单词的重要程度(即注意力),形成一个问题级别的注意力分布 β(t)\beta(t)文档中有多少个单词就有多少个这样的分布。然后对这些分布进行累加并求平均得到 B\Beta
    β(t)=softmax(M(t,1),M(t,2),...,M(t,Q)\beta(t)=softmax(M(t,1),M(t,2),...,M(t,Q),Q是问题中单词个数
    B=1Pt=1Pβ(t)\Beta=\frac{1}{P} \sum_{t=1}^{P} \beta(t) ,P是文档中单词的个数

2.6 Multi-step Attention

2017年,FaceBook 人工智能实验室的Jonas Gehring等人在论文《Convolutional Sequence to Sequence Learning》提出了完全基于CNN来构建Seq2Seq模型,除了这一最大的特色之外,论文中还采用了多层Attention Mechanism,来获取encoder和decoder中输入句子之间的关系,结构如下图所示:
Attention机制详解
完全基于CNN的Seq2Seq模型需要通过层叠多层来获取输入句子中词与词之间的依赖关系,特别是当句子非常长的时候,我曾经实验证明,层叠的层数往往达到10层以上才能取得比较理想的结果。针对每一个卷积的step(输入一个词)都对encoder的hidden state和decoder的hidden state进行dot product计算得到最终的Attention 矩阵,并且基于最终的attention矩阵去指导decoder的解码操作。

2.7 Multi-dimensional Attention

传统的Attention往往是一维的。《Coupled Multi-Layer Attentions for Co-Extraction of Aspect and Opinion Terms》提出了Multi-dimensional attention把一维的Attention扩展到多维,多维Attention可以捕捉输入多个维度重要性,具有更强的描述能力。

2.8 Memory-based Attention

Memory机制在NLP中应用也比较广泛,比如对话系统中。Memory-based Attention借用了这一思想,假设输入为q,Memory中以(k,v)形式存储着我们需要的上下文。Memory-based Attention可以通过不停地迭代地更新Memory来将注意力转移到答案所在的位置。


参考:
【1】 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用
【2】干货|全面了解attention机制
【3】干货 | Attention注意力机制超全综述
【4】 Seq2Seq – Attention – Transformer

相关文章:

  • 2022-01-18
  • 2021-08-29
  • 2021-09-25
  • 2021-04-22
  • 2021-07-01
  • 2021-05-05
  • 2021-12-09
  • 2021-06-02
猜你喜欢
  • 2021-11-24
  • 2021-06-24
  • 2022-12-23
  • 2021-06-13
  • 2021-10-13
  • 2021-12-13
相关资源
相似解决方案