注意力机制

143 阅读10分钟

1. 注意力机制(Attention)

1.1 什么是注意力机制

人在处理信息的时候,会将注意力放在需要关注的信息上,对于其他无关的外部信息进行过滤,这种处理方式被称为注意力机制。

不随意线索和随意线索。 image.png

1.2 QKV

  • 查询(Query):  指的是查询的范围,自主提示,即主观意识的特征向量
  • 键(Key):  指的是被比对的项,非自主提示,即物体的突出特征信息向量
  • 值(Value) :   则是代表物体本身的特征向量,通常和Key成对出现

注意力机制是通过QueryKey的注意力汇聚(给定一个 Query,计算Query与 Key的相关性,然后根据QueryKey的相关性去找到最合适的 Value)实现对Value的注意力权重分配,生成最终的输出结果 image.png

2. 自注意力机制 Self-Attention

2.1 背景

自注意力机制想要解决的问题是,神经网络接收的输入是很多大小不一的向量,并且不同向量向量之间有一定的关系,但是实际训练的时候无法充分发挥这些输入之间的关系而导致模型训练结果效果极差。比如机器翻译(序列到序列的问题,机器自己决定多少个标签),词性标注(Pos tagging一个向量对应一个标签),语义分析(多个向量对应一个标签)等文字处理问题。

针对全连接神经网络对于多个相关的输入无法建立起相关性的这个问题,通过自注意力机制来解决,自注意力机制实际上是想让机器注意到整个输入中不同部分之间的相关性

自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。自注意力机制的关键点在于,Q、K、V是同一个东西,或者三者来源于同一个X,三者同源。通过X找到X里面的关键点,从而更关注X的关键信息,忽略X的不重要信息。不是输入语句和输出语句之间的注意力机制,而是输入语句内部元素之间或者输出语句内部元素之间发生的注意力机制。

2.2 注意力机制和自注意力机制的区别:

(1)注意力机制的Q和K是不同来源的,例如,在Encoder-Decoder模型中,K是Encoder中的元素,而Q是Decoder中的元素。在中译英模型中,中文句子通过编码器被转化为一组特征表示K,这些特征表示包含了输入中文句子的语义信息。解码器在生成英文句子时,会使用这些特征表示K以及当前生成的英文单词特征Q来决定下一个英文单词是什么。

(2)自注意力机制的Q和K则都是来自于同一组的元素,例如,在Encoder-Decoder模型中,Q和K都是Encoder中的元素,即Q和K都是中文特征,相互之间做注意力汇聚。也可以理解为同一句话中的词元或者同一张图像中不同的patch,这都是一组元素内部相互做注意力机制,因此,自注意力机制(self-attention)也被称为内部注意力机制(intra-attention)。

2.3 自注意力机制的问题

自注意力机制的原理是筛选重要信息,过滤不重要信息,这就导致其有效信息的抓取能力会比CNN小一些。这是因为自注意力机制相比CNN,无法利用图像本身具有的尺度,平移不变性,以及图像的特征局部性(图片上相邻的区域有相似的特征,即同一物体的信息往往都集中在局部)这些先验知识,只能通过大量数据进行学习。这就导致自注意力机制只有在大数据的基础上才能有效地建立准确的全局关系,而在小数据的情况下,其效果不如CNN。

另外,自注意力机制虽然考虑了所有的输入向量,但没有考虑到向量的位置信息。在实际的文字处理问题中,可能在不同位置词语具有不同的性质,比如动词往往较低频率出现在句首。

位置编码(Positional Encoding) :对每一个输入向量加上一个位置向量e,位置向量的生成方式有多种,通过e来表示位置信息带入self-attention层进行计算。

2.1 计算过程

qkv求值

q: query(to match others)

qi=aiWqq^i=a^iW^q

k: key(to be matched)

ki=aiWkk^i = a^iW^k

v: information to be extracted

vi=aiWvv^i = a^iW^v

image.png

Wq,Wk,WvW^q, W^k, W^v对于aia_i是共享的

v相当于从a当中学习到的,认为有价值的信息

由于transformer具有支持并行化的特点,qkv的值便可以通过矩阵并行计算得到 image.png

2.2 qk match

d是k的维度 image.png image.png 这里α^i,j\color{red}{\hat{\alpha}_{i,j}}就是针对每一个vv的权重大小

image.png 这个步骤可以通过矩阵并行计算

image.png

将self-attention抽象成一个模块 image.png

3. 多头注意力机制 MultiHead Self-Attention

自注意力机制的缺陷是,模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身的位置,有效信息抓取能力就差一些。 由此提出了多头注意力机制。

3.1 背景

image.png 在实践中,当给定相同的查询、键和值的集合时, 我们希望模型可以基于相同的注意力机制学习到不同的行为, 然后将不同的行为作为知识组合起来, 捕获序列内各种范围的依赖关系 (例如,短距离依赖和长距离依赖关系)。 因此,允许注意力机制组合使用查询、键和值的不同子空间表示(representation subspaces)可能是有益的。

