attention的讲解

2024-05-10 13:17

1. 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的讲解

2. Attention机制总结

 感兴趣区域ROI和定位机制。
   每一步只关注特定小区域,抽取区域表征信息,再整合到之前的步骤所积累的信息中。
   Soft attention: 以概率进行加权输入到下一层;
   Hard attention: 选取一个输入到下一层。
   策略梯度的强化学习技术 使得训练定位小框位置变得可能,在每次探索中,如果分类模块能正确预测,给与正反馈,强化对这个位置的选择,反之则给负反馈。
   一瞥模块:接收一个位置的二维向量作为输入 画出小框提取特征再结合位置信息 得到中间向量z。
   循环模块:接收中间向量z 包含2层RNN,下层主要积累识别的信息 上层主要预测位置。
   发射模块:上层RNN输出的累积位置信息(隐层的高维向量)映射成二维位置向量,并进行高斯采样。
   分类模块:根据下层 RNN的输出向量进行预测。
   上下文模块:解决第一步往哪儿看的问题 接收整张图怓 输出初始状态向量作为上层RNN的初始输入得到第一个glimpse的位置
   将输入分解成序列化的 同时学习 where and what的思想就是attention的核心
   Attention机制是连接编码层和解码层的一个通道。由于我们在编码(encoder)过程中保留每个RNN单元的隐藏状态(hidden state)得到(h1……hN)。而后对于解码(decoder)过程中每一个timestep,因为有此时decoder的输入和上一步隐藏状态的输出,计算得到当前步的隐藏状态。假设第t步的隐藏状态为St(当前输入和上一步隐藏状态)。
   在每个第t步利用St和每个 编码过程中的隐藏状态 hi进行dot点积得到attention score,也称为相似度或影响得分。即每个 编码过程的隐藏状态 对当前的输出St的一个贡献度。计算公式如下:(此处按照斯坦福大学教材上用st和hi计算,原始论文为st-1)。
   之后用softmax将attention-score转换为概率分布。按照概率分布将隐藏状态转换成加权和。公式如下:
                                           由此得到上下文向量c(或者是注意力向量)。
   最后将注意力向量ct和decoder的t时刻的隐藏状态St并联起来,继续之后步骤。
   其图示如下:
                                                                                   给定一组向量集合values,以及查询向量query,我们根据query向量去计算values加权和,即成为attention机制。
   attention的重点即为求这个集合values中每个value的权值。我们也称attention的机制叫做query的输出关注了(考虑到了)原文的不同部分。
   如seq2seq模型中,St是后面的query向量,而编码过程的隐藏状态hi是values。其就是根据某些规则(或额外信息query)从向量表达集合values中抽取特定的向量进行加权组合的方法,只要从部分向量里用了加权和,计算使用了attention机制。
    1.在向量加权和上做文章。 
    2.在匹配度的计算方式上做文章。 
    针对向量计算方式的变体: 
   soft / global / dynamic (都是soft attention)
   hard
   local attention(半软半硬attention)
   静态attention
   强制前向attention
    soft / global / dynamic (都是soft attention) 
   是求概率分布,就是对于任意一个单词或者values都给出概率,attention得分经过softmax后权值用aph表示,把attention向量用ct表示。
    hard attention 
   一般用在图像中  只选中一个区域,只选1个,其余为0。
    local attention(半软半硬attention) 
   先选中一个区域,然后在其中的各个小部分生成概率分布。
   论文:Effective Approaches to Attention-based Neural Machine Translation
   在这个模型中,对于是时刻t的每一个目标词汇,模型首先产生一个对齐的位置 pt(aligned position),context vector 由编码器中一个集合的隐藏层状态计算得到,编码器中的隐藏层包含在窗口[pt-D,pt+D]中,D的大小通过经验选择。
   上式之中,大S指的是源句子的长度,Wp和vp是指的模型的参数,通过训练得到,为了支持pt附近的对齐点,设置一个围绕pt的高斯分布,其中小s是在以pt为中心的窗口中的整数,pt是一个在[0,S]之间的实数。小Sigma σ  一般取窗口大小的一半。
    静态attention 
   对输出句子共用一个St。一般在BiLstm首位hidden state输出拼接起来作为St(图中为u)。
    针对attention-score计算的变体: 
                                           第一个,s和hi的维数要一样。
   第二个W矩阵是训练得到的参数,维度是d2 x d1,d2是s的hidden state输出维数,d1是hi的hidden state维数,也就是两者可以不同维度。
   最后就是上面提到的additive attention,是对两种hidden state 分别再训练矩阵然后激活过后再乘以一个参数向量变成一个得分。
   其中,W1 = d3xd1,W2 = d3xd2,v = d3x1 ,d1,d2,d3分别为h,s,v的维数,属于超参数。
    Self- attention 
   在没有额外信息下,仍然可以允许向量values使用self attention来处理自己,从句子中提取需要关注的信息。
                                           2.以当前状态本身去计算得分作为当前单元attention score,这种方式更常见,也更简单,例如:
                                            key-values attention 
   即将hi 隐藏状态拆分成两部分一部分是key(i) 一部分是values(i)然后只针对key部分计算attention的权值,然后加权使用values部分的值进行加权求和。
                                            Multi-head attention: 
   首先,google先定义了一下attention的计算,也是定义出key,value,query三个元素(在seq2seq里面,query是st,key和value都是hi)在self 里面,query 是当前要计算的hi,k和v仍然一样,是其他单元的hidden state。在key value attention里面key和value则是分开了的。
   然后除以了一下根号dk,为了让内积不至于太大(太大的话softmax后就非0即1了,不够“soft”了)
   这里我们不妨假设,Q是
                                                                                                                                                                   
   Wi用来先在算attention对三个矩阵做不同的矩阵变换映射一下,变成nxdk’,mxdk’,mxdv’维度。
   最后做并联,有点类似于inception 里面多个卷积核的feature map并联的感觉。附:多核卷积示意图。
                                           部分内容参考CSDN: https://blog.csdn.net/hahajinbu/article/details/81940355 

3. 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机制概念整理