Attention(注意力)机制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Attention(注意力)机制相关的知识,希望对你有一定的参考价值。
参考技术A Attention(注意力)机制其实来源于人类的认识认知能力。比如当人们观察一个场景或处理一件事情时,人们往往会关注场景的显著性物体,处理事情时则希望抓住主要矛盾。注意力机制使得人类能够关注事物的重要部分,忽略次要部分,更高效的处理所面临的各种事情。注意力机制在NLP领域被真正的发扬光大,其具有参数少、速度快、效果好的特点,如2018年的BERT、GPT 领跑各项 NLP 任务效果。由此在此领域,transformer和attention结构受到了极大的重视。
第二步:使用权重对Value进行加权求和从而得到Attention Value。
注意力是一种机制,或者方法论,并没有严格的数学定义。比如,传统的局部图像特征提取、显著性检测、滑动窗口方法等都可以看作一种注意力机制。在神经网络中,注意力模块通常是一个额外的神经网络,能够硬性选择输入的某些部分,或者给输入的不同部分分配不同的权重。
根据权重在特征空间和通道上的应用方式不同,主要可分为
其增加了一个通道注意力模块,学习每个通道的权重,通过抑制无关特征提升卷积特征的表示性能。SENet通过Squeeze模块和Exciation模块实现所述功能,首先通过Squeeze模块对卷积特征进行进行压缩,即在通道维度上执行全局池化操作,在SENet中采用的是全局平均池化,作者提到该操作能够使得靠近数据输入的特征也可以具有全局感受野,这一点在很多的任务中是非常有用的。然后是通过全连接网络进行Exciation操作,作者在全连接网络中降维操作的目的是一方面降低了网络计算量,一方面增加了网络的非线性能力。最后将得到通道attention应用到原始卷积特征上,即通过乘法加权的方式乘到先前的特征上,从而提升重要特征,抑制不重要特征。
从图中可以看出,首先将输入张量进行降维到C通道,与SENet不同的是采用二阶pool的方式,计算得到C*C的协方差矩阵,这种计算方式引入了通道之间的相互关系,然后进行线性卷积和非线性激活的两个连续运算,得到通道注意力。
除此之外,还有很多的注意力机制相关的研究,比如残差注意力机制,多尺度注意力机制,递归注意力机制等。
Attention注意力机制介绍
什么是Attention机制
Attention机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素。其中重要程度的判断取决于应用场景,拿个现实生活中的例子,比如1000个人眼中有1000个哈姆雷特。根据应用场景的不同,Attention分为空间注意力和时间注意力,前者用于图像处理,后者用于自然语言处理。本文主要介绍Attention机制在Seq2seq中的应用。
为什么要用Attention机制
我们知道在Seq2seq模型中,原始编解码模型的encode过程会生成一个中间向量C,用于保存原序列的语义信息。但是这个向量长度是固定的,当输入原序列的长度比较长时,向量C无法保存全部的语义信息,上下文语义信息受到了限制,这也限制了模型的理解能力。所以使用Attention机制来打破这种原始编解码模型对固定向量的限制。
Attention原理
Attention的原理就是计算当前输入序列与输出向量的匹配程度,匹配度高也就是注意力集中点其相对的得分越高(题外话:有木有很像线性模型,权重高的特征越重要。其实个人理解在机器学习中很多算法都具有相似性,比如线性回归加上一个分类函数sign就是Logistic回归,还有就是beam search和Viterbi算法,都是求概率最大序列)。其中Attention计算得到的匹配度权重,只限于当前序列对,不是像网络模型权重这样的整体权重。
算法过程:
1)encode对输入序列编码得到最后一个时间步的状态c,和每个时间步的输出h,其中c又作为decode的初始状态z0。
2)对于每个时间步的输出h与z0做匹配也就是match操作,得到每个时间步的匹配向量α01,如图1。
3)对所有时间步的输出h与z0的匹配度α0,使用softmax做归一化处理,得到各个时间步对于z0的匹配分数。
4)求各个时间步的输出h与匹配分数的加权求和得到c0,作为decode的下一个时间步的输入,如图2。
5)计算各个时间步的输出h与z1的匹配度得到c1作为decode下一个时间步的输入,如此一步一步重复下去,如图3。
这样就可以把每个时间步重要的信息传给decode中,以上就是Attention机制的处理过程。其中match操作一般是求两个向量的相似度,通常有如下方法:
1)余弦相似度
2)一个简单的 神经网络,输入为hh和ww,输出为α
3)或者矩阵变换α=hTWzα=hTWz (Multiplicative attention,Luong et al., 2015)
在tensorflow1.0版本以后的api seq2seq库中,包含了两种Attention算法,他们的区别就是match操作的不同,因此也有人称他们为加法Attention和乘法Attention,具体内容下:
1)BahdanauAttention:论文https://arxiv.org/abs/1409.0473中的实现:
2)LuongAttention:论文https://arxiv.org/abs/1508.04025中的实现 :
由于图片来自不同地方,所以符号有些不同,图4和图5中的h是上文所说的每个时间步的输出向量,d是decode中每个时间步的状态,也就是上文中的z,c是match后计算的权值加和后的向量用于decode中每个时间步的输入,a就是match操作中经过softmax后的匹配权重,v是一个向量,相当于w一样的权重需要去学习。有上面两个公式可以看出,BahdanauAttention和LuongAttention的区别就是在match过程中的计算方式不同,一个是将decode的状态与encode的输出求和,一个是求乘,所以才有了加法Attention和乘法Attention的叫法。
待更新。。
参考:
以上是关于Attention(注意力)机制的主要内容,如果未能解决你的问题,请参考以下文章
注意力机制 attention 注意力分数 动手学深度学习v2