目录
Encoder-Decoder框架
Soft-Attention模型
Attention机制的本质思想
Hard-Attention模型
Local-Attention模型
静态Attention模型
Self-Attention机制
为什么要引入Attention机制
Attention机制有哪些
Self-Attention在长距离序列中强大的原因
目前大多数Attention机制都是依附在Encoder-Decoder框架下,但其实Attention机制是一种通用的思想,本身并不依赖于特定框架
文本处理领域的Encoder-Decoder框架:对于句子对
Encoder通过非线性变化将输入句子Source转化成中间语义表示C
Decoder根据中间语义表示C和之前已经生成的历史信息来生成i时刻要生成的单词
Encoder和Decoder具体使用的模型可以灵活设定,如CNN,RNN,LSTM等,但上面这个Encoder-Decoder框架没有体现Attention思想,因为对不同的使用的中间语义表示C是相同的,即句子X中任意单词对生成某个目标单词来说影响力都是相同的(其实如果Encoder是RNN的话,理论上越是后输入的单词影响越大,并非等权的)。
未引入Attention的Encoder-Decoder框架的缺点:输入句子较短时影响不大,但如果输入句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,会丢失很多细节信息。
引入Attention机制后,固定的中间语义表示C变换成根据当前输出单词来调整加入Attention机制的变化的。
生成目标句子单词的过程:
每个可能对应着不同的源语句子单词的Attention分配概率分布,
Lx表示输入句子Source的长度, 代表在Target输出第i个单词时,Source输入句子中第j个单词的Attention分配系数,是Source输入句子中第j个单词的语义编码
对于采用RNN的Decoder,目标是计算生成时输入句子X中每个单词对的Attention分配概率,可以用Target输出句子i-1时刻的隐层节点状态和输入句子中每个单词对应的RNN隐层节点状态进行对比,即通过来获得目标单词和每个输入单词对齐的可能性。F函数可以采取不同的方法,然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的Attention分配概率分布数值。
Attention模型的物理含义:Attention模型看作是输出Target句子中某个单词和输入Source句子每个单词的对齐模型,目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子单词和这个目标生成单词的对齐概率。
将Source中的构成元素想象成是由一系列的
Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:
Attention的理解:从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体现在权重系数的计算上,权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。
Attention也可以看作是一种软寻址,通过Query和存储器Sourece内元素Key的地址进行相似性比较来寻址,每次寻址可能从每个Key地址中取值,然后加权求和。
Attention机制的计算过程:
1、根据Query和Key计算权重系数
1)根据Query和Key计算两者的相似性或者相关性
点积:
MLP网络:
2、据权重系数对Value进行加权求和
Hard-Attention:直接从输入句子中找到某个特定的单词,然后将目标句子单词和这个单词对齐,而其他输入句子的单词对齐概率为0。Hard AM在图像里证明有用,但是在文本里面用处不大,因为这种单词一一对齐明显要求太高,如果对不齐对后续处理负面影响很大。
先找到Hard AM在输入句子中单词对齐的那个单词大致位置,然后以这个单词作为轴心,向左向右拓展出一个大小为D的窗口,在这个2D+1窗口内的单词内进行类似Soft AM的对齐概率计算即可
静态Attention:对于一个文档或者句子,计算每个词的注意力概率分布,然后加权得到一个向量来代表这个文档或者句子的向量表示;和Soft-Attention的区别:静态Attention只计算一次得到句子的向量表示,Soft-Attention在Decoder的过程中每一次都需要重新对所有词计算一次Attention概率分布,然后加权求和。
下图是静态Attention模型
下图是动态Attention模型(Soft-Attention)
Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。
计算过程是相同的,只是计算对象发生变化。
Self-Attention可以捕获同一个句子中单词之间的一些句法特征或者语义特征
Self-Attention相较于RNN或LSTM更容易捕获句子中长距离的相互依赖的特征,因为RNN或LSTM需要依次序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。
但是Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。除此外,Self-Attention有助于增加计算的并行性。
1、计算能力的限制:当要记住很多“信息”,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
2、优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离问题,信息“记忆”能力并不高。
引入Attention机制相当于借助人脑处理信息过载的方式,例如Attention机制可以提高神经网络处理信息的能力。
聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;
显著性(saliency-based)注意力:自下而上的有意识的注意力,被动注意——基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看作是自下而上的基于显著性的注意力机制。
在神经网络中,Attention默认指聚焦式Attention。
1、CNN或RNN不能处理长距离序列
无论CNN或者RNN都是对变长序列的一种“局部编码”,CNN是基于n-gram的局部编码,RNN因为梯度消失的问题,只能建立短距离依赖。
2、解决这种短距离依赖的“局部编码”问题的方法:
1)增加网络的层数,通过一个深层网络来获取远距离的信息交互
2)全连接网络
3)Self-Attention利用注意力机制来“动态”地生成不同连接的权重,从而处理变长的信息序列。
最后如果转载,麻烦留个本文的链接,因为如果读者或我自己发现文章有错误,我会在这里更正,留个本文的链接,防止我暂时的疏漏耽误了他人宝贵的时间。