导航:首页 > 网络问题 > 注意力机制用什么网络

注意力机制用什么网络

发布时间:2023-03-27 14:38:19

A. 注意力机制

本文大部分的内容来自于 深度学习中的注意力机制

意力机制借鉴了人类注意力的说法,比如我们在阅读过程中,会把注意集中在重要的信息上。在训练过程中,输入的权重也都是不同的,注意力机制就是学习到这些权重。最开始attention机制在CV领域被提出来,但后面广泛应用在NLP领域。

需要注意的是,注意力机制是一种通用的思想和技术,不依赖于任何模型,换句话说,注意力机制可以用于任何模型。只是我们介绍注意力机制的时候更多会用encoder-decoder框架做介绍。

Encoder-Decoder 框架可以看作是一种深度学习领域的研究模式,应用场景异常广泛。下图是文本处理领域里Encoder-Decoder 框架最抽象的一种表示。

在NLP领域,可以把Encoder-Decoder框架看作是:将一个句子(篇章)转换成另一个句子(篇章)。最直观的例子就是机器翻译,将一种语言的表达翻译成另一种语言。对孙磨孙于句子对<source,target>,将给定输入句子
source,通过Encoder-Decoder框架生成目标句子target。其中,source和target都是一组单词序列:

Encoder是对source进行编码,转换成中间语义 :

对于解码器Decoder,其任务是根据中间语义C和当前已经生成的历史信息来生成下一时刻要生成的单词:

我们从最常见的Soft Attention模型开始介绍attention的基本思路。

在上一节介绍的Encoder-Decoder框架是没有体现出“注意力模型”的,为什么这么说呢?我们可以看下target的生成过程:

其中, 是Decoder的非线性变换函数。从上面式子中可以看出,在生成目标句子的单词时,不论生成哪个单词,它们使用的输入句子source的语义编码 都是一样的,没有任何区别。而语义编码 又是通过对source经过Encoder编码产生的,因此对于target中的任何一个单词,source中任意单词对某个目标单词 来说影响力都是相同的,这就是为什么说图1中的模型没有体现注意力的原因。

下面从一个例子入手,具体说明下注意力机制是怎么做的。

比游庆如机器翻译任务,输入source是英文句子:Tom chase Jerry;输出target想得到中文:汤姆 追逐 杰瑞。在翻译“Jerry”这个单词的时候,在普通Encoder-Decoder模型中,source里的每个单词对“杰瑞”的贡献是相同的,很明显这样不太合理,因为“Jerry”对于翻译成“杰瑞”更重要。如果引入Attention模型,在生成“杰瑞”的时候,应该体现出英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:

每个英文单词的概率代表了翻译当前单词“杰瑞”时注意力分配模型分配给不同英文单词的注意力大小。同理,对于target中任意一个单词都应该有对应的source中的单词的注意力分配概率,可以把所有的注意力概率看作 ,其中 表示source长度, 表示target长度。而且,由于注意力模型的加入,原来在生成target单词时候的中间语义 就不再是固定的,而是会根据注意力概率变化的 ,加入了注意力模型的Encoder-Decoder框架就变成了如图2所示。

根据图则链2,生成target的过程就变成了下面形式:

因为每个 可能对应着不同的注意力分配概率分布,比如对于上面的英汉翻译来说,其对应的信息可能如下:

其中, 表示Encoder对输入英文单词的某种变换函数,比如如果Encoder是用RNN模型的话,这个 函数的结果往往是某个时刻输入 后隐层节点的状态值;g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般的做法中,g函数就是对构成元素加权求和,即:

其中, 代表输入句子Source的长度, 代表在Target输出第 个单词时Source输入句子第 个单词的注意力分配系数,而 则是Source输入句子中第 个单词的语义编码。假设下标 就是上面例子所说的“汤姆”生成如下图:

那另一个问题来了:注意力概率分布是怎么得到的呢?为了便于说明,我们假设图1的Encoder-Decoder框架中,Encoder和Decoder都采用RNN模型,那么图1变成下图4:

那么注意力分配概率分布值的通用计算过程如图5:

