Attention机制

目录

Encoder-Decoder框架

Soft-Attention模型

Attention机制的本质思想

Hard-Attention模型

Local-Attention模型

静态Attention模型

Self-Attention机制

为什么要引入Attention机制

Attention机制有哪些

Self-Attention在长距离序列中强大的原因


Encoder-Decoder框架

目前大多数Attention机制都是依附在Encoder-Decoder框架下,但其实Attention机制是一种通用的思想,本身并不依赖于特定框架

image.png

 

文本处理领域的Encoder-Decoder框架:对于句子对<Source,Target>,给定输入句子Source,通过Encoder-Decoder框架来生成目标句子Target。

\Large Source = <x_1,x_2,...,x_m>

\Large Target = <y_1,y_2,...,y_m>

Encoder通过非线性变化将输入句子Source转化成中间语义表示C

\Large C = G(x_1,x_2,...,x_m)

Decoder根据中间语义表示C和之前已经生成的历史信息y_1,y_2,...,y_m来生成i时刻要生成的单词

\Large y_i = F(C,y_1,y_2,...,y_m)

Encoder和Decoder具体使用的模型可以灵活设定,如CNN,RNN,LSTM等,但上面这个Encoder-Decoder框架没有体现Attention思想,因为对不同的y_i使用的中间语义表示C是相同的,即句子X中任意单词对生成某个目标单词y_i来说影响力都是相同的(其实如果Encoder是RNN的话,理论上越是后输入的单词影响越大,并非等权的)。

未引入Attention的Encoder-Decoder框架的缺点:输入句子较短时影响不大,但如果输入句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,会丢失很多细节信息。

Soft-Attention模型

引入Attention机制后,固定的中间语义表示C变换成根据当前输出单词来调整加入Attention机制的变化的

image.png

生成目标句子单词的过程:

\Large y_1 = F(C_1)

\Large y_2 = F(C_2,y_1)

\Large y_i = F(C_i,y_1,y_2,...,y_m)

每个\large C_i可能对应着不同的源语句子单词的Attention分配概率分布,

\large \Large C_i = \sum_{j=1}^{Lx}a_{ij}h_{j}

 

Lx表示输入句子Source的长度, 代表在Target输出第i个单词时,Source输入句子中第j个单词的Attention分配系数,是Source输入句子中第j个单词的语义编码

image.png

image.png

对于采用RNN的Decoder,目标是计算生成\large y_i时输入句子X中每个单词对\large y_i的Attention分配概率,可以用Target输出句子i-1时刻的隐层节点状态\large H_{i-1}和输入句子中每个单词对应的RNN隐层节点状态\large h_i进行对比,即通过\large F(h_j,H_{i-1})来获得目标单词\large y_i和每个输入单词对齐的可能性。F函数可以采取不同的方法,然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的Attention分配概率分布数值。

Attention模型的物理含义:Attention模型看作是输出Target句子中某个单词和输入Source句子每个单词的对齐模型,目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子单词和这个目标生成单词的对齐概率。

Attention机制的本质思想

image.png

将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和

Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:

\large \Large Attention(Query,Source) = \sum_{i=1}^{Lx}Sim(Query,Key_i)*Value_i

Attention的理解:从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体现在权重系数的计算上,权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

Attention也可以看作是一种软寻址,通过Query和存储器Sourece内元素Key的地址进行相似性比较来寻址,每次寻址可能从每个Key地址中取值,然后加权求和。

Attention机制的计算过程:

1、根据Query和Key计算权重系数

1)根据Query和Key计算两者的相似性或者相关性

点积:\large Similarity(Query,Key_i) = Query \cdot Key_i

Cosine相似性:\large Similarity(Query,Key_i) = \frac{Query \cdot Key_i}{||Query||\cdot||Key_i||}

MLP网络:\large \Large Similarity(Query,Key_i) = MLP(Query , Key_i)

2、据权重系数对Value进行加权求和

image.png

Hard-Attention模型

Hard-Attention:直接从输入句子中找到某个特定的单词,然后将目标句子单词和这个单词对齐,而其他输入句子的单词对齐概率为0。Hard AM在图像里证明有用,但是在文本里面用处不大,因为这种单词一一对齐明显要求太高,如果对不齐对后续处理负面影响很大。

image.png

Local-Attention模型

先找到Hard AM在输入句子中单词对齐的那个单词大致位置,然后以这个单词作为轴心,向左向右拓展出一个大小为D的窗口,在这个2D+1窗口内的单词内进行类似Soft AM的对齐概率计算即可

image.png

静态Attention模型

静态Attention:对于一个文档或者句子,计算每个词的注意力概率分布,然后加权得到一个向量来代表这个文档或者句子的向量表示;和Soft-Attention的区别:静态Attention只计算一次得到句子的向量表示,Soft-Attention在Decoder的过程中每一次都需要重新对所有词计算一次Attention概率分布,然后加权求和。

下图是静态Attention模型

image.png

 

下图是动态Attention模型(Soft-Attention)

image.png

Self-Attention机制

Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。

计算过程是相同的,只是计算对象发生变化。

Self-Attention可以捕获同一个句子中单词之间的一些句法特征或者语义特征

Self-Attention相较于RNN或LSTM更容易捕获句子中长距离的相互依赖的特征,因为RNN或LSTM需要依次序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。

但是Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。除此外,Self-Attention有助于增加计算的并行性。

为什么要引入Attention机制

1、计算能力的限制:当要记住很多“信息”,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。

2、优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离问题,信息“记忆”能力并不高。

引入Attention机制相当于借助人脑处理信息过载的方式,例如Attention机制可以提高神经网络处理信息的能力。

Attention机制有哪些

聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;

显著性(saliency-based)注意力:自下而上的有意识的注意力,被动注意——基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看作是自下而上的基于显著性的注意力机制。

在神经网络中,Attention默认指聚焦式Attention。

Self-Attention在长距离序列中强大的原因

1、CNN或RNN不能处理长距离序列

无论CNN或者RNN都是对变长序列的一种“局部编码”,CNN是基于n-gram的局部编码,RNN因为梯度消失的问题,只能建立短距离依赖。

2、解决这种短距离依赖的“局部编码”问题的方法:

1)增加网络的层数,通过一个深层网络来获取远距离的信息交互

2)全连接网络

3)Self-Attention利用注意力机制来“动态”地生成不同连接的权重,从而处理变长的信息序列。

 

最后如果转载,麻烦留个本文的链接,因为如果读者或我自己发现文章有错误,我会在这里更正,留个本文的链接,防止我暂时的疏漏耽误了他人宝贵的时间。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值