Attention 注意力机制

网上的文章总把 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 的计算方法是一个简单的线性变换,不考虑过程中使用的激活函数)。

只使用全连接:

1
y=w*x+b

使用 z 给 x 加权

1
y=x*(zw+b)=x*z*w+x*b

使用 attention

1
2
3
y=xa
a=(x+z)*w+b
y=x*((x+z)*w+b)=x*x*w+x*z*w+x*b

从上面公式可以看出一阶和二阶的差异,且加入了条件 z。