上面就是经典的soft Attention模型的基本思想,区别只是函数 会有所不同。

从我的角度看,其实Attention机制可以看作,Target中每个单词是对Source每个单词的加权求和,而权重是Source中每个单词对Target中每个单词的重要程度。因此,Attention的本质思想会表示成下图6:

将Source中的构成元素看作是一系列的<Key, Value>数据对,给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,即权重系数;然后对Value进行加权求和,并得到最终的Attention数值。将本质思想表示成公式如下:

其中, 表示Source的长度。

深度学习中的注意力机制 中提到:

因此,Attention机制的具体计算过程实际上分成了3个阶段,如图7:

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

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

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

通过如上三个阶段的计算,就可以求出针对Query的Attention数值。

上面介绍的是soft Attention,hard Attention的区别在于soft Attention中 是概率分布,而hard Attention取值为0/1。Hard Attention在图像上有使用,具体可见 引入attention机制 。

这里的global attention其实就是soft Attention,global attention需要考虑encoder中所有的 ;而local Attention直观上理解是只考虑局部的 。

Self-attention是Google在transformer模型中提出的,上面介绍的都是一般情况下Attention发生在Target元素Query和Source中所有元素之间。而Self Attention,指的是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力机制。当然,具体的计算过程仍然是一样的,只是计算对象发生了变化而已。

上面内容也有说到,一般情况下Attention本质上是Target和Source之间的一种单词对齐机制。那么如果是Self Attention机制,到底学的是哪些规律或者抽取了哪些特征呢?或者说引入Self Attention有什么增益或者好处呢?仍然以机器翻译为例来说明,如图8和图9:

具体做法是点乘 和 ,然后除以 ,并经过Softmax,以此得到 的权重。也就是说Attention计算过程如下式,其中 是scaled factor:

注意力的计算一般有两种:加性注意力(additive attention)、乘法(点积)注意力(multiplicative attention)。(这里可以和第3部分计算相似度对应)

加性注意力是最经典的注意力机制,它使用了有一个隐藏层的前馈网络(全连接)来计算注意力; 乘法注意力就是Transformer用的方式。这两种注意力在复杂度上是相似的,但是乘法注意力在实践中要更快速、具有高效的存储,因为它可以使用矩阵操作更高效地实现。

Transformer原文:

Multi-Head Attention是用不同的 得到不同的Attention,最后将这些Attention拼接起来作为输出。公式如下:

其中, ;在Transformer模型中, 。

Scaled Dot-Proct Attention和Multi-Attention如下图所示:

B. 注意力机制与外部记忆

根据通用近似定理,前馈网络和循环网络都有很强的能力。但由于优化算法和计算能力的限制,在实践中很难陪裤达到通用近似的能力。

神经网络中可以存储的信息量称为 网络容量(Network Capacity) 。一般来讲,利用一组神经元来存储信息时,其 存储容量和神经元的数量以及网络的复杂度成正比 。如果要存储越多的信息,神经元数量就要越多或者网络要越复杂,进而导致神经网络的参数成倍地增加。

大脑神经系统有两个重要机制可以解决信息过载问题: 注意力和记忆机制 。我们可以借鉴人脑解决信息过载的机制,从两方面来提高神经网络处理信息的能力。 一方面是注意力,通过自上而下的信息选择机制来过滤掉大量的无关信息;另一方面是引入额外的外部记忆,优化神经网络的记忆结构来提高神经网络存储信息的容量

在计算能力有限情况下,注意力机制(Attention Mechanism)作为一种资源分配方案,将计算资源分配给更重要的任务,是解决信息超载问题的主要手段。

注意力是一种人类不可或缺的复杂认知功能,指人可以在关注一些信息的同时忽略另一些信息的选择能力

注意力一般分为两种:一种是自上而下的有意识的注意力,称为 聚焦式(Focus)注意力 。聚焦式注意力是指有预定目的、依赖任务的、主动地有意识地聚焦于某一对象的注意力;另一种是自下而上的无意识的注意力,称为 基于显着性(Saliency-Based)的注意力 。基于显着性的注意力是由外界刺激驱动的注意,不需要主动干预,也和任务无关。

