Attention!神经网络中的注意机制到底是什么?

2017 年 10 月 16 日 量子位 专注报道AI
原作:Adam Kosiorek
安妮 编译自 GitHub
量子位 出品 | 公众号 QbitAI

神经网络的注意机制(Attention Mechanisms)已经引起了广泛关注。在这篇文章中,我将尝试找到不同机制的共同点和用例,讲解两种soft visual attention的原理和实现。

什么是attention?

通俗地说,神经网络注意机制是具备能专注于其输入(或特征)的神经网络,它能选择特定的输入。我们将输入设为x∈Rd,特征向量为z∈Rk,a∈[0,1]k为注意向量,fφ(x)为注意网络。一般来说,attention的实现方式为:

a=fφ(x)

或za=a⊙z

在上面的等式[1]中,⊙代表对应按元素(element-wise)相乘的运算。在这里我们引入soft attention和hard attention的概念,前者是指相乘时(soft)mask of values在0到1,而后者表示mask of values被强制分为0或1两种,也就是a∈{0,1}k。对于后者来说,我们能用hard attention掩饰指数特征向量:za=z[a]。这就增加了它的维度。

为了理解attention的重要性,我们需要考虑神经网络的本质——它是一个函数逼近器。依赖它的架构,它可以近似不同类型函数。神经网络一般被应用在链矩阵乘法和对应元素的架构中,在这些地方输入或特征向量仅在加法时相互作用。

注意机制可以用来计算可被用于特征相乘的mask,这种操作让神经网络逼近的函数空间大大扩展,使全新的用例成为可能。

Visual Attention

注意力可被应用在各种类型的输入,而无需考虑它们的形状。在像图像这种矩阵值输入的情况下,我们引入了视觉注意力这个概念。定义图像为I∈RH*W,g∈Rh*w为glimpse,也就是将注意机制应用于图像。

Hard Attention

图像中的Hard Attentention 已经被应用很长时间了,比如图像裁剪。它的概念很简单,只需要编入索引(indexing)。Hard attention可在Python和TensorFlow中实现为:

上面这个形式的唯一问题是它是不可微分的,如果想了解模型的参数,则必须使用score-function estimator之类的帮助。

Soft Attention

在Attention最简单的变体中,soft attention对图像来说和公式[1]中实现的向量值特征没什么不同。论文《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》记录了它的早期应用。

论文地址:

https://arxiv.org/abs/1502.03044

这个模型学习图像特定的部分,同时生成描述该部分的语言。

然而,soft atttention用于计算有些不经济。输入中被遮蔽的部分对结果没有影响,但仍然需要进行运算。同时它也过参数化了,实现attention的Sigmoid激活函数是对彼此独立的。它可以一次选择多个目标,但在实践中,我们通常想有选择性地关注场景中一个或几个元素。

下面,我将分别由DRAW和Spatial Transformer Networks切入,介绍两种机制解决上述问题。它们还可以调整输入的大小,从而进一步提高性能。

DRAW介绍论文地址:

https://arxiv.org/abs/1502.04623

Spatial Transformer Networks介绍论文地址:

https://arxiv.org/abs/1506.02025

Gaussian Attention

Gaussian attention是用参数化的一维高斯滤波器创建一张图像大小的注意力地图。定义ay=Rh,ax=Rw为注意力向量,attention mask可被写成:

在上图中,顶行表示ax,最右列表示ay,中间的矩形表示a。为了让结果可视化,向量中只包含了0和1。在实践中,它们可以被一维高斯函数向量实现。一般来说,高斯函数的数目等同于空间维度,每一个向量都被三个参数表示:第一个高斯μ的中心,连续分布高斯中心之间的距离,高斯分布的标准差σ。有了这些参数变量,注意力和glimps都变得可微了,学习的难度也降低了不少。

因为上面这个例子只能选择一部分图像,剩余图像都需要被清理掉,因此用attention也显得有些不划算。如果我们不直接用向量,进而选择将它们分别形成矩阵Ay∈Rh*HAxRw*W,可能会好些。

现在,每个矩阵的每一行都有一个Gaussian,并且参数d指定了连续行中高斯分布中心的特定距离。glimpse可以被表示为:

我将这个机制用在最近一篇对象跟踪的RNN attention的论文中,这篇是关于HART(Hierarchical Attentive Recurrent Tracking)的。

论文地址:

https://arxiv.org/abs/1706.09262

这里有一个例子,左边是输入图像,右边是attention,显示了绿色的主图像上的方框。

下面这串代码可以让你在TensorFlow中为小批量样例创建上述矩阵值mask。如果你想创建Ay,你可以称它为Ay = gaussian_mask(u, s, d, h, H),其中u,s,d分别表示μ,σ和d,在这个方式中以像素的方式指定。

