Attention机制概念整理

2024-05-10 18:42

1. Attention机制概念整理

深度学习中的注意力机制(Attention Macheanism):
  
 Attention机制较为广泛的应用是为了解决  LSTM长输入序列在编码成固定长度向量后,解码受限于该固定长度向量  的问题。但是这个概念最初引入是在计算机视觉领域。
  
 Attention的概念来源于人类的  视觉注意力机制  :人们视觉在感知东西的时候一般不会是一个场景从到头看到尾每次全部都看,而往往是根据需求观察注意特定的一部分。而且当人们发现一个场景经常在某部分出现自己想观察的东西时,人们会进行学习在将来再出现类似场景时把注意力放到该部分上。所以,深度学习中注意力机制的核心目标也是从众多信息中选择出对当前任务目标更关键的信息。
                                          
 上图的另外一个理解方式是软寻址,也就是说每来一个Query,通过和存储器内key的地址进行相似性比较,并可能从每个对应的key中都会取出具有一定重要性的内容value,这个重要性由Query和key的相似性决定,最后对这些从不同的key中取出的value进行加权求和
  
 Encoder顾名思义就是对输入句子Source进行编码,将输入句子通过非线性变换转化为中间语义表示C:
                                          
 对于解码器Decoder来说,其任务是根据句子Source的中间语义表示C和之前已经生成的历史信息(y1,y2,...,yi-1)来生成i时刻要生成的单词:
                                          
 对于nlp文本处理领域中不同的任务只需要改变source和target:s(中文句)t(英文句)——>机器翻译;s(文章)t(概述)——>文本摘要;s(问题)t(回答)——>对话机器人
  
 如果不加attention机制,生成目标yi时,source中任意一个单词的影响力都是相同的(没有注意力的焦点)。
  
 如果句子过长,中间语义C不足以包含每个单词本身的信息,会丢失很多细节信息,因此要引入注意力机制,将重点放在对target中的yi生成有用的相应的source词上。
  
   理解Attention模型的关键就是这里  ,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci
                                          
 将上图转化成函数表示:(Soft Attention:Attention+Softmax)
                                          
 其中Aij是一个权值矩阵,aij表示source中的第i个单词对target中第j的单词预测的贡献(可以理解成相似性),hj是source中第j个单词的语义编码(不同框架编码不同)
  
 
  
                                          
 i-1时刻的隐层状态Hi-1是已知的,F(hj,Hi-1)函数表示目标单词yi和每个输入单词j对齐的可能性
  
 一般在自然语言处理应用里会把Attention模型看作是输出Target句子中某个单词和输入Source句子每个单词的对齐模型,这是非常有道理的。例如在传统机器学习方法中相当于短语对齐的过程。
  
 更进一步的抽象,可以将target看成Query,这个Query和source中的每个检索词value都有一个相似性,即权重系数,将这些权重系数相加得到Attention值,转化成公式:
                                          
 从这个层面上可以看出Attention就是从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,这个“聚焦”就体现在权重系数上
  
 1. 根据Query和key计算权重系数;
  
     ① 根据Query和Key计算相似性:相似度的计算可用点积、cosine相似性、MLP网络等计算
  
     ② 对①的原始分值进行归一化处理:如SoftMax
  
 
  
                                          
 2.根据权重系数对value就行加权求和
  
 
  
                                          
 整个计算过程可表示成下图:
  
 
  
                                          
 未完待续
  
 参考张俊林博士的博客结合个人理解整理了一下 https://blog.csdn.net/malefactor/article/details/78767781

Attention机制概念整理