一个和注意力有关的例子是 鸡尾酒会效应 。当一个人在吵闹的鸡尾酒会上和朋友聊天时,尽管周围噪音干扰很多,他还是可以听到朋友的谈话内容,而忽略其他人的声音(聚焦式注意力)。同时,如果未注意到的背景声中有重要的词(比如他的名字),他会马上注意到(显着性注意力)。

在目前的神经网络中,我们 可以将最大汇聚(Max Pooling)、门控(Gating)机制来近似地看作是自下而上的基于显着性的注意力机制 。除此之外,自上而下的会聚式注意力也是一种有效的信息选择方式。

用 表示 组输入信息,其中每个向量 都表示一组输入信息。为了节省计算资源,不需要将所有信息都输入到神经网络,只需要从 中选择一些和任务相关的信息。 注意力机制的计算可以分为两步:一是在所有输入信息上计算注意力分布,二是根据注意力分布来计算输入信息的加权平均

给定一个和任务相关的查询向量 ,我们用注意力变量 来表示被选择信息的索引位置,即 表示选择了第 个输入向量。为了方便计算,我们采用一种“软性”的信息选择机制,首先计算在给定 和 下,选择第 个输入向量的概率 :

其中 称为注意力分布(Attention Distribution), 为 注意力打分函数 ,可以使用以下几种方式来计算:

其中 为可学习的网络参数, 为输入向量的维度。理论上,加性模型和点积模型的复杂度差不多,但是点积模型在实现上可以更好地利用矩阵乘积,从而计算效率更高。但当输入向量的维念厅度 比较高,点积模型的值通常有比较大方差,从而导致 函数的梯度会比较小。因此,缩放点积模型芦高简可以较好地解决这个问题。

上式称为 软性注意力机制(Soft Attention Mechanism) 。下图给出了软性注意力机制的示例。

上面提到的注意力是 软性注意力,其选择的信息是所有输入向量在注意力分布下的期望。此外,还有一种注意力是只关注到某一个输入向量,叫做硬性注意力

硬性注意力有两种实现方式:

其中 为概率最大的输入向量的下标,即

硬性注意力的一个缺点是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布间的函数关系不可导,因此无法用反向传播算法进行训练(硬性注意力需要通过强化学习来进行训练) 。为了使用反向传播算法,一般使用软性注意力来代替硬性注意力。

更一般地,我们可以用 键值对(key-value pair) 格式来表示输入信息,其中“键”用来计算注意力分布 ,“值”用来计算聚合信息。

用 表示 组输入信息,给定任务相关的查询向量 时,注意力函数为:

下图给出键值对注意力机制的示例。当 时,键值对模式就等价于普通的注意力机制。

多头注意力(Multi-Head Attention)是利用多个查询 ,来平行地计算从输入信息中选取多组信息。每个注意力关注输入信息的不同部分

其中 表示向量拼接。

在之前介绍中,我们假设所有的输入信息是同等重要的,是一种扁平(Flat)结构,注意力分布实际上是在所有输入信息上的多项分布。但 如果输入信息本身具有层次结构,比如文本可以分为词、句子、段落、篇章等不同粒度的层次,我们可以使用层次化的注意力来进行更好的信息选择

注意力机制一般可以用作一个神经网络中的组件。

注意力机制可以分为两步:一是计算注意力分布 ,二是根据 来计算输入信息的加权平均。我们可以只利用注意力机制中的第一步,并 将注意力分布作为一个软性的指针(pointer)来指出相关信息的位置

指针网络(Pointer Network) 是一种序列到序列模型, 输入是长度为 的向量序列 , 输出是下标序列 。

和一般的序列到序列任务不同,这里的输出序列是输入序列的下标(索引) 。比如输入一组乱序的数字,输出为按大小排序的输入数字序列的下标。比如输入为20, 5, 10,输出为1, 3, 2。

条件概率 可以写为:

其中条件概率 可以通过注意力分布来计算。假设用一个循环神经网络对 进行编码得到向量 ,则:

