网上的文章总把Attention注意力机制和Transformer模型结合来讲,看起来非常复杂。实际上Attention不仅作用于自然语言处理领域,目前已是很通用的技术。本篇来看看Attention的原理,以及在各个领域的典型应用。
原理
越来越多的模型用到注意力机制,它已成为与全连接,卷积,循环网络同等重要的技术。简单地说,当人观察图片时,一般先扫一眼,确定大概信息,然后聚焦在图中的重要区域,这个区域可能是某个物体,某种显著的特点,或者人脸等等。
机器视觉,自然语言模型,跨模态模型都越来越多地使用到注意力技术。其核心是通过当前数据决定更关注哪一部分数据,给数据加权。
那么,同样是给特征加权,注意力和普通的全连接网络到底有何差异?主要差异在于是否与位置相关。全连接网络与位置强相关(比如下图中W11描述了x1到y1的映射关系,如果特征x1改变了位置,结果就会不同)。
在使用Attention的过程中,我们希望聚焦于图中的动词,不管它出现在句中什么位置,希望聚焦于图中的人脸,而不管脸在图中的位置以及有几张脸……Attention计算出的也是权重,而这个权重可能是根据x1,x2,x3以及其它特征计算出来的。如:
此时的w不再是一个具体的权重值,而是根据x1的特征计算出来的是否需要更关注x1,比如当x1是人脸时,w1=f(x1)值较大,则给x1区域更大的权重。
上例是比较简单的情况,w1不仅可以使用x1的内容计算权重,还可以使用上下文数据(如在自然语言处理中使用附近的词计算某词权重,图片处理中使用周边内容给某区域加权),以及使用附加数据(如使用文字给图片某一区域加权,在翻译任务中在原文与译文之间通过注意力对齐)。
Attention与门控非常类似,比如LSTM中的输入门,输出门,遗忘门,都是利用当前时间步的输入x与之前激活层的状态,通过模型参数w,b以及sigmoid激活函数计算权重,用于确定对之前状态的遗忘,对当前输入的接纳,以及是否输出。与Attention一样,它们使用的都是数据加权的方法。
使用场景
全连接网络可视为一个空间到另一空间的映射,它倾向于保持全局,只加入形变,相对地一视同仁;而Attention更关注局部特征,近似于筛选器。下面介绍使用注意力的几种典型场景。
文字处理:划重点词
计算词之间的关系,划出重点词是Attention的一个重要应用,无论词在句中的任何位置都能将其识别出来。比如句中有五个词,分别计算每四个词对另一个词的贡献度,然后给该词加权。此时Attention的输入是所有词特征,输出是每个词的权重。
图片处理:重点区域
图片注意力与文字注意力类似,通过图片各区域特征之间的关系,给某一区域,或某一通道加权也可以提升模型效果。图像处理中主要使用两种Attention,空间注意力和通道注意力。
图文结合:用文字加强图片
用文字给图片加权,比如可从网店下载商品图片和简单描述,通过文字描述,如“一字领”、“蕾丝花边”重点关注图片中某个区域,使图像处理更有针对性。模型的输入是文字w和图像中的区域v,通过计算它们之间的关系f(w,v),给各个区域v加权。其中的f(w,v)一般使用全连接网络实现。
具体方法
Attention计算的权值大小f(x)是特征x的函数,而x中的数据(如图中小区域的内容)由于代入模型的实例不同,各有差异。重点是一定要把自己的值****x****代进去,用文字t加强图片x时,把文字t也代入f()函数的计算。如果用t加强x时只使用y=x*f(t),那么无论x是什么都进行同样的乘f(t)处理,忽略了x与t间的关系,这样就起不到加强局部的作用了。
下面看最简单的情况,x是输入,y是输出,z是用于修饰x的附加数据,a为attention值(假设attention的计算方法是一个简单的线性变换,不考虑过程中使用的激活函数)。
只使用全连接:
y=w*x+b
使用z给x加权
y=x*(zw+b)=x*z*w+x*b
使用attention
y=xa
a=(x+z)*w+b
y=x*((x+z)*w+b)=x*x*w+x*z*w+x*b
从上面公式可以看出一阶和二阶的差异,且加入了条件z。