2. Attention机制知识汇总

 图1形象化展示了人类在看到一副图像时是如何高效分配有限的注意力资源的,其中红色区域表明视觉系统更关注的目标。
   深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是 从众多信息中选择出对当前任务目标更关键的信息 。
   深度学习中常用的第一类注意力机制
                                           具体数学形式表示如下:        注意力机制主要体现在  系数上,其反映对于一次查询当前资源中不同数据的重要程度,通过softmax等形式计算出该系数;实现聚焦重要数据,忽略不相关数据的注意力作用
                                                                                   理解:soft attention通过softmax获得注意力权重,之后进行加权计算,即计算注意力分布下的期望。hard attention则是利用注意力权重进行采样选取信息(根据权重大小做采样)。
                                           
                                                                                   
   
                                           Self-Attention结构如下
                                           
    知乎-目前主流的Attention方法都有哪些:张俊林的回答     知乎-目前主流的Attention方法都有哪些:JayLou的回答     知乎专栏-模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用     Attention机制详解(二)——Self-Attention与Transformer 

3. attention的讲解

attention是一个名词,意思是注意力、关心、口令立正,attention这个单词可以划分为几个音节呢?我们一起来看一看,这个单词一共可以划分为三个音节【at】【ten】和【tion】,第一个音节at的发音为【ə】,而第二个音节ten的发音为【ten】,而第三个音节tion的发音为【ʃn】,合在一起的话这个单词的发音就是【əˈtenʃn】,我们再看一下用法,attention作为注意力、关心、立正的意思来使用;
 
   
 
 例如在下面这两个句子里,I couldn't give the programme,my undivided attention . 我不能一心一意地关注这个方案,If we don't keep bringing,this to the attention of the people,nothing will be done.如果我们无法让公众保持对此事的关注,那就将一事无成,在这两个句子中,attention都指的是注意力,attention还有一个短语,pay more attention to,指的是更加注意,These tours may awaken people,to pay more attention to long standing poverty,or the effects of war. 这些旅行可能会唤醒人们,来更多地关注长期的贫困或战争的影响,attention这个单词你学会了吗?

attention的讲解

4. Attention(注意力)机制

Attention(注意力)机制其实来源于人类的认识认知能力。比如当人们观察一个场景或处理一件事情时,人们往往会关注场景的显著性物体,处理事情时则希望抓住主要矛盾。注意力机制使得人类能够关注事物的重要部分,忽略次要部分,更高效的处理所面临的各种事情。
  
 注意力机制在NLP领域被真正的发扬光大,其具有参数少、速度快、效果好的特点,如2018年的BERT、GPT 领跑各项 NLP 任务效果。由此在此领域,transformer和attention结构受到了极大的重视。
   
  
 
                                          
 第二步:使用权重对Value进行加权求和从而得到Attention Value。
  
 注意力是一种机制,或者方法论,并没有严格的数学定义。比如,传统的局部图像特征提取、显著性检测、滑动窗口方法等都可以看作一种注意力机制。在神经网络中,注意力模块通常是一个额外的神经网络,能够硬性选择输入的某些部分,或者给输入的不同部分分配不同的权重。
  
 根据权重在特征空间和通道上的应用方式不同,主要可分为
  
 
  
 
                                          
 其增加了一个通道注意力模块,学习每个通道的权重,通过抑制无关特征提升卷积特征的表示性能。SENet通过Squeeze模块和Exciation模块实现所述功能,首先通过Squeeze模块对卷积特征进行进行压缩,即在通道维度上执行全局池化操作,在SENet中采用的是全局平均池化,作者提到该操作能够使得靠近数据输入的特征也可以具有全局感受野,这一点在很多的任务中是非常有用的。然后是通过全连接网络进行Exciation操作,作者在全连接网络中降维操作的目的是一方面降低了网络计算量,一方面增加了网络的非线性能力。最后将得到通道attention应用到原始卷积特征上,即通过乘法加权的方式乘到先前的特征上,从而提升重要特征,抑制不重要特征。
  
 
  
 
                                          
 从图中可以看出,首先将输入张量进行降维到C通道,与SENet不同的是采用二阶pool的方式,计算得到C*C的协方差矩阵,这种计算方式引入了通道之间的相互关系,然后进行线性卷积和非线性激活的两个连续运算,得到通道注意力。
  
 
  
 
                                          
 
  
 
                                          
 
                                                                                  
 
  
 
                                          
 
                                                                                  
 除此之外,还有很多的注意力机制相关的研究,比如残差注意力机制,多尺度注意力机制,递归注意力机制等。