其中 为在解码过程的第 步时,每个输入向量的未归一化的注意力分布:

其中 为可学习的参数。下图给出指针网络的示例。

当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列。

基于卷积或循环网络的序列编码都是可以看做是一种局部的编码方式,只建模了输入信息的局部依赖关系。虽然循环网络理论上可以建立长距离依赖关系,但是由于信息传递的容量以及梯度消失问题,实际上也只能建立短距离依赖关系 。如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一种方法是 增加网络的层数 ,通过一个深层网络来获取远距离的信息交互;另一种方法是 使用全连接网络 。全连接网络是一种非常直接的建模远距离依赖的模型,但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。这时我们就可以 利用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(Self-Attention Model)

假设输入序列为 ,输出序列为 ,首先我们可以通过线性变换得到三组向量序列:

其中 分别为查询向量序列,键向量序列和值向量序列, 分别为可学习的参数矩阵。

利用键值对的注意力函数,可以得到输出向量 :

其中 为输出和输入向量序列的位置, 连接权重 由注意力机制动态生成

下图给出全连接模型和自注意力模型的对比,其中实线表示为可学习的权重,虚线表示动态生成的权重。 由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列

自注意力模型可以作为神经网络中的一层来使用,既可以用来替换卷积层和循环层,也可以和它们一起交替使用。

为了增强网络容量,我们可以 引入辅助记忆单元,将一些信息保存辅助记忆中,在需要时再进行读取,这样可以有效地增加网络容量 。这个引入辅助记忆单元一般称为 外部记忆(External Memory) ,以区别与循环神经网络的内部记忆(即隐状态)。

生理学家发现信息是作为一种 整体效应(collective effect) 存储在大脑组织中。当大脑皮层的不同部位损伤时,其导致的不同行为表现似乎取决于损伤的程度而不是损伤的确切位置。 大脑组织的每个部分似乎都携带一些导致相似行为的信息。也就是说,记忆在大脑皮层是分布式存储的,而不是存储于某个局部区域

人脑中的记忆具有 周期性 联想性

长期记忆可以类比于人工神经网络中的权重参数,而短期记忆可以类比于人工神经网络中的隐状态

除了长期记忆和短期记忆,人脑中还会存在一个“缓存”,称为 工作记忆(Working Memory) 。在执行某个认知行为(比如记下电话号码,算术运算)时,工作记忆是一个记忆的临时存储和处理系统,维持时间通常为几秒钟。

和之前介绍的LSTM中的记忆单元相比,外部记忆可以存储更多的信息,并且不直接参与计算,通过读写接口来进行操作。而 LSTM模型中的记忆单元包含了信息存储和计算两种功能,不能存储太多的信息。因此,LSTM中的记忆单元可以类比于计算机中寄存器,而外部记忆可以类比于计算机中的存储器:内存、磁带或硬盘等

借鉴人脑中工作记忆,可以在神经网络中引入一个外部记忆单元来提高网络容量。 外部记忆的实现途径有两种:一种是结构化的记忆,这种记忆和计算机中的信息存储方法比较类似,可以分为多个记忆片段,并按照一定的结构来存储;另一种是基于神经动力学的联想记忆,这种记忆方式具有更好的生物学解释性

一个不太严格的类比表格如下:

为了增强网络容量,一种比较简单的方式是引入结构化的记忆模块, 将和任务相关的短期记忆保存在记忆中,需要时再进行读取 。这种装备外部记忆的神经网络也称为 记忆网络(Memory Network,MN) 记忆增强神经网络(Memory Augmented Neural Network,MANN)

记忆网络结构如图:

一般有以下几个模块构成:

这种结构化的外部记忆是带有地址的,即每个记忆片段都可以按地址读取和写入。要实现类似于人脑神经网络的联想记忆能力,就需要按内容寻址的方式进行定位,然后进行读取或写入操作。 按内容寻址通常使用注意力机制来进行。通过注意力机制可以实现一种“软性”的寻址方式,即计算一个在所有记忆片段上的分布,而不是一个单一的绝对地址 。比如读取模型 的实现方式可以为:

