Attention机制的总结笔记
⼈类的视觉注意⼒
Attention机制借鉴了⼈类的视觉注意⼒机制。视觉注意⼒机制是⼈类视觉所特有的⼤脑信号处理机制。⼈类视觉通过快速扫描全局图像,
获得需要重点关注的⽬标区域,也就是⼀般所说的注意⼒焦点,⽽后对这⼀区域投⼊更多注意⼒资源,以获取更多所需要关注⽬标的细节信
息,⽽抑制其他⽆⽤信息。如下图1:⼈类⽤眼睛扫描下⾯的图⽚时,红⾊部分就代表⼈类在图⽚中更关注的部分,显然我们把注意⼒更集
中在婴⼉的脸部,⽂本标题,⽽其它部分信息则不是我们注意⼒关注的地⽅。
Attention机制思想与视觉注意⼒机制⼀样,本质都是从众多信息中挑选出⽬前我们要重点关注的对象,挑选出对所处理的问题更关键的信
息。
图1
Attention机制发展史
Attention机制的思想最早是在九⼏年的时候被提出来应⽤于图像领域。随后在2014年,⾕歌发表了《RecurrentModelsofVisual
Attention》论⽂,他们在RNN模型上使⽤了attention机制来进⾏图像分类,然后取得了很好的性能,Attention机制就逐渐开始⽕了起
来。后⾯Attention机制开始进⼊NPL领域。Bahdanau等⼈在论⽂《NeuralMachineTranslationbyJointlyLearningtoAlignand
Translate》中⾸次使⽤了类似attention的机制,在机器翻译任务上将翻译和对齐同时进⾏,接着attention机制就被⼴泛应⽤在基于
RNN/CNN等神经⽹络模型的各种NLP任务,并取得了不错的效果。2017年,google机器翻译团队发表的《Attentionisallyouneed》
中⼤量使⽤了⾃注意⼒(lf-attention)机制来学习⽂本表⽰,这篇论⽂引起了⼈们⼤量的关注。因⽽⾃注意⼒机制研究也在那时逐渐成
为研究热点,并在各种NLP任务上进⾏探索,纷纷都取得了很好的性能。
Encoder-Decoder框架
Encoder-Decoder框架是深度学习中⾮常常见的⼀个模型框架,例如在ImageCaption的应⽤中Encoder-Decoder就是CNN-RNN的
编码-解码框架;在神经⽹络机器翻译中Encoder-Decoder往往就是LSTM-LSTM的编码-解码框架,在机器翻译中也被叫做
SequencetoSequencelearning(q2q)。⽬前⼤多数的注意⼒模型都是依附在Encoder-Decoder框架下,但需要注意的是注意
⼒机制作为⼀种思想可以和多种模型进⾏结合,其本⾝不依赖于任何⼀种框架,并不是只能运⽤在该模型中。
下⾯讲解Attention机制的计算流程时,也是以Encoder-Decoder框架下的机器翻译的应⽤为例。
Encoder-Decoder框架中Encoder叫做编码器,Decoder叫做解码器,其具体结构如下图2:
图2
以⽂本翻译翻译为例,假如有⼀个句⼦“我爱中国”,翻译成英⽂就叫做“Ilovechina”。我爱中国这⼏个字分别会有⼀个向量进⾏表
⽰,对应着x1、x2、x3、x4,对于Encoder-Decoder框架所要做的就是把中⽂“我爱中国”,即x1、x2、x3、x4,依次丢⼊Encoder
进⾏编码,之后得到⼀个中间语义向量,我们希望这个中间语义向量放⼊Decoder后依次输出y1、y2、y3,即翻译出“Ilovechina”。
⽂本翻译中,Encoder和Decoder⼀般⽤的是RNN处理数据,其过程类似下图3:
图3
图3前半部分代表Encoder阶段。其中ht是代表当前时刻的隐藏状态,⼀般由上⼀时刻的隐藏状态ht−1和当前时刻的输⼊xt决定的;c是
中间语义向量,其得出⽅式有以下⼏种(图4):
图4
q表⽰某种⾮线性神经⽹络;
图3的后半部分代表的是Decoder阶段。其根据获取到中间语义向量c和隐藏状态ht-1,依次输出y1、y2、y3,即翻译出“Ilove
china”。
Encoder-Decoder框架可以看作是处理
通过Source⽽输出的数据(进⾏decoder);对于⽂本翻译来说,Source就是⼀个句⼦,我们期待的Target就是把句⼦翻译成英⽂或者其
它语⾔。对于语⾳识别来说,Source就是语⾳流,Target就是期待输出的⽂本信息…
SoftAttention模型
在上述的Encoder-Decoder框架中,未考虑attention机制时,Encoder阶段得到的中间语义向量C是“固定”的,在Decoder阶段输出每
个yi时,C都不发⽣任何变化,这就导致翻译出来的序列的每⼀个字都是同权地考虑了输⼊中的所有的词,例如:输出“IloveChina”时,
输出的每⼀个yi,“我爱中国“⾥⾯每个字,即所有的xi,对每⼀个yi的输出的影响权重都是⼀样的,这显然不符合实际,⽐如:当翻译
出”China“时,显然此时”中国”两字,即x3、x4对其的翻译更重要,⽽x1,x2显然对翻译出“China”影响⾮常⼩;但当翻译
出“love”时,显然此时x2(“爱”)对其更重要,⽽其余的xi对其影响则⾮常⼩。因此,也把这种没有体现出不同输⼊的重要程度的
Encoder-Decoder框架叫做分⼼模型。
未引⼊attention机制进⾏翻译时,如果句⼦⽐较短,翻译时可能问题不⼤,但如果句⼦⽐较长,此时所有的语义信息都只通过⼀个中间语
义向量来表⽰,单词本⾝的信息消失,则会导致翻译出来的句⼦会丢失很多细节信息。
⽽引⼊attention机制就是为了从序列中学习到每⼀个元素的重要程度,然后按重要程度将元素合并。因此,attention机制可以看作是
Encoder和Decoder之间的接⼝,它向Decoder提供来⾃每个Encoder隐藏状态的信息。通过该设置,模型能够选择性地关注输⼊序
列的有⽤部分,从⽽学习它们之间的“对齐”(对齐是指将原⽂的⽚段与其对应的译⽂⽚段进⾏匹配)。这就表明,在Encoder将输⼊的
序列元素进⾏编码时,得到的不在是⼀个固定的中间语义向量C,⽽是存在多个中间语义向量Ci,且不同的中间语义向量由不同的序列元
素以不同的权重参数组合⽽成。
例如:上述Encoder-Decoder框架在引⼊attention机制后,翻译“IloveChina”中的“China”时,会给xi分配不同的影响权重,假设
为(我,0.1)、(爱,0.1)、(中,0.4)、(我,0.4),每个字⾥⾯的概率代表当前输出“China”时对其的影响⼤⼩,也叫做注意
⼒⼤⼩,即翻译“China”时,应该着重关注哪些元素。因为输出不同的yi时,分配给xi的权限系数是不⼀样的,所以由此产⽣的中间语义
变量C也是变化的,如下图5:
由上述可知,attention机制中,最关键的就是算出这个变化的Ci和当前Ci下的输⼊元素的权重系数,下⾯先讲⼀下这个Ci怎么算。
Ci⼀般由各个元素按其重要程度加权求和得到,即由下式:
以上述翻译”我爱中国“为例,则有图6:
其中Lx代表序列长度;hi可以看作是xi所代表的信息,因为⽂本翻译⼀般⽤RNN处理,hi也叫做隐藏状态;aij就是⼀个概率,反映了元素xj
对Ci的重要性;
那么每次计算Ci时的各个元素的概率怎么得到?
可以⽤下图7、图8去描述这个过程:
图7
图8
上图7中是⼀个简略的attention机制中的Decoder部分展⽰(采⽤RNN),图8就是中间语义变量C2中各元素权重系数计算过程,其实就
是拿当前要输出的yi的前⼀时刻的隐藏状态,例:图7中,输出y2时,就是取h‘1,然后把h‘1与输⼊序列中每个元素的隐藏状态hj进⾏相
关计算(计算过程下⾯再讲),来获得输出单词yi和每个输⼊词语的对齐可能性,把计算结果经过Softmax进⾏归⼀化就得到了符合概率分
布取值区间的注意⼒分配概率分布数值。
怎么理解输出单词yi和每个输⼊词语的对齐可能性?
对齐可能性其实就是对其概率,⽬标句⼦⽣成的每个单词对应输⼊句⼦单词的概率分布可以理解为输⼊句⼦单词和这个⽬标⽣成单词的对齐
概率。
Attention机制本质思想
从上⽂讲述的SoftAttention例⼦中,把Attention机制做进⼀步抽象,便可得到Attention机制的本质思想,如下图9:
下⾯对上图9进⾏解释,我们可以将Source中的构成元素想象成是由⼀系列的
Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数(也叫attentionscore),然后对Value进
⾏加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进⾏加权求和,⽽Query和Key⽤来
计算对应Value的权重系数。即可以将其本质思想改写为如下公式:
其中,Lx代表Source中序列长度;在上⽂所讲述的例⼦当作不容易看出attention机制的本质思想,因为在机器翻译中,Source中的Key
和Value⼀般指的是同⼀个东西,即每个词语对应的语义编码。
在开头时我们讲过,把Attention理解为从众多信息中挑选出⽬前我们要重点关注的对象,挑选出对所处理的问题更关键的信息,忽略⼤多
不重要的信息,这其实就体现在权重系数的计算上,权重越⼤代表越聚焦于其对应的Value值上,即权重代表了信息的重要性,⽽Value是
其对应的信息。
需要注意的是,计算出来的attentionvalue是⼀个向量,代表序列元素xj的编码向量,包含了元素xj的上下⽂关系,即同时包含全局联
系和局部联系。全局联系很好理解,因为在计算attentionvalue时考虑了该元素与其他所有元素的相似度计算;⽽局部联系则是因为在对
元素xj进⾏编码时,重点考虑与其相似度较⾼的局部元素,尤其是其本⾝。
Attention具体计算过程
进⼀步,根据现有的⼤多数attention的计算过程进⾏总结概括,可有下图10:
如上图,attention机制的计算过程可⼤致分为3个阶段:
第⼀阶段,根据Query与某个keyi,计算两者的相关⾏,即计算权重系数,计算函数常见的有以下⼏种:
第⼆阶段,在上⼀阶段产⽣的分值根据具体使⽤的⽅法不同其数值取值范围也不⼀样,在第⼆阶段就引⼊类似SoftMax的函数对第⼀阶段的
得分进⾏数值转换,进⾏归⼀化,将原始计算分值整理成所有元素权重之和为1的概率分布;另⼀⽅⾯也可以通过SoftMax的内在机制更加
突出重要元素的权重。即⼀般采⽤如下公式计算:
第三阶段,进⾏加权求和就可以得到最终的attentionvalue:
HardAttention
上述所讲的SoftAttention的计算过程是会对Source中每个元素赋予⼀个经过SoftMax函数处理过的match概率,所以才叫做Soft
Attention。如果不这样做,直接把source中某个特定的元素(其对target中某个输出元素有很⼤的影响),与target中某个输出元素对
齐,⽽其它source中的元素硬性地认为对齐概率为0,这就是HardAttentionModel的思想,如下图11:
SelfAttention
SelfAttention也被称为intraAttention(内部Attention)。在⼀般任务的Encoder-Decoder框架中,输⼊Source和输出Target内容是
不⼀样的,⽐如对于英-中机器翻译来说,Source是英⽂句⼦,Target是对应的翻译出的中⽂句⼦,Attention机制发⽣在Target的元素
Query和Source中的所有元素(values)之间。⽽SelfAttention顾名思义,指的不是Target和Source之间的Attention机制,⽽是Source
内部元素之间或者Target内部元素之间发⽣的Attention机制,也可以理解为Target=Source这种特殊情况下的注意⼒计算机制。
对于上⾯所述的机器翻译,引⼊attention机制本质上是为了让Source中的单词与Target中的单词对齐。那么引⼊SelfAttention对机器翻
译⼜有什么好处呢?
SelfAttention可以捕获同⼀个句⼦中单词之间的⼀些句法特征或者语义特征,如下图12、图13:
由上图可知,很明显,引⼊SelfAttention后会更容易捕获句⼦中长距离的相互依赖的特征,因为如果是RNN或者LSTM,需要依次序序列
计算,对于远距离的相互依赖的特征,要经过若⼲时间步步骤的信息累积才能将两者联系起来,⽽距离越远,有效捕获的可能性越⼩。但是
SelfAttention在计算过程中会直接将句⼦中任意两个单词的联系通过⼀个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极⼤
缩短,有利于有效地利⽤这些特征。除此外,SelfAttention对于增加计算的并⾏性也有直接帮助作⽤。
下⾯简单介绍⼀下SelfAttention的计算过程:
假设我们有4个序列元素a1、a2、a3、a4,⽤SelfAttention⽣成b1、b2、b3、b4,其中bi为以ai为query,其余的为values,进⾏相
关性计算后加权求和得到的结果,即使⽤了attention机制。
对于a1、a2、a3、a4有下图14:
其中qi、ki、vi的计算过程如下图15(以点积计算⽅式为例):
对于b1我们有计算过程如下图16:
上图算b1的过程就是⽤a1的query与a2、a3、a4进⾏相关性计算得到权重系数,然后把其与a1、a2、a3、a4对应的values进⾏加权求和
即可以得到b1;计算b2、b3、b4同理。计算b2的如下图17:
参考⽂章
本文发布于:2022-11-23 00:07:50,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/2290.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |