Attention(注意力)机制

Attention(注意力)机制其实来源于人类的认识认知能力。比如当人们观察一个场景或处理一件事情时,人们往往会关注场景的显著性物体,处理事情时则希望抓住主要矛盾。注意力机制使得人类能够关注事物的重要部分,忽略次要部分,更高效的处理所面临的各种事情。

注意力机制在NLP中的应用

注意力机制在NLP领域被真正的发扬光大,其具有参数少、速度快、效果好的特点,如2018年的BERT、GPT 领跑各项 NLP 任务效果。由此在此领域,transformer和attention结构受到了极大的重视。

Attention的思路非常的简单,即一个加权求和过程,其原理可以表述如下:
第一步:通过Query和Key计算权重;

第二步:使用权重对Value进行加权求和从而得到Attention Value。

从不同的计算区域、所用信息和结构可以对attention的使用形式进行分类:

计算区域:

  1. Soft Attention,这是比较常见的Attention方式,对所有key求权重概率,每个key都有一个对应的权重,是一种全局的计算方式(也可以叫Global Attention)。这种方式比较理性,参考了所有key的内容,再进行加权。但是计算量可能会比较大一些。
  2. Hard Attention,这种方式是直接精准定位到某个key,其余key就都不管了,相当于这个key的概率是1,其余key的概率全部是0。因此这种对齐方式要求很高,要求一步到位,如果没有正确对齐,会带来很大的影响。另一方面,因为不可导,一般需要用强化学习的方法进行训练。(或者使用gumbel softmax之类的)
  3. Local Attention,这种方式其实是以上两种方式的一个折中,对一个窗口区域进行计算。先用Hard方式定位到某个地方,以这个点为中心可以得到一个窗口区域,在这个小区域内用Soft方式来算Attention。

所用信息:

  1. General Attention,这种方式利用到了外部信息,常用于需要构建两段文本关系的任务,query一般包含了额外信息,根据外部query对原文进行对齐。
  2. Local Attention,这种方式也可以成为Self Attention,因为其只是用了内部信息,key和value以及query只和输入原文有关,在self attention中,key=value=query。既然没有外部信息,那么在原文中的每个词可以跟该句子中的所有词进行Attention计算,相当于寻找原文内部的关系。

结构:

  1. 单层Attention,这是比较普遍的做法,用一个query对一段原文进行一次attention。
  2. 多层Attention,一般用于文本具有层次关系的模型,假设我们把一个document划分成多个句子,在第一层,我们分别对每个句子使用attention计算出一个句向量(也就是单层attention);在第二层,我们对所有句向量再做attention计算出一个文档向量(也是一个单层attention),最后再用这个文档向量去做任务。
  3. 多头Attention,这是Attention is All You Need中提到的multi-head attention,用到了多个query对一段原文进行了多次attention,每个query都关注到原文的不同部分,相当于重复做多次单层attention,最后再把这些结果拼接起来。

注意力机制在CV中的应用

注意力是一种机制,或者方法论,并没有严格的数学定义。比如,传统的局部图像特征提取、显著性检测、滑动窗口方法等都可以看作一种注意力机制。在神经网络中,注意力模块通常是一个额外的神经网络,能够硬性选择输入的某些部分,或者给输入的不同部分分配不同的权重。

根据权重在特征空间和通道上的应用方式不同,主要可分为

通道注意力机制(Channel Attention)

对于二维图像的CNN特征来说,一般具有3个维度,即长、宽和通道。通道注意力机制即对卷积特征的通道进行加权,从而提升特征的表示能力。比较典型的例子为SENet[7],

其增加了一个通道注意力模块,学习每个通道的权重,通过抑制无关特征提升卷积特征的表示性能。SENet通过Squeeze模块和Exciation模块实现所述功能,首先通过Squeeze模块对卷积特征进行进行压缩,即在通道维度上执行全局池化操作,在SENet中采用的是全局平均池化,作者提到该操作能够使得靠近数据输入的特征也可以具有全局感受野,这一点在很多的任务中是非常有用的。然后是通过全连接网络进行Exciation操作,作者在全连接网络中降维操作的目的是一方面降低了网络计算量,一方面增加了网络的非线性能力。最后将得到通道attention应用到原始卷积特征上,即通过乘法加权的方式乘到先前的特征上,从而提升重要特征,抑制不重要特征。

SENet没有考虑通道之间的关系,因此GSoP-Net[8]提出了计算通道注意力的另一种方式,

从图中可以看出,首先将输入张量进行降维到C通道,与SENet不同的是采用二阶pool的方式,计算得到C*C的协方差矩阵,这种计算方式引入了通道之间的相互关系,然后进行线性卷积和非线性激活的两个连续运算,得到通道注意力。

ECANet[9]是一种用于提高深度CNNs性能的超轻注意模块。ECA模块通过分析SEnet的结构了解到降维和跨通道交互的影响,作者通过实验证明了降维是没有作用的,并通过自适应内核大小的一维卷积实现局部跨通道的信息交互。

空间(Spatial)和通道(Channel)注意力(Attention)机制的融合

CBAM[10]实现了同时使用空间和通道注意力机制,模块结构如下:

其中通道注意力模块结构为,
可以看出,结构类似于SENet,不同的是增加了MaxPool支路,从而增强了通道attention。空间注意力模块结构为,
首先将通道本身进行降维,分别获取最大池化和均值池化结果,然后拼接成一个特征图,再使用一个卷积层进行学习。这两种机制,分别学习了通道的重要性和空间的重要性,还可以很容易地嵌入到任何已知的框架中。

DANet也同时实现了空间和通道注意力机制,但其计算方式与CBAM不同,

,其中通道注意力模块为,
,位置注意力模块为,

除此之外,还有很多的注意力机制相关的研究,比如残差注意力机制,多尺度注意力机制,递归注意力机制等。

Reference:

  1. https://zhuanlan.zhihu.com/p/91839581
  2. https://www.jianshu.com/p/4d52edda1d76
  3. https://zhuanlan.zhihu.com/p/61440116
  4. https://www.jianshu.com/p/af48ee338227
  5. https://www.jianshu.com/p/55d793085e6d
  6. https://www.jianshu.com/p/0fb9f5ad76c5
  7. Squeeze-and-Excitation Networks, https://arxiv.org/abs/1709.01507
  8. Global Second-order Pooling Convolutional Networks, https://arxiv.org/abs/1811.12006
  9. ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks, https://arxiv.org/abs/1910.03151
  10. CBAM: Convolutional Block Attention Module, https://arxiv.org/abs/1807.06521
  11. Dual Attention Network for Scene Segmentation, https://arxiv.org/abs/1809.02983

你可能感兴趣的:(Attention(注意力)机制)