分享

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

 黄爸爸好 2019-08-04

阅读大概需要12分钟

跟随小博主,每天进步一丢丢

作者: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:///pdf/1410.5401.pdf
attention相似度的度量使用的是余弦相似度:

2、Additive attention
论文:Neural Machine Translation By JointlyLearning to Align and Translate
论文链接:https:///pdf/1409.0473.pdf
下面有对这篇论文中的attention实现过程详细介绍,这里不做介绍

3、Location-Baseattention、General attention、Dot-Productattention
论文:Effective Approaches toAttention-based Neural Machine Translation
论文链接:https:///pdf/1508.04025.pdf
下面有对这篇论文中的attention实现过程详细介绍,这里不做介绍

4、ScaledDot-Product attention
论文:Attention is all you need
论文链接:https:///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实现

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多