我们也可以编写一个函数来直接从图像中提取一个图像:

Spatial Transformer

Spatial Transformer(STN)允许更一般转换,能区分图像裁剪。图像裁剪也是可能的用例之一,它由两个组件组成,网格生成器和采样器。网格生成器要指定从中取样的点网格,而采样器是样本。在DeepMind最近的神经网络库Sonnet中,用TensorFlow实现非常简单。

Gaunssian Attention vs. Spatial Transformer

Gaunssian Attention和Spatial Transformer实现的行为很相似,我们怎样判断选择哪一种实现方式呢?这里列举了一些细微差别:

Gaussian attention是一种超参数化的裁剪机制,它需要6个参数,但只有4个自由度(y,x,高度和宽度)。STN只需要四个参数。

目前我还没有运行任何测试,但是STN应该更快一些。它依赖于抽样点的线性插值,而Gaussian attention则需要执行两个矩阵乘法。

Gaussian attention应该更容易训练。这是因为,结果glimpse中每一个像素都可以是源图像相对较大像素块的凸组合,这使查找错因变得更加容易。另一方面,STN依赖于线性插值,在每个采样点处的梯度只在最接近的两个像素点处不为零。

结论

注意机制扩展了神经网络的功能,能近似更复杂的函数。或者用更直观的术语来说,它能够专注于输入的特定部分,提高了自然语言基准测试的性能,也带来了全新的功能,如图像字幕、内存网络中地址和神经程序。

我认为,attention最重要的应用案例尚未被发现。举个例子,我们知道视频中的对象是一致和连贯的,它们不会在帧与帧中突然消失。注意机制可以用来表示这种一致性。至于它的后续发展如何,我会持续关注。

加入社群

量子位AI社群10群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot3入群;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进群请加小助手微信号qbitbot3,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI

վ'ᴗ' ի 追踪AI技术和产品新动态


登录查看更多
2

相关内容

Attention机制最早是在视觉图像领域提出来的,但是真正火起来应该算是google mind团队的这篇论文《Recurrent Models of Visual Attention》[14],他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》 [1]中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是是第一个提出attention机制应用到NLP领域中。接着类似的基于attention机制的RNN模型扩展开始应用到各种NLP任务中。最近,如何在CNN中使用attention机制也成为了大家的研究热点。下图表示了attention研究进展的大概趋势。
麻省理工学院MIT-ICLR2020《神经网络能推断出什么?》
专知会员服务
50+阅读 · 2020年2月19日
专知会员服务
25+阅读 · 2020年2月15日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
注意力机制介绍,Attention Mechanism
专知会员服务
166+阅读 · 2019年10月13日
胶囊网络,是什么?
人工智能头条
32+阅读 · 2019年1月2日
从Seq2seq到Attention模型到Self Attention(二)
量化投资与机器学习
22+阅读 · 2018年10月9日
入门 | 什么是自注意力机制?
机器之心
17+阅读 · 2018年8月19日
理解神经网络的激活函数
论智
7+阅读 · 2018年1月8日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
TensorFlow seq2seq中的Attention机制(续)
深度学习每日摘要
15+阅读 · 2017年11月16日
神经网络中的「注意力」是什么?怎么用?
北京思腾合力科技有限公司
17+阅读 · 2017年10月28日
Talking-Heads Attention
Arxiv
15+阅读 · 2020年3月5日
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Arxiv
4+阅读 · 2018年10月31日
Arxiv
3+阅读 · 2018年4月18日
Arxiv
26+阅读 · 2017年12月6日
VIP会员
相关VIP内容
麻省理工学院MIT-ICLR2020《神经网络能推断出什么?》
专知会员服务
50+阅读 · 2020年2月19日
专知会员服务
25+阅读 · 2020年2月15日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
注意力机制介绍,Attention Mechanism
专知会员服务
166+阅读 · 2019年10月13日
相关资讯
胶囊网络,是什么?
人工智能头条
32+阅读 · 2019年1月2日
从Seq2seq到Attention模型到Self Attention(二)
量化投资与机器学习
22+阅读 · 2018年10月9日
入门 | 什么是自注意力机制?
机器之心
17+阅读 · 2018年8月19日
理解神经网络的激活函数
论智
7+阅读 · 2018年1月8日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
TensorFlow seq2seq中的Attention机制(续)
深度学习每日摘要
15+阅读 · 2017年11月16日
神经网络中的「注意力」是什么?怎么用?
北京思腾合力科技有限公司
17+阅读 · 2017年10月28日
相关论文
Talking-Heads Attention
Arxiv
15+阅读 · 2020年3月5日
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Arxiv
4+阅读 · 2018年10月31日
Arxiv
3+阅读 · 2018年4月18日
Arxiv
26+阅读 · 2017年12月6日
Top
微信扫码咨询专知VIP会员