5. Attention

The second step in calculating self-attention is to calculate a score. Say we’re calculating the self-attention for the first word in this example, “Thinking”. We need to score each word of the input sentence against this word. The score determines how much focus to place on other parts of the input sentence as we encode a word at a certain position. 
  
  The score is calculated by taking the dot product of the query vector with the key vector of the respective word we’re scoring. So if we’re processing the self-attention for the word in position #1, the first score would be the dot product of q1 and k1. The second score would be the dot product of q1 and k2 
                                          
 两种:
  
 soft attention :思是在求注意力分配概率分布的时候,对于输入句子
   X中任意一个单词都给出个概率,是个概率分布。
   hard attention: 对不齐的概率认为是0
  
 global attention model : soft attention model
   local attention model : soft attention model & hard attention model
  
 有多个类别的mask,反向传播只优化当前类别对应的mask.
  
 不传递谁的损失函数,不更新谁的梯度。
  
 每个注意力模块分为两部分:mask (M)和trunk(T),基于特征提取网络提取特征T,
  
  H_i,c​ (x)=M_i,c​ (x)∗T_i,c​ (x) 
  
 注意力模块中,注意力掩膜在forward时作为特征选择器,在反向传播时则作为梯度更新的滤波器。
  
 由于注意力用到了softmax 网络,如果太多的注意力模型会导致模型输出的响应变弱,可能对梯度也会产生一定的影响。
   所以用残差的注意力:
    H_i,c​ (x)=(1+M_i,c​ (x))∗T_i,c​ (x) 
   一般M的取值范围在[01,]之间,除了得到注意力之外还要把特征图加上。
   
                                          
 
  
 掩膜分支包括了快速前馈扫描(fast feed-forward sweep)和自上而下的反馈(top-down feedback)步骤。前者快速收集整个图像的全局信息,后者将全局信息与原始特征图相结合。在卷积神经网络中,这两个步骤展开为bottom-up top-down的全卷积结构。
                                          
 先对原图下采样,得到主要特征后,在上采样使大小与原图一样,然后通过sigmoid 。
  
 使用L2正则化约束每个位置上的所有通道,推测最终输出一个空间维度一致的Attention Map;
                                          
 类似于SENet使用L2正则化约束每一个通道上的所有特征值,最后输出长度与通道数相同的一维向量作为特征加权;这个和公式里描述的是一样吗?
                                          
 对通道和空间位置都是用
                                                                                                                                                                  
 学习权重分布
                                          
 通过1x1卷积产生注意力?这不是我常见的,我的疑惑就在这里。他既不是通道注意力,也不是空间注意力。

Attention

6. Attention注意力机制介绍

