计算机视觉中的自注意力
首先简单回顾下卷积神经网络 (Convolutional Neural Networks, CNN) 的要点:CNN 主要由卷积层组成。对于卷积核大小为 3×3 的卷积层,它仅查看输入激活中的 3×3 = 9 个特征(也可以将此区域称为卷积核的感受野)以计算每个输出特征,它并不会查看超出此范围的像素。为了捕获超出此范围的像素,我们可以将核大小略微增加到 5×5 或 7×7,但与特征图大小相比感受野仍然很小。
我们必须增加网络的深度,以使卷积核的感受野足够大以捕获我们想要的内容。与RNN一样,输入特征的相对重要性随着我们在网络层中的移动而下降。因此,我们可以利用自注意力来观察特征图中的每个像素,并注意力集中在更加重要的像素上。
现在,我们将研究自注意力机制的工作原理。自注意力的第一步是将每个输入特征投影到三个向量中,这些向量称为键 (key),查询 (query) 和值 (value),虽然这些术语在计算机视觉中较少出现,但是首先介绍有关这些术语的知识,以便可以更好地理解自注意力,Transformer或NLP有关的文献:
-
值 (value) 表示输入特征。我们不希望自注意力模块查看每个像素,因为这在计算上过于昂贵且不必要。相反,我们对输入激活的局部区域更感兴趣。因此,值在激活图尺寸(例如,它可以被下采样以具有较小的高度和宽度)和通道的数目方面都减小了来自输入特征的维数。 对于卷积层激活,通过使用1x1卷积来减少通道数,并通过最大池化或平均池化来减小空间大小。
-
键和查询 (Keys and queries) 用于计算自注意图中特征的重要性。为了计算位置 x x x 处的输出特征,我们在位置 x x x 处进行查询,并将其与所有位置处的键进行比较。
为了进一步说明这一点,假设我们有一个肖像画,当网络处理肖像的一只眼睛时,它将首先进行查询,该查询具有“眼睛”的语义含义,并使用肖像的其他区域的键进行检查。如果其他区域的键之一是眼睛,那么网络知道其找到了另一只眼睛,这就是网络要注意的区域,以便网络可以进一步的处理。

本文介绍了自注意力机制在计算机视觉中的应用,探讨了卷积神经网络的局限性,并详细解释了自注意力如何捕获特征图中更重要的像素。通过查询、键和值的概念,阐述了自注意力的工作原理,以及在TensorFlow中实现自注意力模块的方法,包括使用SpectralNorm约束的1×1卷积。此外,还分享了作者的个人学习和工作经验。
最低0.47元/天 解锁文章
1300

被折叠的 条评论
为什么被折叠?



