pytorch(10.2) 注意力汇聚理论

发布时间 2023-10-16 22:20:29作者: MKT-porter

 

https://zh.d2l.ai/chapter_attention-mechanisms/nadaraya-waston.html

 

 

https://zhuanlan.zhihu.com/p/265108616

 

Attention注意力机制与self-attention自注意力机制

 

Attention注意力机制与self-attention自注意力机制

1.为什么要因为注意力机制

在Attention诞生之前,已经有CNN和RNN及其变体模型了,那为什么还要引入attention机制?主要有两个方面的原因,如下:

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

(2)优化算法的限制:LSTM只能在一定程度上缓解RNN中的长距离依赖问题,且信息“记忆”能力并不高。

注意力机制的优缺点

attention的优点

1.参数少:相比于 CNN、RNN ,其复杂度更小,参数也更少。所以对算力的要求也就更小。

2.速度快:Attention 解决了 RNN及其变体模型 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。

3.效果好:在Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。

attention的缺点

缺点:自注意力机制的信息抓取能力其实不如RNN和CNN,在小数据集的表现不如后两者,只有在数据量上来了之后才能发挥出实力。实际应用中数据集较小时建议还是用CNN和RNN

缺点有啊,需要的数据量大。因为注意力机制是抓重点信息,忽略不重要的信息,所以数据少的时候,注意力机制效果不如bilstm,现在我们企业都用注意力机制,因为企业数据都是十万百万级的数据量,用注意力机制就很好。还有传统的lstm,bilstm序列短的时候效果也比注意力机制好。所以注意力机制诞生的原因就是面向现在大数据的时代,企业里面动不动就是百万数据,超长序列,用传统的递归神经网络计算费时还不能并行计算,人工智能很多企业比如极视角现在全换注意力机制了

2.什么是注意力机制

在介绍什么是注意力机制之前,先让大家看一张图片。当大家看到下面图片,会首先看到什么内容?当过载信息映入眼帘时,我们的大脑会把注意力放在主要的信息上,这就是大脑的注意力机制。

 

 

同样,当我们读一句话时,大脑也会首先记住重要的词汇,这样就可以把注意力机制应用到自然语言处理任务中,于是人们就通过借助人脑处理信息过载的方式,提出了Attention机制

3.注意力机制模型

 

 

从本质上理解,Attention是从大量信息中有筛选出少量重要信息,并聚焦到这些重要信息上,忽略大多不重要的信息。权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

至于Attention机制的具体计算过程,如果对目前大多数方法进行抽象的话,可以将其归纳为两个过程:

第一个过程是根据Query和Key计算权重系数,

    而第一个过程又可以细分为两个阶段:

    第一个阶段根据Query和Key计算两者的相似性或者相关性;

    第二个阶段对第一阶段的原始分值进行归一化处理;

第二个过程根据权重系数对Value进行加权求和。

这样,可以将Attention的计算过程抽象为如图展示的三个阶段。

 第一个阶段

在第一个阶段,可以引入不同的函数和计算机制,根据Query和某个 Keyi ,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值,即如下方式:

 

 第一阶段产生的分值根据具体产生的方法不同其数值取值范围也不一样,第二阶段引入类似SoftMax的计算方式对第一阶段的得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重。即一般采用如下公式计算:

 

 1过程对位置加权

 2通用公式

  3要求它们是非负的,并且总和为1,引入一个高斯核(Gaussian kernel)

4 联合a和K

 

 如果一个键xi越是接近给定的查询x<span class="math notranslate nohighlight">, 那么分配给这个键对应值yi<span class="math notranslate nohighlight">的注意力权重就会越大, 也就“获得了更多的注意力”。

如图

因此由观察可知“查询-键”对越接近, 注意力汇聚的注意力权重就越高。

 第二阶段

第二阶段的计算结果 ai 即为 Valuei 对应的权重系数,然后进行加权求和即可得到Attention数值:

 

通过如上三个阶段的计算,即可求出针对Query的Attention数值,目前绝大多数具体的注意力机制计算方法都符合上述的三阶段抽象计算过程。

 

4.Self-attention自注意力机制

自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。

自注意力机制在文本中的应用,主要是通过计算单词间的互相影响,来解决长距离依赖问题。

自注意力机制的计算过程:

1.将输入单词转化成嵌入向量;

2.根据嵌入向量得到q,k,v三个向量;

3.为每个向量计算一个score:score =q . k ;

4.为了梯度的稳定,Transformer使用了score归一化,即除以

 

5.对score施以softmax激活函数;

6.softmax点乘Value值v,得到加权的每个输入向量的评分v;

7.相加之后得到最终的输出结果z :z=