引言
- 本文是自己在初步学习Attention机制时查阅资料后的汇总总结
- 引用了大量博客资源(详见参考资料)
- 仍在持续更新中
- 如有更深入细致的资料请分享交流一下
- QQ:761322725
注意力机制
源自 引用1视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而忽略其他无用信息。这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,极大地提高了视觉信息处理的效率与准确性。
作者:张俊林
链接:https://www.zhihu.com/question/68482809/answer/264632289
来源:知乎
图1形象化展示了人类在看到一副图像时是如何高效分配有限的注意力资源的,其中红色区域表明视觉系统更关注的目标。
深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。
引入注意力机制的原因?
- 计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
- 优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离以来问题,信息“记忆”能力并不高。
作者:JayLou
链接:https://www.zhihu.com/question/68482809/answer/597944559
来源:知乎
- 注意力机制的分类
- 聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意——是指有预定目的、依赖任务的、主动有意识地聚焦于某一对象的注意力;
- 显著性(saliency-based)注意力:自下而上的有意识的注意力,被动注意——基于显著性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看作是自下而上的基于显著性的注意力机制。
深度学习中常用的第一类注意力机制
原理和计算流程
源于 引用2Attention机制的实质其实就是一个寻址(addressing)的过程,如上图所示:给定一个和任务相关的查询Query向量 q,通过计算与Key的注意力分布并附加在Value上,从而计算Attention Value,这个过程实际上是Attention机制降低计算复杂度的体现:不需要将所有的N个输入信息都输入到神经网络进行计算,只需要从X中选择一些和任务相关的信息输入给神经网络。
具体数学形式表示如下:
注意力机制主要体现在系数上,其反映对于一次查询当前资源中不同数据的重要程度,通过softmax等形式计算出该系数;实现聚焦重要数据,忽略不相关数据的注意力作用
- 计算过程分为三个阶段:
- 在第一个阶段,根据Query和某个Key_i,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值,即如下方式:
- 进行归一化操作,可以通过SoftMax的内在机制更加突出重要元素的权重。即一般采用如下公式计算
- 进行加权求和即可得到Attention数值
该形式的attention称为soft attention,软性注意力机制,其包括两种:
- 普通模式(Key=Value=X)
-
键值对模式(Key!=Value)
图源自 引用2
soft attention原理简单,且容易实现,实际中非常多的应用。
发展
hard attention
soft attention 选择的信息是所有输入信息在注意力分布下的期望。还有一种注意力是只关注到某一个位置上的信息,叫hard attention。硬性注意力有两种实现方式:(1)一种是选取最高概率的输入信息;(2)另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现。
其缺点是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用在反向传播算法进行训练。为了使用反向传播算法,一般使用软性注意力来代替硬性注意力。硬性注意力需要通过强化学习来进行训练。
理解:soft attention通过softmax获得注意力权重,之后进行加权计算,即计算注意力分布下的期望。hard attention则是利用注意力权重进行采样选取信息(根据权重大小做采样)。
global attention & local attention
图源于 引用3 在t时刻,权重系数计算公式如下:图源自 引用3Local Attention:Global Attention明显的缺点就是,每一次,encoder端的所有hidden state都要参与计算,这样做计算开销会比较大,特别是当encoder的句子偏长,比如,一段话或者一篇文章,效率偏低。因此,为了提高效率,Local Attention应运而生。
首先会为decoder端当前的词,预测一个source端对齐位置(aligned position)pt,然后基于pt选择一个窗口,用于计算背景向量ct。在实际应用中,Global Attention应用更普遍,因为local Attention需要预测一个位置向量p,这就带来两个问题:1、当encoder句子不是很长时,相对Global Attention,计算量并没有明显减小。2、位置向量pt的预测并不非常准确,这就直接计算的到的local Attention的准确率。
muilti-head attention
利用多个查询Q = [q1, · · · , qM],来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分,然后再进行拼接:self attention
Self-Attention结构如下
对于self-attention来讲,Q(Query), K(Key), V(Value)三个矩阵均来自同一输入,用X = [x1, · · · , xN ]表示N 个输入信息;通过线性变换得到为查询向量序列,键向量序列和值向量序列:
计算Q和K的点积,为了避免其值过大,会除以一个尺度标准(Scale),为一个query和key向量的维度积,
参考资料
知乎-目前主流的Attention方法都有哪些:张俊林的回答
知乎-目前主流的Attention方法都有哪些:JayLou的回答
知乎专栏-模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用
Attention机制详解(二)——Self-Attention与Transformer
网友评论