其中 是主网络生成的查询向量, 为打分函数。类比于计算机的存储器读取, 计算注意力分布的过程相当于是计算机的“寻址”过程,信息加权平均的过程相当于计算机的“内容读取”过程 。因此,结构化的外部记忆也是一种联想记忆,只是其结构以及读写的操作方式更像是受计算机架构的启发。

通过引入外部记忆,可以将神经网络的参数和记忆容量的“分离”,即在少量增加网络参数的条件下可以大幅增加网络容量。 注意力机制可以看做是一个接口,将信息的存储与计算分离

端到端记忆网络(End-To-End Memory Network,MemN2N) 采用一种可微的网络结构,可以多次从外部记忆中读取信息。 在端到端记忆网络中,外部记忆单元是只读的

给定一组需要存储的信息 ,首先将其转换成两组记忆片段 和 ,分别存放在两个外部记忆单元中,其中 用来进行寻址, 用来进行输出。

主网络根据输入 生成 ,并使用注意力机制来从外部记忆中读取相关信息 :

并产生输出:

其中 为预测函数。当应用到分类任务时, 可以设为softmax 函数。

为了实现更新复杂的计算,我们可以让主网络和外部记忆进行多轮交互。在第 轮交互中,主网络根据上次从外部记忆中读取的信息 ,产生新的查询向量:

其中 为初始的查询向量, 。

假设第 轮交互的外部记忆为 和 ,主网络从外部记忆读取信息为:

端到端记忆网络结构如图:

C. CA:用于移动端的高效坐标注意力机制 | CVPR 2021

论文: Coordinate Attention for Efficient Mobile Network Design

 目前,轻量级网络的注意力机制大都采用SE模块,仅考虑了通道间的信息,忽略了位置信息。尽管后来的BAM和CBAM尝试在降低通道数后通过卷积来提取位置注意力信息,但卷积只能提取局部关系,缺乏长距离关系提取的能力。为此,论文提出了新的高效注意力机制coordinate attention,能够将横向和纵向的位置信息编码到channel attention中,使得移动网络能够关注大范围的位置信息又不会带来过多的计算量。
 coordinate attention的优势主要有以下几点:

 Coordinate Attention可看作增强移动网络特征表达能力的计算单元培芦,接受中间特征 作为输入,输出与 大小相同的增强特征 。

 Coordinate Attention基于coordinate information embedding和coordinate attention generation两个步骤来编码通道关系和长距离关系。

 channel attention常用全局池化编码全局空间信息,将全局信息压缩成一个标量,难以保留重要的空间信息。为此,论文将全局池化改造成两个1维向量的编码操作。对于输入 ,使用池化核 和 来编码水平方向和垂直方向特征,即第 维特征的输出为:

 上面的公式从不同的方向集成特征,输出一对方向可知的特征图。对比全局缺中游池化的压缩方式,这样能够允许attention block捕捉单方向上的长距离关系同时保留另一个方向上的空间信息,帮助网络更准确地定位目标。

 为了更好地利用上述的coordinate infomation,论文提出了配套的coordinate attention generation操作,主要基于以下三点准则进行设计:

 首先将公式4和公式5的输出concatenate起来,使用 卷积、BN和非线性激活进行特征转化:

  为包含横向和纵向空间信息的中间特征, 为缩减因子。这里两个方向的特征没有做激烈的融合,concatenate的主要目的我觉得是进行统一的BN操作。随后将 分为两个独立的特征 和 ,使用另外两个 卷积和sigmoid函数进行特征转化,使其维度与输入 一致:

 将输出 和 合并成权重矩阵,用于计算coordinate attention block输出:

 coordinate attention block与se block的最大区别是,coordinate attention block的每个权重都包含了通道间信息、横向空间信息和纵向空间信息,能够帮助网络伏销更准确地定位目标信息,增强识别能力。

 将coordinate attention block应用于MobileNetV2和MobileNeXt上,block结构如图3所示。

 基于MobileNetV2进行模块设置的对比实验。

 不同注意力结构在不同主干网络上的性能对比。

 对目标检测网络的性能对比。

 对语义分割任务的性能对比。

 论文提出新颖的轻量级通道注意力机制coordinate attention,能够同时考虑通道间关系以及长距离的位置信息。通过实验发现,coordinate attention可有效地提升模型的准确率,而且仅带来少量的计算消耗,十分不错。



