正文
视觉注意力
注意力可以应用于任何类型的输入而不管其形状如何。在矩阵值输入(如图片)的情况下,我们可以谈论视觉注意力。不管是I∈R^H×W图像还是g∈R^ h×w注意力的一角都可以说是将注意力机制运用于图像的结果。
硬注意力(Hard Attention)
硬注意力在图像中的应用已经被人们熟知多年:图像裁剪(image cropping)。从概念上来看是非常简单的,因为它只需要索引。硬注意力可以用Python(或Tensorflow)实现为:
g = I[y:y+h, x:x+w]
上述存在的唯一的问题是它是不可微分的;你如果想要学习模型参数的话,就必须使用分数评估器(score-function estimator)关于这一点,我的
前一篇文章
中有对其的简要介绍。
软注意力
软注意力,在其最简单的变体中,对于图像与和向量值来说没有什么不同,并在等式1中得到了完全实现。这种类型的注意力的最早的用途之一是来自于一篇叫做《Show, Attend and Tell》(
https://arxiv.org/abs/1502.03044
)的论文:
该模型学习趋向于该图像的特定部分,同时生成描述该部分的单词。
然而,这种类型的软注意力在计算上是非常浪费的。输入的黑色部分对结果没有任何影响,但仍然需要处理。同时它也是过度参数化的:实现注意力的sigmoid 激活函数是彼此相互独立的。它可以一次选择多个目标,但实际操作中,我们经常希望具有选择性,并且只能关注场景中的一个单一元素。由
DRAW
和
空间变换网络
(Spatial Transformer Networks)引入的以下两种机制很好地别解决了这个问题。它们也可以调整输入的大小,从而进一步提高性能。
高斯注意力(Gaussian Attention)
高斯注意力通过利用参数化的一维高斯滤波器来创建图像大小的注意力图。使 a y ∈R^h和a x ∈R^w是注意向量,它们分别指定在yy和xx轴中应该出现哪一部分图像。注意力掩码可以创建为:
在上图中,顶行显示ax,右边的列显示ay,中间的矩形显示结果a。这里,为了可视化的目的,向量只包含0和1。实际上,它们可以被实现为一维高斯的向量。通常,高斯数等于空间维度,每个向量由三个参数参数化:第一个高斯 μ的中心、连续高斯d的中心距离和高斯标准偏差 σ。通过这个参数,注意力和 glimpse在注意力参数方面是可以区分的,因此很容易学习。