干货 | Attention注意力机制超全综述

2019-08-05 20:06:25 浏览数 (1)

作者:CHEONG

来自:机器学习与自然语言处理

一、Attention机制原理理解

Attention机制通俗的说,对于某个时刻的输出y,它在输入x上各个部分上的注意力,这里的注意力也就是权重,即输入x的各个部分对某时刻输入y贡献的权重,在此基础上我们先来简单理解一下Transformer模型中提到的self-attention和context-attention

(1) Self-attention:输入序列即是输出序列,即计算自身的attention,计算序列对其本身的attention权重

(2) Context-attention:即是encoder-decoderattention,如在机器翻译模型中即计算encoder序列中的每个词对decoder序列各个词的attention权重

二、Attention计算方式

1、Content-base attention

论文:Neural Turing Machines

论文链接:https://arxiv.org/pdf/1410.5401.pdf

attention相似度的度量使用的是余弦相似度:

2、Additive attention

论文:Neural Machine Translation By JointlyLearning to Align and Translate

论文链接:https://arxiv.org/pdf/1409.0473.pdf

下面有对这篇论文中的attention实现过程详细介绍,这里不做介绍

3、Location-Baseattention、General attention、Dot-Productattention

论文:Effective Approaches toAttention-based Neural Machine Translation

论文链接:https://arxiv.org/pdf/1508.04025.pdf

下面有对这篇论文中的attention实现过程详细介绍,这里不做介绍

4、ScaledDot-Product attention

论文:Attention is all you need

论文链接:https://arxiv.org/pdf/1706.03762.pdf

大家熟悉的Transformer中提到的Attention机制,下面有介绍

三、Attention发展历程及演变

1、seq2seq中引入attention机制

首先attention机制常用在seq2seq模型中,下图一是传统的seq2seq,输出y对输入序列x1,x2,x3...没有区分,没有辨识度,下图二中我们引入了attention机制,每个输出的词y受输入X1,X2,X3...影响的权重不同,这个权重便是由Attention计算,因此可以把Attention机制看成注意力分配系数,计算输入每一项对输出权重影响大小

(Learning Phrase Representations using RNN Encoder–Decoderfor Statistical Machine Translation论文截图)

(NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN ANDTRANSLATE论文截图)

介绍一下上图中attention实现过程

(1) 首先利用双向RNN结构得到隐层状态(h1, h2, …, hn)

(2) 如当前已经decoder到隐层St-1,接下来计算每一个输入位置hj对当前位置i的影响

这里attention的计算方式可以有很多种,点乘形式、加权点乘形式或求和形式

(3) 对eij进行softmax将其normalization得到attention权重分布,如下所示

(4) 利用aij进行加权求和得到相应的context vector

(5) 计算最终输出

2、SoftAttention和Hard Attention

(Show, Attend and Tell: Neural Image Caption Generation withVisual Attention论文提出)

Softatttention是参数化的,是可导的可嵌入到模型中直接训练,上述seq2seq中的即是soft attention;Hard attention是一个随机的过程,为了实现梯度的反向传播,需要采用蒙特卡洛采样的方法来估计模块的梯度,目前更多的研究和应用还是更倾向于使用Soft Attention,因为其可以直接求导,进行梯度反向传播,大致了解一下即可

3、GlobalAttention和Local Attention

(EffectiveApproaches to Attention-based Neural Machine Translation截图)

上左图是Global Attention,右图是Local Attention

全局Attention和局部attention存在共同之处,例如在翻译模型的解码阶段都是将LSTM的顶层隐藏状态ht作为输入,目标是活得一个上下文向量ct来捕获源信息帮助预测当前单词,两种方式不同便在于对上下文向量ct的获取方式不同,但其后步骤是共享的,即首先由上下文信息和隐藏层信息获得注意力隐层状态:

然后再通过注意力隐层状态通过softmax获得预测分布

下面介绍一下全局Attention和局部Attention对上下文向量ct的获取

(1) Global Attention

全局Attention在计算上下文向量ct时考虑编码器所有的隐层状态,attention向量是通过比较当前目标隐藏状态ht和每个源隐藏状态hs得到:

