主页 > 热点观察 > 正文

神经网络中的「注意力」是什么?怎么用?这里有一篇详解

来源:新闻网作者:渠道发布时间:2018-01-01 12:14

「雷克世界」编译:嗯~阿童木呀、多啦A亮


「机器人圈」正式更名为「雷克世界」,后台回复「雷克世界」查看更多详情。


神经网络中的注意力机制(Attention mechanisms),也被称为“神经注意力”或“注意力”,最近吸引了广泛的注意力(双关语)。而在接下来的这篇文章中,我将描述和实现两种软视觉注意力机制。


什么是注意力(attention)


一种非正式的说法是,神经注意力机制可以使得神经网络具备专注于其输入(或特征)子集的能力:选择特定的输入。这可以是x∈R^d一个输入,z∈R^k一个特征向量,a∈[0,1]^k一个注意力向量或f ϕ (x) 注意力网络。通常来说,注意力为

 


其中⊙是指元素对应乘法(element-wise multiplication)。下面我们可以谈论一下软注意力(soft attention),它将特征与一个值在0和1之间的掩码或当这些值被限定为0或1时的硬注意力(hard attention)相乘,即a∈{0,1}^k。在后一种情况下,我们可以使用硬注意力掩码直接索引特征向量:za =z[a](用Matlab表示法),可以改变其维度。


如果你想要弄明白为什么注意力机制如此至关重要,那我们就有必要思考一下一个神经网络的真正意义是什么:函数近似器。它的能够近似不同类别函数的能力主要依赖于它的架构。一个典型的神经网络可以被实现为一系列矩阵乘法(matrix multiplications)和元素对应非线性乘法(element-wise non-linearities),其中输入或特征向量的元素仅仅通过加法相互作用。


注意力机制会对一个用于与特征相乘的掩码后进行计算,这种看似简单的额扩展具有深远的影响:突然间,一个可以通过神经网络进行很好的近似的函数空间得到了极大的扩展,使得全新的用例成为可能。为什么会出现这种情况呢?直觉认为是以下原因,虽然没有足够的证据:这种理论认为神经网络是一个通用函数近似器,可以对任意函数进行近似为任意精度,但只能在无限数量的隐藏单位限定条件下进行。而在任何实际情况下,情况并非如此:我们受限于可以使用的隐藏单位的数量。考虑以下示例:我们要对N个输入的结果进行近似,前馈神经网络只能通过模拟具有许多加法(以及非线性)的乘法来实现,因此需要大量神经网络的实际空间。但如果我们引入乘法交互的理念,过程就会自然而然的变得简单而有便捷。 


上述将注意力定义乘法交互(multiplicative interactions)的做法使得我们如果想要放松对注意力掩码值的约束且a∈R^k,可以考虑一种更为广泛的类模型。例如,动态过滤网络(DFN)使用的是一个过滤器生成网络,它是基于输入来计算过滤器(或任意大小的权重),并将其应用于特征,这实际上是一种乘法交互。与软注意力机制的唯一区别就是,注意力权重值没有被限制在0和1之间。想要在这个方向上进行进一步研究,那么去了解哪些交互作用是相加的,哪些是相乘的,探讨加法和乘法神经元之间的可微分转换的概念这都将是非常有趣的。一个非常优秀的博客distill blog上面提供了一个很好的关于软注意力机制的阐述,大家不妨去看一看。


视觉注意力


注意力可以应用于任何类型的输入而不管其形状如何。在矩阵值输入(如图片)的情况下,我们可以谈论视觉注意力。不管是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)的论文:

 


该模型学习趋向于该图像的特定部分,同时生成描述该部分的单词。


文章地址:http://www.sdjgj.gov.cn/redianguancha/2018010137434.html