当前位置:   article > 正文

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

context attention

作者: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计算方式

1620uploading.4e448015.gif转存失败重新上传取消1620

1、Content-base attention

论文:Neural Turing Machines

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

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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机制看成注意力分配系数,计算输入每一项对输出权重影响大小

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

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

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

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

(5) 计算最终输出

1620uploading.4e448015.gif转存失败重新上传取消1620

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

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

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

(1) Global Attention

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

(2) Local Attention

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

1620uploading.4e448015.gif转存失败重新上传取消1620

1620uploading.4e448015.gif转存失败重新上传取消1620

4、Transformer中Attention

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

1620uploading.4e448015.gif转存失败重新上传取消1620

(Attention is all your need论文截图)

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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机制,如机器翻译

1620uploading.4e448015.gif转存失败重新上传取消1620

1620uploading.4e448015.gif转存失败重新上传取消1620

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

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

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

五、Attention机制实现分析

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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计算公式

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

1620uploading.4e448015.gif转存失败重新上传取消1620

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

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

1620uploading.4e448015.gif转存失败重新上传取消1620

2、Transformer中Multi-Head Attention实现

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/101365
推荐阅读
相关标签
  

闽ICP备14008679号