ht和hs之间的计算方式可以采用如下几种:

当前也可以通过基于location的方式计算attention得分:

(2) Local Attention

全局Attention的缺点在于对每个目标单词必须关注源序列中的所有单词,消耗资源因此局部Attention的思想是对每个目标单词只选择一部分源单词进行预测上下文向量ct,具体来说,在时刻t 模型首先为每个目标单词生成一个对齐位置pt。上下文向量ct 通过窗口[pt -D,pt D] 内的源隐藏状态集合加权平均计算得到;D 根据经验选择。8 与全局方法不同,局部对齐向量at 是固定维度的,即∈ℝ2D 1

4、Transformer中Attention

简单说一下Transformer中使用的Scaled Dot-Product Attention和Multi-Head Attention,详细内容可参见博主之前写的文章:Transformer模型细节理解及Tensorflow实现,Transformer 模型的 PyTorch 实现

(Attention is all your need论文截图)

ScaledDot-Product Attention:通过Q,K矩阵计算矩阵V的权重系数

Multi-HeadAttention:多头注意力是将Q,K,V通过一个线性映射成h个Q,K,V,然后每个都计算Scaled Dot-Product Attention,最后再合起来,Multi-HeadAttention目的还是对特征进行更全面的抽取

5、Attention组合使用相关论文

(1) Hierarchical Attention Networks for Document Classification

(2) Attention-over-Attention Neural Networks for ReadingComprehension

(3) Multi-step Attention: Convolutional Sequence to SequenceLearning

(4) Multi-dimensional Attention: Coupled Multi-Layer Attentionsfor Co-Extraction of Aspect and Opinion Terms

6、Attention应用领域

(1) 机器翻译

(2) 蕴含关系推理

(3) 文本摘要生成

四、Attention实例分析

首先看在Encoder-Decoder中引入Attention机制,如机器翻译

每个输出的词Y受输入X1,X2,X3,X4影响的权重不同,这个权重便是由Attention计算

因此可以把Attention机制看成注意力分配系数,计算输入每一项对输出权重影响大小

下面一张图给出了Attention机制在机器翻译中实际权重计算过程

首先由原始数据经过矩阵变化得到Q、K、V向量,如下图

以单词Thinking为例,先用Thinking的q向量和所有词的k向量相乘,使用下面公式:

这种得到每个单词对单词Thinking的贡献权重,然后再用得到的权重和每个单词的向量v相乘,得到最终Thinking向量的输出

Attention中缩放的目的是为了加速神经网络的计算

五、Attention机制实现分析

1、HierarchicalAttention Network中的注意力机制实现

HAN结构包含了Word encoder、Word attention、Sentence encoder、Sentence attention,其中有word attention和sentence attention

解释:h是隐层GRU的输出,设置w,b,us三个随机变量,先一个全连接变换经过激活函数tanh得到ui,然后在计算us和ui相乘,计算softmax输出a,最后得到权重a之后再和h相乘,得到最终经过注意力机制的输出v,下左图是word attention计算公式,下右图是sentece attention计算公式

HAN中Attention实现核心代码如下:

attention中mask的作用,下面看一下mask一种实现

通过将超过seq_length的部分mask称False,然后将mask为False的部分弄成无穷小,这样在反向传播时无穷小倒数为0,防止消息逆向传播

下面也是mask的一种实现方式,下面通过add和mul两种方式实现上面所说的mask

2、Transformer中Multi-Head Attention实现

可参见之前的文章:Transformer模型细节理解及Tensorflow实现

推荐阅读:

【一分钟论文】 NAACL2019-使用感知句法词表示的句法增强神经机器翻译

【一分钟论文】Semi-supervised Sequence Learning半监督序列学习

详解Transition-based Dependency parser基于转移的依存句法解析器

经验 | 初入NLP领域的一些小建议

学术 | 如何写一篇合格的NLP论文

干货 | 那些高产的学者都是怎样工作的?

一个简单有效的联合模型

近年来NLP在法律领域的相关研究工作


0 人点赞