【深度学习】attention机制

attention机制

注意力机制:忽略无关信息而关注重点信息

软注意力(soft attention): 更关注区域或通道,学习完后直接可以通过网络生成。重要的是可微分的!
强注意力(hard attention): 更关注点,图像中的每个点都可能延伸出注意力,是一个随机的预测过程,强调动态变化,最关键的是不可微分的,训练过程中往往需要通过增强学习来完成。

1.self-attention机制

由于卷积核作用的感受野是局部的,要经过累积很多层之后才能把整个图像不同部分的区域关联起来。所以Hu等人提出SENet,从特征通道层面上统计图像的全局信息。

self- attention上从NLP中借鉴的思想,保留了Query、key和value等名称。下图是基本结构。

【深度学习】attention机制_第1张图片

self-attention结构自上而下分为三个分支:query、key和value,计算分成三步:

  1. 将query和每个key进行相似度计算得到权重,相似度函数有点积,拼接,感知机等
  2. 使用一个softmax函数对这些权重进行归一化
  3. 将权重和相应的键值value进行加权求和得到最后的attention

2.Non-local Neural network(非局部信息统计的注意力机制)

CNN在统计全局信息时存在的问题:

  • 捕获长范围特征依赖很多层网络,导致学习效率低
  • 由于网络需要累积很深,则设计模块和梯度时需要谨慎
  • 当需要在比较远的位置之间来回传递信息,卷积或时序局部操作很困难

Non-local 是借鉴了滤波中非局部均值滤波的思想,设计一个非局部操作算子。其通用公式如下:

y i = 1 C ( x ) ∑ j f ( x i , x j ) g ( x j ) y_i=\frac{1}{C(x)}\sum_j f(x_i,x_j)g(x_j) yi=C(x)1jf(xi,xj)g(xj)
其中,x是输入信号,CV中使用的一般是feature map,i 代表的是输出位置,如空间、时间或者时空的索引,他的响应应该对j进行枚举然后计算得到的,f 函数式计算i和j的相似度,g 函数计算feature map在j位置的表示,最终的y是通过响应因子C(x) 进行标准化处理以后得到的。

上述的思想,可以表示出:i代表当前位置的响应,j代表全局响应,通过加权得到一个非局部的响应值
Non-local block如下图。
【深度学习】attention机制_第2张图片

  1. 首先对输入的 feature map X 进行线性映射(用 111 卷积,来压缩通道数),然后得到 θ,φ,g 特征;
  2. 通过reshape操作,强行合并上述的三个特征除通道数外的维度,然后对θ和φ进行矩阵点乘操作,得到类似协方差矩阵的东西(这个过程很重要,计算出特征中的自相关性,即得到每帧中每个像素对其他所有帧所有像素的关系);
  3. 然后对自相关特征进行 Softmax 操作,得到0~1的weights,这里就是我们需要的 Self-attention 系数;
  4. 最后将 attention系数,对应乘回特征矩阵 g 中,然后再上扩展channel数(1*1卷积),与原输入 feature map,X 做残差运算,获得non-local block的输出。

你可能感兴趣的:(深度学习之基础知识,深度学习,人工智能,神经网络)