与其只使用单独一个注意力汇聚, 我们可以用独立学习得到的h组(一般h=8)不同的线性投影(linear projections)来变换查询、键和值。 然后,这h组变换后的查询、键和值将并行地送到注意力汇聚中。 最后,将这h个注意力汇聚的输出拼接在一起, 并且通过另一个可以学习的线性投影进行变换, 以产生最终输出。 这种设计被称为多头注意力(multihead attention)。

3.2 计算过程

image.png image.png image.png 再通过self-attention中的操作得到b

image.png

最后将b进行拼接

image.png

image.png 将MultiHead SelfAttention抽象成一个模块 image.png

4. 位置编码 Positional Encoding

image.png 可以发现,当交换a1,a2,a3a_1, a_2, a_3顺序时,对b1b_1的位置是没有影响的

由此提出位置编码的概念 image.png peipe_i的确定方式有两种

  • 根据论文中的公式计算出位置编码
  • 可训练的位置编码

5. 通道注意力机制(Channel Attention)

5.1 什么是通道注意力机制

对于输入2维图像的CNN来说,一个维度是图像的尺度空间,即长宽,另一个维度就是通道,因此通道注意力机制也是很常用的机制。通道注意力旨在显示的建模出不同通道之间的相关性,通过网络学习的方式来自动获取到每个特征通道的重要程度,最后再为每个通道赋予不同的权重系数,从而来强化重要的特征抑制非重要的特征。

使用通道注意力机制的目的:为了让输入的图像更有意义,大概理解就是,通过网络计算出输入图像各个通道的重要性(权重),也就是哪些通道包含关键信息就多加关注,少关注没什么重要信息的通道,从而达到提高特征表示能力的目的。

image.png

5.2 SENet

SE注意力机制(Squeeze-and-Excitation Networks)在通道维度增加注意力机制,关键操作是squeeze和excitation。

通过自动学习的方式,即使用另外一个新的神经网络,获取到特征图的每个通道的重要程度,然后用这个重要程度去给每个特征赋予一个权重值,从而让神经网络重点关注某些特征通道。提升对当前任务有用的特征图的通道,并抑制对当前任务用处不大的特征通道。

如下图所示,在输入SE注意力机制之前(左侧白图C2),特征图的每个通道的重要程度都是一样的,通过SENet之后(右侧彩图C2),不同颜色代表不同的权重,使每个特征通道的重要性变得不一样了,使神经网络重点关注某些权重值大的通道。

image.png

5.3 ECA

ECA 注意力机制,它是一种通道注意力机制;常常被应用与视觉模型中。支持即插即用,即:它能对输入特征图进行通道特征加强,而且最终ECA模块输出,不改变输入特征图的大小。

背景:ECA-Net认为:SENet中采用的降维操作会对通道注意力的预测产生负面影响;同时获取所有通道的依赖关系是低效的,而且不必要的; 设计:ECA在SE模块的基础上,把SE中使用全连接层FC学习通道注意信息,改为11卷积学习通道注意信息; 作用:使用11卷积捕获不同通道之间的信息,避免在学习通道注意力信息时,通道维度减缩;降低参数量;(FC具有较大参数量;1*1卷积只有较小的参数量) image.png

5.4 CBAM

CBAM全称Convolutional Block Attention Module,这是一种用于前馈卷积神经网络的简单而有效的注意模块。是传统的通道注意力机制+空间注意力机制,是 channel(通道) + spatial(空间) 的统一。即对两个Attention进行串联,channel 在前,spatial在后。

给定一个中间特征图,我们的模块会沿着两个独立的维度(通道和空间)依次推断注意力图,然后将注意力图乘以输入特征图以进行自适应特征修饰。 由于CBAM是轻量级的通用模块,因此可以以可忽略的开销将其无缝集成到任何CNN架构中,并且可以与基础CNN一起进行端到端训练。

image.png

6. 空间注意力机制(Spatial Attention)

6.1 什么是空间注意力机制

不是图像中所有的区域对任务的贡献都是同样重要的,只有任务相关的区域才是需要关心的,比如分类任务的主体,空间注意力模型就是寻找网络中最重要的部位进行处理。空间注意力旨在提升关键区域的特征表达,本质上是将原始图片中的空间信息通过空间转换模块,变换到另一个空间中并保留关键信息,为每个位置生成权重掩膜(mask)并加权输出,从而增强感兴趣的特定目标区域同时弱化不相关的背景区域。

6.2 STN

STN《Spatial Transformer Networks》是15年NIPS上的文章STN引入了一个新的可学习的空间转换模块,提出了空间变换器(Spatial Transformer)的概念,它可以使模型具有空间不变性。这个可微分模块可以插入到现有的卷积结构中,使神经网络能够在Feature Map本身的条件下自动地对特征进行空间变换,而无需任何额外的训练监督或优化过程的修改。主要作用是找到图片中需要被关注的区域,并对其旋转、缩放,提取出固定大小的区域。

image.png