D. 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.

参考:

台大李宏毅课程

E. se注意力机制优缺点

SE(Selective Encoding)注意力机制是一种在文本分类中广泛使用的深度学习模型。余山它将注意力机制应用于神经编码器中的每个颤孝时间步,以在输入序列中选择重要的部分。它的优点是:

1. 给出了一个直观的方式,以便将不同程度的注意力分配到每个时间步的输入中。竖洞中
2. SE注意力机制可以提高神经网络的分类性能,因为它可以让网络自动地选取最具代表性的特征进行分类。
3. SE注意力机制能够帮助神经网络更好地理解输入序列中的语义信息。

缺点是:

1. 需要更多的计算资源和时间才能运行。
2. 训练一个高质量的注意力模型需要大量的数据,否则可能会导致过拟合。

F. 注意力机制详解

Attention机制在近几年来在图像,自然语言处理等领域中都取得了重要的突破,被证明有益于提高模型的性能。Attention机制本身也是符合人脑和人眼的感知机制,激渣这里我们主要以计算机视觉领域为例,讲述Attention机制的原理,应用以及模型的发展。

所谓Attention机制,便是聚焦于局部信息的机制,比如图像中的某一个图像区域。随着任务的变化,注意力区域往往会发生变化。

面对上面这样的一张图,如果你只是从整体来看,只看到了很多人头,但是你拉近一个一个仔细看就了不得了,都是天才科学家。

图中除了人脸之外的信息其实都是无用的,也做不了什么任务, Attention机制便是要找到这些最有用的信息 ,可以想见最简单的场景就是从照片中检测人脸了。

和注意力机制相伴而生的一个任务便是显着目标检测,即salient object detection。它的输入是一张图,输出是一张概率图,概率越大的地方,代表是图像中重要目标的概率越大,即人眼关注的重点,一个典型的显着图如下:

右图就是左图的显着图,在头部位置概率最大,另外腿部,尾巴也有较大概率,这就是图中真正有用的信息。

显着目标检测需要一个数据集,而这样的数据集的收集便是通过追踪多个实验者的眼球在一定时间内的注意力方向进行平均得到,典型的步骤如下:

于是就能得到下面这样的图,第二行是眼球追踪结果,第三行就是显着目标概率图。

上面讲述的都是空间上的注意力机制,即关注的是不同空间位置,而在CNN结构中,还有不同的特征通道,因此不同特征通道也有类似的原理,下面一起讲述。

注意力机制的本质就是定位到感兴趣的信息,抑制无用信息,结果通常都是以概率图或者概率特征向量的形式展示,从原理上来说,主要分为 空间注意力模型,通道注意力模型,空间和通道混合注意力模型 三种, 这里不区分soft和hard attention

不是图像中所有的区域对任务的贡献都是同样重要的,只有任务相关的区域才是需要关心的,比如分类任务的主体,空间注意力模型就是寻找网络中最重要的部位进行处理。

我们在这里给大家介绍两个具有代表性的模型,第一个就是Google DeepMind提出的STN网络(Spatial Transformer Network[1])。它通过学习输入的明闹悄形变,从而完成适合任务的预处理操作,是一种基于空间的Attention模型,网络结构如下:

这里的Localization Net用于生成仿射变换系数,输入是C×H×W维的图像,输出是一个空间变换系数,它的大小根据要学习的变换类型而定,如果是仿射变换,则是一个6维向量。

这样的一个网弯链络要完成的效果如下图:

即定位到目标的位置,然后进行旋转等操作,使得输入样本更加容易学习。这是一种一步调整的解决方案,当然还有很多迭代调整的方案,感兴趣可以去有三知识星球星球中阅读。

