通俗易懂理解注意力机制(Attention Mechanism)
通俗易懂理解注意力机制(Attention Mechanism)
注意力机制是深度学习中的一个重要概念,广泛应用于自然语言处理、图像识别等领域。本文将从原理、计算过程、分类等多个维度,深入浅出地介绍这一机制,帮助读者理解其在人工智能领域的应用。
一、注意力机制(Attention Mechanism)
Attention模型可以看到全局的信息。
1. 通俗理解Attention
人在观察事物时会有选择性的关注较为重要的信息,称其为注意力。通过持续关注这一关键位置以获得更多的信息,而忽略其他的无用信息,这种视觉注意力机制大大提高了我们处理信息的效率和准确性。深度学习中的注意力机制和人类视觉的注意力机制类似,就是在更多信息中把注意力集中放在重要的点上,选出关键信息,而忽略其他不重要的信息。
上图形象化展示了人类在看到一副图像时如何高效分配有限的注意力资源。其中红色区域表明视觉系统更关注目标,很明显对于上图所示的场景,人们会把注意力更多投入到人的脸部,文本的标题以及文章首句等位置。
注意力机制的灵感来源可以归结到人对环境的生理感知,当人类看东西时,一般会将注意力注视着某个地方,而不会关注全部所有信息。比如,视觉系统更倾向于挑选影像中的部分信息进行集中分析,忽略图像中无关的信息。再比如,当我们看到下面这张猫的图片时,主要会将目光停留在猫的脸部,以及注意猫的躯干,而后面的草地则会被当成背景忽略,这说明我们在每一处空间位置上的注意力分布不一样。
通过这种方式,人类在需要重点关注的目标区域,会投入更多的注意力资源,以获取更多的细节信息,而抑制其他区域信息。这样使人类能够利用有限的注意力资源从大量信息中快速获取高价值的信息,极大地提升了大脑处理信息的效率。
2. 注意力机制的原理
注意力机制(Attention Mechanism)是机器学习中的一种数据处理方法,广泛应用在自然语言处理、图像识别以及语音识别等各种不同类型的机器学习任务中。注意力机制对不同信息的关注程度(重要程度)由权值来体现,注意力机制可以视为查询矩阵(Query)、键(key)以及加权平均值构成了多层感知机(Multilayer Perceptron, MLP)。
注意力的思想,类似于寻址。给定Target中的某个元素Query,通过计算Query和各个Key的相似性或相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到最终的Attention数值。所以,本质上Attention机制是Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。
Source:由一系列的<Key, Value>键值对构成。
Query:给定的Target元素;
Key:Source中元素的Key值;
Value:Source中元素的Value值;
权重系数:Query与key的相似性或相关性,权重系数S i m i l a r i t y ( Q u e r y , K e y i ) Similarity(Query, Key_i)Similarity(Query,Keyi );
Attention Value:对Value值进行加权求和;
根据注意力机制的原理可知,其计算公式如下:
A t t e n t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 L x S i m i l a r i t y ( Q u e r y , K e y i ) ∗ V a l u e i Attention(Query, Source) = \sum_{i=1}^{L_x}Similarity(Query, Key_i)*Value_iAttention(Query,Source)=i=1∑Lx Similarity(Query,Keyi )∗Valuei
其中,L x = ∣ ∣ S o u r c e ∣ ∣ L_x=||Source||Lx =∣∣Source∣∣,表示Source的长度。
Attention从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体现在权重系数的计算上,权重越大,越聚焦在对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。
3. 注意力机制的计算过程
大多数方法采用的注意力机制计算过程可以细化为如下三个阶段。
三阶段的注意力机制计算流程:
- 第一阶段,计算 Query和不同 Key 的相关性,即计算不同 Value 值的权重系数;
- 第二阶段,对上一阶段的输出进行归一化处理,将数值的范围映射到 0 和 1 之间。
- 第三阶段,根据权重系数对Value进行加权求和,从而得到最终的注意力数值。
3.1 第一阶段
计算 Query和不同 Key 的相似性或者相关性,即计算不同 Value 值的权重系数。
计算两者相似性或者相关性常用方法:
- 点积:S i m i l a r i t y ( Q u e r y , K e y i ) = Q u e r y ∗ K e y i Similarity(Query, Key_i) = Query*Key_iSimilarity(Query,Keyi )=Query∗Keyi
- Cosin相似性:S i m i l a r i t y ( Q u e r y , K e y i ) = Q u e r y ∗ K e y i ∣ ∣ Q u e r y ∣ ∣ ∗ ∣ ∣ K e y i ∣ ∣ Similarity(Query, Key_i) = \frac{QueryKey_i}{||Query||||Key_i||}Similarity(Query,Keyi )=∣∣Query∣∣∗∣∣Keyi ∣∣Query∗Keyi
- MLP网络:S i m i l a r i t y ( Q u e r y , K e y i ) = M L P ( Q u e r y , K e y i ) Similarity(Query, Key_i) = MLP(Query, Key_i)Similarity(Query,Keyi )=MLP(Query,Keyi )
3.2 第二阶段
对第一阶段得到的原始权重进行归一化处理,将数值的范围映射到 0 和 1 之间。
根据产生方法的不同,第一阶段产生的分值的取值范围也不一样,第二阶段引入类似SoftMax的计算方式对第一阶段的得分就行数值转换。一方面,可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面,通过SoftMax的内在机制更加突出重要元素的权重。即一般采用如下公式:
a i = S o f t m a x ( S i m i ) = e S i m i ∑ j = 1 L x e S i m j a_i = Softmax(Sim_i) = \frac{e^{Sim_i}}{\sum_{j=1}^{L_x}e^{Sim_j}}ai =Softmax(Simi )=∑j=1Lx eSimj eSimi
3.3 第三阶段
根据权重系数对Value进行加权求和,从而得到最终的注意力数值:
A t t e n t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 L x a i ∗ V a l u e i Attention(Query, Source) = \sum_{i=1}^{L_x}a_i*Value_iAttention(Query,Source)=i=1∑Lx ai ∗Valuei
4. 注意力机制的分类
4.1 按Attention的可微性分类
视觉注意力机制 | Non-local模块与Self-attention的之间的关系与区别?
4.1.1 硬注意力机制(
Hard-Attention
)
- 硬注意力更加关注点,也就是图像中的每个点都可能延伸出注意力。同时,硬注意力是一个随机的预测过程,更强调动态变化。硬注意力是一个不可微的注意力,训练过程往往是通过增强学习(
reinforcement learning
) 来完成。 - 硬注意力是0/1问题,某个区域要么被关注,要么不关注,这是一个不可微的注意力。
4.1.2 软注意力机制(
Soft-Attention
)
- 软注意力更加关注区域或者通道,软注意力是确定性的注意力,学习完成后可以直接通过网络生成,最关键的地方是软注意力是可微的。可微的注意力可以通过神经网络计算梯度,通过前向传播和后向反馈来学习得到注意力的权重。
- 软注意力是[0,1]间连续分布问题,用0到1的不同分值表示每个区域被关注的程度高低。
- 在CV领域中,很多相关工作(例如,分类、检测、分割、生成模型、视频处理等)都在使用软注意力,这些工作也衍生了很多不同的软注意力使用方法。这些方法共同的部分,都是利用相关特征学习权重分布,再用学出来的权重施加在特征之上,进一步提取相关知识。
- 软注意力施加权重的方法:
- 加权可以作用在原图上;
- 加权可以作用在空间维度上,给不同区域加权;
- 加权可以作用在channel维度上,给不同通道特征加权;
- 加权可以作用在不同时刻历史特征上,结合循环结构添加权重。例如,机器翻译,或者视频相关的工作。
4.2 按注意力的关注域分类
4.2.1 空间域(
spatial domain
)
首先将通道本身进行降维,分别获取
MaxPool
和
AvgPool
的结果,然后拼接(
concat
),再使用一个卷积层进行学习。
4.2.2 通道域(channel domain)
分别获取
MaxPool
和
AvgPool
的结果,然后经过几个MLP层获得变换结果,最后分别应用于两个通道,使用Sigmoid函数得到通道的Attention结果。
4.2.3 其他域
- 层域(layer domain)
- 混合域(mixed domain)
- 时间域(time domain)
5. 基于
Encoder-Decoder
的注意力机制
人类视觉注意力机制,在处理信息时注意力的分布是不一样的。而
Encoder-Decoder
框架将输入X都编码转化为语义表示C,这样会导致所有输入的处理权重都一样,没有体现出注意力集中。因此,也可看成是“分心模型”。
为了能体现注意力机制,将语义表示C进行扩展,用不同的C来表示不同注意力的集中程度,每个C的权重不一样。扩展后的
Encoder-Decoder
框架变为:
下面通过一个英文翻译成中文的例子说明“注意力模型”:
例如,输入的英文句子是:
Tom chase Jerry
,目标的翻译结果是:”汤姆追逐杰瑞”。那么在语言翻译中,Tom,chase,Jerry这三个词对翻译结果的影响程度是不同的。其中,Tom是主语,Jerry是宾语,是两个人名,chase是谓语,是动词,这三个词的影响程度大小顺序分别是Jerry>Tom>chase,例如(Tom,0.3),(chase,0.2),(Jerry,0.5)。不同的影响程度代表模型在翻译时分配给不同单词的注意力大小,即分配的概率大小。
生成目标句子单词的过程,计算形式如下:
y 1 = f 1 ( C 1 ) y 2 = f 1 ( C 2 , y 1 ) y 3 = f 1 ( C 3 , y 1 , y 2 ) y_1 = f_1(C_1) \ y_2 = f_1(C_2, y_1) \ y_3 = f_1(C_3,y_1, y_2)y1 =f1 (C1 )y2 =f1 (C2 ,y1 )y3 =f1 (C3 ,y1 ,y2 )
其中,f1是
Decoder
的非线性变换函数。每个C i C_iCi 对应不同单词的注意力分配概率分布,计算形式如:
C 汤姆 = g ( 0.6 ∗ f 2 ( " T o m " ) , 0.2 ∗ f 2 ( " c h a s e " ) , 0.2 ∗ f 2 ( " J e r r y " ) ) C 追逐 = g ( 0.2 ∗ f 2 ( " T o m " ) , 0.7 ∗ f 2 ( " c h a s e " ) , 0.1 ∗ f 2 ( " J e r r y " ) ) C 杰瑞 = g ( 0.3 ∗ f 2 ( " T o m " ) , 0.2 ∗ f 2 ( " c h a s e " ) , 0.5 ∗ f 2 ( " J e r r y " ) ) C_{汤姆} = g(0.6f_2("Tom"), 0.2f_2("chase"), 0.2f_2("Jerry")) \ C_{追逐} = g(0.2f_2("Tom"), 0.7f_2("chase"), 0.1f_2("Jerry")) \ C_{杰瑞} = g(0.3f_2("Tom"), 0.2f_2("chase"), 0.5*f_2("Jerry"))C汤姆 =g(0.6∗f2 ("Tom"),0.2∗f2 ("chase"),0.2∗f2 ("Jerry"))C追逐 =g(0.2∗f2 ("Tom"),0.7∗f2 ("chase"),0.1∗f2 ("Jerry"))C杰瑞 =g(0.3∗f2 ("Tom"),0.2∗f2 ("chase"),0.5∗f2 ("Jerry"))
其中f2函数表示
Encoder
节点中对输入英文单词的转换函数,g函数表示
Encoder
合成整个句子中间语义表示的变换函数,一般采用加权求和的方式,如下式:
c i = ∑ j = 1 T x a i j h j c_i = \sum_{j=1}^{T_x}{a_{ij}h_j}ci =j=1∑Tx aij hj
其中,a i j a_{ij}aij 表示权重,h j h_jhj 表示
Encoder
的转换函数,即
h1 = f2("Tom"), h2 = f2("chase"), h3 = f2("Jerry")
,T x T_xTx 表示输入句子的长度。
当i是“汤姆”时,则注意力模型权重a i j a_{ij}aij 分别是0.6,0.2,0.2。那么这个权重是如何得到的呢?a i j a_{ij}aij 可以看做是一个概率,反映了h j h_jhj 对c i c_ici 的重要性,可使用softmax来表示:
a i j = e x p ( e i j ) ∑ k = 1 L e x p ( e i k ) a_{ij} = \frac{exp(e_{ij})}{\sum_{k=1}^{L}{exp(e_{ik})}}aij =∑k=1L exp(eik )exp(eij )
其中,e i j = f ( h i − 1 , h j ) e_{ij} = f(h_{i-1}, h_j)eij =f(hi−1 ,hj ),这里的f表示一个匹配度的打分函数,可以是一个简单的相似度计算,也可以是一个复杂的神经网络计算结果。在这里,由于在计算c i c_ici 时还没有h i h_ihi ,因此使用最接近的h i − 1 h_{i-1}hi−1 代替。当匹配度越高,则a i j a_{ij}aij 的概率越大。因此,得出a i j a_{ij}aij 的过程如下图:
其中,h i h_ihi 表示
Encoder
的转换函数,
F(hj,Hi)
表示预测与目标的匹配打分函数。将以上过程串起来,则注意力模型的结构如下图所示:
其中,h i h_ihi 表示
Encoder
阶段的转换函数,c i c_ici 表示语义编码,h i ′ h^{\prime}_ihi′ 表示
Decoder
阶段的转换函数。
6. 注意力机制的应用
6.1 在图像描述(Image Caption)领域
图片描述,即输入一张图片,AI系统根据图片中的内容输出一句描述文字。如下图所示,左图是输入原图,右边是AI系统生成划横线单次的时候对应图片中聚焦的位置区域,下边的句子是AI系统自动生成的描述文字。
可以看到,在输出frishbee(飞碟)、dog(狗)等单次时,AI系统会将注意力更多地分配给图片中飞碟、狗的对应位置,以获得更加准确的输出。
7. Self-Attention
用MLP代替掉Self-Attention