Attention机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素。其中重要程度的判断取决于应用场景,拿个现实生活中的例子,比如1000个人眼中有1000个哈姆雷特。根据应用场景的不同,Attention分为空间注意力和时间注意力,前者用于图像处理,后者用于自然语言处理。本文主要介绍Attention机制在Seq2seq中的应用。
  
 我们知道在Seq2seq模型中,原始编解码模型的encode过程会生成一个中间向量C,用于保存原序列的语义信息。但是这个向量长度是固定的,当输入原序列的长度比较长时,向量C无法保存全部的语义信息,上下文语义信息受到了限制,这也限制了模型的理解能力。所以使用Attention机制来打破这种原始编解码模型对固定向量的限制。
  
 Attention的原理就是计算当前输入序列与输出向量的匹配程度,匹配度高也就是注意力集中点其相对的得分越高。其中Attention计算得到的匹配度权重,只限于当前序列对,不是像网络模型权重这样的整体权重。
  
 1)encode对输入序列编码得到最后一个时间步的状态c,和每个时间步的输出h,其中c又作为decode的初始状态z0。
  
 2)对于每个时间步的输出h与z0做匹配也就是match操作,得到每个时间步的匹配向量α01,如图1。
                                          
 3)对所有时间步的输出h与z0的匹配度α0,使用softmax做归一化处理,得到各个时间步对于z0的匹配分数。
  
 4)求各个时间步的输出h与匹配分数的加权求和得到c0,作为decode的下一个时间步的输入,如图2。
                                          
 5)计算各个时间步的输出h与z1的匹配度得到c1作为decode下一个时间步的输入,如此一步一步重复下去,如图3。
                                          
 这样就可以把每个时间步重要的信息传给decode中,以上就是Attention机制的处理过程。其中match操作一般是求两个向量的相似度,通常有如下方法:
  1)余弦相似度
  2)一个简单的 神经网络,输入为hh和ww,输出为α
  3)或者矩阵变换α=hTWzα=hTWz (Multiplicative attention,Luong et al., 2015) 
  
 在tensorflow1.0版本以后的api seq2seq库中,包含了两种Attention算法,他们的区别就是match操作的不同,因此也有人称他们为加法Attention和乘法Attention,具体内容下:
  
 1)BahdanauAttention:论文 https://arxiv.org/abs/1409.0473 中的实现:
                                          
 2)LuongAttention:论文 https://arxiv.org/abs/1508.04025 中的实现 :
                                          
 由于图片来自不同地方,所以符号有些不同,图4和图5中的h是上文所说的每个时间步的输出向量,d是decode中每个时间步的状态,也就是上文中的z,c是match后计算的权值加和后的向量用于decode中每个时间步的输入,a就是match操作中经过softmax后的匹配权重,v是一个向量,相当于w一样的权重需要去学习。有上面两个公式可以看出,BahdanauAttention和LuongAttention的区别就是在match过程中的计算方式不同,一个是将decode的状态与encode的输出求和,一个是求乘,所以才有了加法Attention和乘法Attention的叫法。
  
 ------------------------------------------------------------------更新---------------------------------------------------------------------
  
 最近一段时间的学习,发现Attention的各种形式与用法,但是归根结底,都是同一种形式---Google的一般化Attention.
                                          
 其中Q是query,K和V是一一对应的,相当于Key-Value的关系.一般情况下都会说求谁对谁的Attention,比如上面提到的Seq2seq中,decoder的隐状态z对encoder输出h的attention,那么隐状态z就相当于该式中的query,encoder的输出h就是key和value(这里key和value相等,也有不等的情况).所以如果说A对B的attention,那么A就是query,B就是key-value(key-value怎么分配看实际情况).这样,上文提到的内容就可以很容易的代入到一般会Attention中.先用query(decoder隐藏状态z)和key(encoder输出h)做点乘然后归一化,使用softmax计算权重得分,再与value(encoder输出h)相乘得到最后的向量.(attention的机制像极了key-value记忆网络的原理, 或者更准确的说是key-value记忆网络像极了attention的机制,使用query与key做匹配运算,求得相关度得分,然后使用该得分与value运算,得到最后的向量).
  
 特别注意的是,如果Q,K,V的值都是一个的话,那么就称为Self Attention.
  
 参考:
  
  台大李宏毅课程