相比于Spatial Transformer Networks 一步完成目标的定位和仿射变换调整,Dynamic Capacity Networks[2]则采用了两个子网络,分别是低性能的子网络(coarse model)和高性能的子网络(fine model)。低性能的子网络(coarse model)用于对全图进行处理,定位感兴趣区域,如下图中的操作fc。高性能的子网络(fine model)则对感兴趣区域进行精细化处理,如下图的操作ff。两者共同使用,可以获得更低的计算代价和更高的精度。

由于在大部分情况下我们感兴趣的区域只是图像中的一小部分,因此空间注意力的本质就是定位目标并进行一些变换或者获取权重。

对于输入2维图像的CNN来说,一个维度是图像的尺度空间,即长宽,另一个维度就是通道,因此基于通道的Attention也是很常用的机制。

SENet(Sequeeze and Excitation Net)是2017届ImageNet分类比赛的冠军网络,本质上是一个基于通道的Attention模型,它通过建模各个特征通道的重要程度,然后针对不同的任务增强或者抑制不同的通道,原理图如下。

在正常的卷积操作后分出了一个旁路分支,首先进行Squeeze操作(即图中Fsq(·)),它将空间维度进行特征压缩,即每个二维的特征图变成一个实数,相当于具有全局感受野的池化操作,特征通道数不变。

然后是Excitation操作(即图中的Fex(·)),它通过参数w为每个特征通道生成权重,w被学习用来显式地建模特征通道间的相关性。在文章中,使用了一个2层bottleneck结构(先降维再升维)的全连接层+Sigmoid函数来实现。

得到了每一个特征通道的权重之后,就将该权重应用于原来的每个特征通道,基于特定的任务,就可以学习到不同通道的重要性。

将其机制应用于若干基准模型,在增加少量计算量的情况下,获得了更明显的性能提升。作为一种通用的设计思想,它可以被用于任何现有网络,具有较强的实践意义。而后SKNet等方法将这样的通道加权的思想和Inception中的多分支网络结构进行结合,也实现了性能的提升。

通道注意力机制的本质,在于建模了各个特征之间的重要性,对于不同的任务可以根据输入进行特征分配,简单而有效。

前述的Dynamic Capacity Network是从空间维度进行Attention,SENet是从通道维度进行Attention,自然也可以同时使用空间Attention和通道Attention机制。

CBAM(Convolutional Block Attention Mole)是其中的代表性网络,结构如下:

通道方向的Attention建模的是特征的重要性,结构如下:

空间方向的Attention建模的是空间位置的重要性,结构如下:

首先将通道本身进行降维,分别获取最大池化和均值池化结果,然后拼接成一个特征图,再使用一个卷积层进行学习。

这两种机制,分别学习了通道的重要性和空间的重要性,还可以很容易地嵌入到任何已知的框架中。

除此之外,还有很多的注意力机制相关的研究,比如 残差注意力机制,多尺度注意力机制,递归注意力机制 等。

从原理上来说,注意力机制在所有的计算机视觉任务中都能提升模型性能,但是有两类场景尤其受益。

我们知道细粒度分类任务中真正的难题在于如何定位到真正对任务有用的局部区域,如上示意图中的鸟的头部。Attention机制恰巧原理上非常合适,使用了注意力机制,对模型的提升效果很明显。

我们又回到了开头,没错,Attention的本质就是重要/显着区域定位,所以在目标检测领域是非常有用的。

上图展示了几个显着目标检测的结果,可以看出对于有显着目标的图,概率图非常聚焦于目标主体,在网络中添加注意力机制模块,可以进一步提升这一类任务的模型。

G. Attention(注意力)机制

Attention(注意力)机制其实来源于人类的认识认知能力。比如当人们观察一个场景或处理一件事情时,人们往往会关注场景的显着性物体,处理事情时则希望抓塌宴高住主要矛盾。注意力机制使得人类能够关注事物的重要部分,忽略次要部分,更高效的处理所面临的各种事情。

注意力机制在NLP领域被真正的发扬光大,其具有参数少、速度快、效果好的特点,如2018年的BERT、GPT 领跑各项 NLP 任务效果。由此在此领域,transformer和attention结构受到了极大的重视。

