历史
2014年google mind团队,在RNN模型上使用了attention机制来进行图像分类,然后取得了很好的性能。接着attention机制就被广泛应用在基于RNN/CNN等神经网络模型的各种NLP任务中去了,效果看样子是真的好,仿佛谁不用谁就一点都不fashion一样。
灵感
基本思想就是想让系统学会注意力——能够忽略无关信息而关注重点信息。
理解
就是一系列权重参数(attention value)罢了。
要从序列中学习到每一个元素的重要程度,然后按重要程度将元素合并。
上图其实可以描述出attention value的本质:它其实就是一个查询(query)到一系列键值(key-value)对的映射。
Attention是啥啊?不就是一个权重分布嘛,搞得玄乎其玄~
在计算机视觉中的attention
注意力是一种机制,或者方法论,并没有严格的数学定义。比如,传统的局部图像特征提取、显著性检测、滑动窗口方法等都可以看作一种注意力机制。在神经网络中,注意力模块通常是一个额外的神经网络,能够硬性选择输入的某些部分,或者给输入的不同部分分配不同的权重。
掩码(mask)
近几年来,深度学习与视觉注意力机制结合的研究工作,大多数是集中于使用掩码(mask)来形成注意力机制。掩码的原理在于通过另一层新的权重,将图片数据中关键的特征标识出来,通过学习训练,让深度神经网络学到每一张新图片中需要关注的区域,也就形成了注意力。
M(x)注意力掩码产生方式:
1、卷积神经网络自学习得到
2、传统算法生成掩码,如canny算子等
3、通过辅助子任务产生掩码,如分割结果
soft attention
[0,1]间连续分布问题,每个区域被关注的程度高低,用0~1的score
表示。
软注意力是可微的,这是一个非常重要的地方。可以微分的注意力就可以通过神经网络算出梯度并且前向传播和后向反馈来学习得到注意力的权重[6]。
hard attention
就是0/1问题
,哪些区域是被 attentioned,哪些区域不关注
强注意力是一个不可微的注意力,训练过程往往是通过增强学习(reinforcement learning)来完成的。
Self-attention
自注意力,就是 feature map 间的自主学习,分配权重(可以是 spatial,可以是 temporal,也可以是 channel间)