注意力机制小结

 

1. 原理

       关于注意力机制的原理,网上有好多解释,参考一篇博客(https://blog.csdn.net/malefactor/article/details/78767781)。

注意力机制原理参考了人眼的选择注意机制,对看到的图像有侧重点地关注。常用于encoder-decoder结构中,因此在机器翻译、计算机视觉等场景下都有广泛的应用。关于注意力机制原理的讲解,网上借用Seq2Seq结构帮助理解,具体可参考上述博客。

       关于注意力机制的分类方法有好多,较为清晰的一种是:注意力机制是一种普遍思想,可分为硬注意力机制、软注意力机制和自注意力机制;其中应用较多的是软注意力机制和自注意力机制。软注意力机制的注意域又可分为空间域、通道域以及混合域。

       关于硬注意力机制与软注意力机制以及自注意力机制的区别上述博客中也有较为清晰的体现。注意力机制的计算也可分为三段:(1)根据查询目标和输入数据的索引计算二者之间的相似度,有多种相似度计算方法;(2)对计算出来的相似度做softmax处理得到注意力分布;(3)将输入数据的值与注意力分布进行加权求和得到attention值。从上述过程可看出,注意力机制的核心是计算出注意力分布,它表示了输入中各个数据对当前查询值的“贡献”,也就实现了对于不同的输出目标(即查询),可得到不同的注意区域。

 

2. 软注意力机制

       卷积操作的大致步骤是与feature map通道数相同的卷积核与feature map中大小为kernel size的待卷积区域进行对应通道的点积,然后再将求平均得到通道数为1的卷积结果,可以看出,卷积结果既有听一通道上的空间信息,又有不同通道之间的信息的融合。

  •  空间域:普通卷积网络中用max pooling或average pooling操作进行数据压缩,但这种方法太暴力,直接将信息合并会导致关键信息无法识别出来,因此空间域方法将空间信息进行变换保留。(这篇文章https://blog.csdn.net/zfnice/article/details/94998471中提到了spatial transformer作为一种典型的空间域注意力结构,但没看懂)。

                         注意力机制小结_第1张图片

       上图为CBAM中的空间注意力部分,简单来讲就是将特征图忽略了通道信息。首先将维度为[c,h,w]的特征图分别经过maxpool和avgpool得到[1,h,w,]的特征图,再将二者连接,得到shape=[2,h,w]的特征图,再经过卷积和激活函数得到Spatial Attention值(注意力分布)。该值与输入特征图相乘即得到空间注意力值。

 

  • 通道域:对应地,通道域方法目的是将通道信息进行变换保留。对每个通道内的信息直接进行全局平均池化,而忽略每一个通道的局部信息。典型的如SENet。

                        注意力机制小结_第2张图片

         上图是CBAM中的通道注意力模块,分别得到shape=[c,h,w]的feature map每个通道特征图的最大值和平均值,维度都为[c,1,1],再经过相同的多层感知机之后连接,经过激活函数得到Channel Attention,再与feature相乘得到通道注意力值。SENet结构相似。

  • 混合域:顾名思义就是将上述两种注意力机制混合,典型结构BAM和CBAM,CBAM的spatial attention和channel attention模块分别如上,整体结构如下。

                          注意力机制小结_第3张图片

3. 自注意力机制

       借用Seq2Seq结构理解,硬注意力和软注意力机制都是得到输入sequence对输出sequence中某个单词的注意力分布,自注意力机制是得到输入或者输出sequence中各个单词之间的注意力分布,可以抽取到同一个句子内间隔较远的单词之间的联系,比如句法特征。在图像领域,自注意力机制会学习某一像素点和其他所有位置(包括较远位置)的像素点之间的关系,即捕获long-range的关系。

       注意力机制小结_第4张图片

       上图显示了self-attention GAN中的自注意力机制结构。Feature map先经过三个1×1卷积(f、g、h)得到三个特征图,分别对应自注意机制中的query、key和value(相关概念见第一篇博客),query和key相乘得到的即为attention分布,表示了其他像素点对某个查询像素点的影响。再乘上value矩阵即得到注意力值。

 

 

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