第二步:使用权重对Value进行加权求和从而得到Attention Value。

注意力是一种机制,或者方法论,并没有严格的数学定义。比如,传统的局部图像特征提取、显着性检测、滑动窗口方法等都可以看作一种注意力机制。在神经网络中,注意力模块通常是一个额外的神经网络,能够硬性选择输入的某些部分,或者给输入的不同部分分配不同的权重。

根据权重在特征空间和通道上的应用方式不同,主要可分为

其增加了一个通道注意力模块,学习每个通道的权重,通过抑制无关特征提升卷积特征的表示性能。SENet通过Squeeze模块和Exciation模块实现所述功能,首先通过Squeeze模块对卷积特征进行进行压缩,即在通道维度上执行全局池化操作,在SENet中采用的是全局平均池化,作者提到该操作能够使得靠近数据输入的特征也可以具有全局感受野,这一点在很多的任务中是非常有用的。然后是通过全连接网络进行Exciation操作,作者在全连接网络中降维操作的目的是一方面降低了网络计算量,一方面增加了网络的非线性能力。最后将得到通道attention应用到原始卷积特征上,即通过乘法加权的方式乘到先前的特征上,从而提升重要特征,抑制不重要特征。

从图中可以看出,首先将输入张量进行降维到C通道,与SENet不同的是采用二阶pool的方式,计算得到C*C的协祥迅方差矩阵,这种计算方式引入了通团尺道之间的相互关系,然后进行线性卷积和非线性激活的两个连续运算,得到通道注意力。

除此之外,还有很多的注意力机制相关的研究,比如残差注意力机制,多尺度注意力机制,递归注意力机制等。

H. 注意力机制(Attention)Non-local Neural Networks

2018CVPR的一篇论文,主要解决的问题是通过Non-local的方法扩大传统CNN,RNN方法的感知域(即传统的CNN一个像素点对应的输出只受其neighbor的影响,Non-local方法使每一点的输出受所有像素点的影响)。模型结构简单,效果提升显着,且桥余可以方便的嵌入到现有网络中。对于一个视频信息在时间域,空间域都有提升:

输入数据X中每个点i对应的输出Y,通过下式求得:

上述过程可以理解为一个加权平均过程,其中函数 看作对输入数据的预处理过程,函数f理解敏族滚为数据各位置间的相关程度。文中给出了几个 函数的实例,同时指出了最终效果对函数的选择的敏感度穗激不高。

为简化函数g选择 做一个线性的embedding,函数f采用以下实例:

Gaussian:              Embedded Gaussian:

Dot proct:

Concatenation:

模型的功能可以通过一个残差块实现,残差块定义为 ,结构如下

文中还提到了一个subsample trick,在 后加上一个最大池化层,可以有效地提升计算效率。

文章最后针对视频分类,图像识别,语义分割多个领域进行实验,加入残差块的网络都取得了很大性能提升,同时对加入的位置进行实验,得出加入残差块的位置在网络的浅层效果更加明显(自己理解是浅层的future map维度比较大,全局获得的信息更多)。

阅读全文

与注意力机制用什么网络相关的资料

热点内容
如何防止网络危险 浏览:267
网络安全二级认证条件 浏览:721
寻找手机数据网络 浏览:370
哪个牌子电视机可看网络电视 浏览:82
手机热点连不上网络怎么回事 浏览:279
必虎路由器怎么关闭访客网络 浏览:945
如何查询没有网络信号的原因 浏览:961
网络公关部有什么岗位 浏览:814
中国移动网络密钥重设 浏览:891
没有网络打哪个电话最好 浏览:13
地摊和网络哪个比较好 浏览:9
网络问卷一般多少钱 浏览:380
停电了笔记本如何有网络 浏览:161
苹果手表上的微信没有网络连接 浏览:627
移动网络通用应该怎样使用 浏览:401
网络教育客观题满分60多少合格 浏览:56
手机网络信号97d 浏览:435
55寸网络电视怎么接线 浏览:480
网络不能用怎么拨号 浏览:783
计算机网络中ppp名词解释 浏览:285

友情链接