7. Attention模型

 我们以前用过这种Seq2Seq的编码解码架构(a Encoder-Decoder architecture)来完成机器翻译的任务。当使用RNN读入一个句子时候,另一个就会输出一个句子。这种模型对于短句子有用,但是长句子却效果不好。如图:
                                           可以看到随着句子长度增长,Bleu Score在下降。因为上面的模型要记住一整个很长的法语句子,然后在Decoder中输出。而人工翻译可以先翻译出句子的部分,再看下一部分,并翻译一部分,就这样一直下去,因为记忆整个句子是很难的。所以,我们引入了注意力模型(the attention model),如图所示:
                                           注意力模型来自于 Dimitri, Bahdanau, Camcrun Cho, Yoshe Bengio 。(Bahdanau D, Cho K, Bengio Y. Neural Machine Translation by Jointly Learning to Align and Translate[J]. Computer Science, 2014.)。   让我们来举例说明一下。假如我们有一个法语句子:(法语) Jane visite l'Afrique en Septembre 。假定我们使用 RNN ,在这种情况下,我们可以使用一个双向 RNN ( a bidirectional RNN ),为了计算每个输入单词的特征集( set of features ),你必须要理解输出  到  一直到  的双向 RNN 。但是我们并不是只翻译一个单词,让我们先去掉上面的  ,就用双向的 RNN 。我们将使用另一个 RNN 生成英文翻译。我们用  表示 RNN (也就是解码器Decoder)的隐层状态( the hidden state in this RNN )。我们希望在这个模型里第一个生成的单词是 Jane 。于是等式就是,当你尝试生成第一个词时候,我们应该看输入的法语句子的哪个部分。所以,注意力模型就会计算注意力权重。我们用  来表示当你生成第一个词时你应该放多少注意力在输入的第一个词上。然后我们算第二个,  表示我们计算第一个词 Jane 时,我们将会放多少注意力在输入的第二个词上面,后面同理。这些将会告诉我们,我们应该花多少注意力在记号为  的内容上。这是最上面 RNN (也就是解码器Decoder)的一个单元,如何尝试生成第一个此。对于 RNN 的第二步,我们将有一个新的隐藏状态  ,我们也会用一个新的注意力权值集,我们将用  告诉我们生成第二个词 visits 时,我们将会放多少注意力在输入的第一个词上面,后面同理。最后直到结束。
   我们先记住这些符号的意义:  表示是双向RNN已经计算了的前向和后向的特征值,  表示Decoder的第几个隐层状态,  表示对于第  个输出我们关注第  个输入( 注意力权重集 ),  表示Decoder第几个输出。上面我们看到,注意力模型翻译句子时,只注意到一部分的输入句子,更像人类翻译。如下图所示的注意力模型:   
                                           
   我们假定有一个句子,并使用双向RNN,去计算每个词的特征。这里的这项(上图编号1所示)就是注意力权重,这里的这项(上图编号2)来自于这里(上图编号3)。于是,当你在  处生成输出词,你应该花多少注意力在第  个输入词上面,这是生成输出的其中一步,其他的类似。   底层是一个双向RNN,需要处理的序列作为它的输入。改该网络中每一个时间步的激活  中,都包含前向传播和后向传播的激活:        顶层是一个“多对多”结构的RNN,第  步该网络前一个时间步的激活  、输出  以及底层的BRNN中多个时间步的激活  作为输入。对第  个时间步的输入  有:        其中参数  意味着顶层RNN中,第  个时间步输出  中,把多少注意力放在了底层BRNN的第  个时间步的激活  上。它总有:        为了确保参数  满足上式,常用Softmax单元来计算顶层RNN的第  个时间步对底层BRNN的第  个时间步的激活的注意力:        其中的  由顶层RNN的激活  和底层BRNN的几乎  一起输入一个隐层中得到的。   
                                           
   在无法获知  、  和  之间的关系的时候,就用上图所示的神经网络进行学习。

Attention模型

8. attention的相关语法

pay attention to注意某事
pay attention 专心;集中注意力 
pay more attention to更加注意 
pay close attention to  密切注意 
be paid attention to 关心 
give one's attention to v. 注意 

注:这里的to 是介词,后面只能加名词或者动词的现在分词形式。attention的具体含义:attention [ə'tenʃən] 
n.
1. 
专心;留心;注意;精神集中
专注;注目
2. 注意力
3. 关心;照料;考虑;思考;特殊处理
4. 
关怀,体贴(别人)
礼貌,客气
[通常用于复数] 款待;热心;(尤指求爱时表现的)殷勤
5. 【军事】
立正姿势
立正口令
6. 检修,修理
7. 【心理学】注意
8. 【计算机】注意,留心(来自外部的处理要求)
interj.
1. (口令)立正!
2. (有要事当众宣布时说)注意!
最新文章
热门文章
推荐阅读