计算机视觉 self attention机制
机器翻译中的 self attention机制
直观例子
先来看一个翻译的例子“I arrived at the bank after crossing the river” 这里面的bank指的是银行还是河岸呢,这就需要我们联系上下文,当我们看到river之后就应该知道这里bank很大概率指的是河岸。在RNN中我们就需要一步步的顺序处理从bank到river的所有词语,而当它们相距较远时RNN的效果常常较差,且由于其顺序性处理效率也较低。Self-Attention则利用了Attention机制,计算每个单词与其他所有单词之间的关联,在这句话里,当翻译bank一词时,river一词就有较高的Attention score。
self attention 详解
其基本结构如下
显然,当前单词与其自身的attention score一般最大,其他单词根据与当前单词重要程度有相应的score。然后我们在用这些attention score与value vector相乘,得到加权的向量。
如果将输入的所有向量合并为矩阵形式,则所有query, key, value向量也可以合并为矩阵形式表示
以上是机器翻译中所使用的self attention 机制,计算机视觉所使用的self attention 机制思想与之类似,是为了捕捉远距离的像素之间的关系。
计算机视觉中的self attention 的应用
先来看一个例子,将attention 加权在原图上
图1 Spatial Attention和Appearance Attention
《Hierarchical Attentive Recurrent Tracking》结合Attention机制和LSTM循环结构提出了一个目标跟踪的方法HART。图1展示了Attention应用的效果,HART主要定义了两个Attention概念,Spatial attention和Appearance attention。输入一张图片如图1上半部分,Spatial attention用于获取图片中物体的位置,获取结果如图1(a), 然后应用Appearance attention进一步分析物体外观特征从而去除图1(a)中的少量背景信息,从而获得了图1©,这样可以更精确地学习到物体的位置和外观特征。
我们可以发现卷积本身就有Attention的效果,比如,在分类网络中高层的feature map所**的pixel恰好集中在与分类任务相关的区域。
然而CNN中的 convolution单元每次只关注邻域 kernel size 的区域,就算后期感受野越来越大,终究还是局部区域的运算,这样就忽略了全局其他片区(比如很远的像素)对当前区域的贡献。
由此在cv领域,一篇关于Attention研究非常重要的文章《Non-local Neural Networks》在捕捉长距离特征之间依赖关系的基础上提出了一种非局部信息统计的注意力机制——Self Attention。
参考:
https://zhuanlan.zhihu.com/p/44031466
https://zhuanlan.zhihu.com/p/53155423