简介
目前注意力模块有两大问题,一是他们只能沿着通道或者空间维度提取细化特征,限制了跨通道和空间注意力权重变化的灵活性。其次,他们的结构设计收到一系列复杂因素的影响,结构的选择需要花费大量时间。
本文中作者受到生物学上的神经科学理论启发,为卷积神经网络提出了一个简单高效的注意力模块。该注意力模块直接从当前神经元推断3D权重,即同时考虑空间维度和通道维度,然后依次改进这些神经元。为了有效的推断3D权重,本文定义了一个受神经科学启发的能量函数,推导出了一个封闭形式的解决方法。
该模块可以有效帮助网络捕获许多与图像标签有关的线索,而且这些解都是通过能量函数推导出来的,没有额外的模块。同时该模块还可以即插即用,保持灵活、高效、模块化。可以很容易的集成到现有的众所周知的网络中。
方法核心
现有的注意力方法,比如SE、ECA、SRM等都或多或少使用到全局平均汇聚层、全局最大汇聚层,这样相当于只在通道维度或者只在空间维度提取注意力,而使用3为空间,同时结合通道和空间提取注意力才是更好的。
计算机的注意力和人脑的基于通道和空间的注意力一一对应,但是人脑同时考虑通道和空间信息。在视觉神经科学中,信息量最大的神经元通常是表现出与周围神经元不同模式的神经元,活跃的神经元会抑制周围神经元的活动,所以应该为表现出明显空间抑制的神经元更大的权重。
为了找到这些神经元,最简单的办法就是测量目标神经元和其他神经元的线性可分性,于是作者为每个神经元定义了能量函数,t
代表目标神经元,xi
代表其他神经元,其中能量函数的值越小,表明它和其他神经元相似度越低,有更高的重要性,所以,当t=yt
,同时其他神经元xi=yo
时,能量函数值最小:
为了方便起见,将和定义为-1,1
二元标签,并加入正则化项后得到
如果使用随机梯度下降法,需要计算梯度,本式可以通过推导得到wt和bt的闭式解,其中
上式的结果实是单通道上获得的,假设一个通道中所有像素的独立同分布,于是可以计算所有神经元的均值和方差,使用所有神经元的均值代替目标神经元/其他神经元的均值,这样不用迭代计算每个位置的均值和方差,大幅度缩小计算量。这样e
表示最小能量,重要性可以通过1/e
来计算:
在得到了每个神经元的重要性分数之后,使用点积来计算注意力
# X: input feature [N, C, H, W]
# lambda: coefficient in Eqn (5)
def forward (X, lambda):
# spatial size
n = X.shape[2] * X.shape[3] - 1
# square of (t - u)
d = (X - X.mean(dim=[2,3])).pow(2)
# d.sum() / n is channel variance
v = d.sum(dim=[2,3]) / n
# E_inv groups all importance of X
E_inv = d / (4 * (v + lambda)) + 0.5
# return attended features
return X * sigmoid(E_inv)
总结
本文提出了一个新颖的注意力模块,他直接通过每个神经元的参数来计算神经元的重要性,并应用注意力,同时可以同时融合通道和空间的信息。经过实验表明,虽然没有引入额外的参数,但是精度和之前精心设计的架构相差无几。这样的计算方法比较透明,也容易理解。
不过该方法的问题就是,对网络的精度毫无改善,如果未来可以使用该方法改善精度的情况,那确实可以减少设计注意力模块所需要的时间。目前该方法对于以自注意力为核心的Transformer架构几乎没有作用,不知道能否拓展到自注意力机制当中。