【Transformer系列(2)】注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解

news2024/11/15 3:37:04

前言

注意力机制一直是一个比较热的话题,其实在很早之前就提出了,我们在学习图像分类时在SENet就见到过(直通车:经典神经网络论文超详细解读(七)——SENet(注意力机制)学习笔记(翻译+精读+代码复现))自从谷歌发表了《Attention Is All You Need》这篇论文后,注意力机制就真正火起来了,这篇论文本来是NLP领域的,不过在CV领域也有越来越多人开始引入注意力机制。

本来这部分想放在论文里讲的,但最近学习过程中发现还挺多拓展的内容,所以这篇我们就来详细看一下这些注意力机制吧!


前期回顾

【Transformer系列(1)】encoder(编码器)和decoder(解码器)


目录

前言

🌟一、注意力机制:Attention

1.1 什么是注意力机制?

1.2 如何运用注意力机制? 

1.2.1 Query&Key&Value

1.2.2 注意力机制计算过程

🌟二、自注意力机制:Self-Attention

2.1 什么是自注意力机制?

2.2 如何运用自注意力机制? 

2.3 自注意力机制的问题

🌟三、多头注意力机制:Multi-Head Self-Attention

3.1 什么是多头注意力机制?

3.2 如何运用多头注意力机制? 

🌟四、通道注意力机制:Channel Attention

4.1 什么是通道注意力机制?

4.2 SENet

4.3 其他通道注意力机制

① ECA

② CBAM

🌟五、空间注意力机制:Spatial Attention

5.1 什么是空间注意力机制?

5.2 STN

总结

🌟一、注意力机制:Attention

1.1 什么是注意力机制?

我们先来看一张图片,这个是前几天微博之夜的

那大家的目光更多停留在是在五个美女身上,还是在张大大身上呢 ?(大大老师骚瑞~ORZ)

同样的,不同的粉丝更加关注的对象也是不同的。 

再举几个栗子:

  • 看人-->看脸
  • 看文章-->看标题
  • 看段落-->看开头

这时候大家应该大致知道注意力机制是个什么东西了吧~

注意力机制其实是源自于人对于外部信息的处理能力。由于人每一时刻接受的信息都是无比的庞大且复杂,远远超过人脑的处理能力,因此人在处理信息的时候,会将注意力放在需要关注的信息上,对于其他无关的外部信息进行过滤,这种处理方式被称为注意力机制。

我用通俗的大白话解释一下:注意力呢,对于我们人来说可以理解为“关注度”,对于没有感情的机器来说其实就是赋予多少权重(比如0-1之间的小数),越重要的地方或者越相关的地方就赋予越高的权重。


1.2 如何运用注意力机制? 

1.2.1 Query&Key&Value

首先我们来认识几个概念:

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

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

有点抽象吧,我们举个栗子好了:

  1. 当你用上淘宝购物时,你会敲入一句关键词(比如:显瘦),这个就是Query
  2. 搜索系统会根据关键词这个去查找一系列相关的Key(商品名称、图片)
  3. 最后系统会将相应的 Values (具体的衣服)返回给你。

在这个栗子中,Query KeyValue 的每个属性虽然在不同的空间,其实他们是有一定的潜在关系的,也就是说通过某种变换,可以使得三者的属性在一个相近的空间中。


1.2.2 注意力机制计算过程

输入Query、Key、Value:

  • 阶段一:根据Query和Key计算两者之间的相关性或相似性(常见方法点积、余弦相似度,MLP网络),得到注意力得分;

  • 阶段二:对注意力得分进行缩放scale(除以维度的根号),再softmax函数,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过softmax的内在机制更加突出重要元素的权重。一般采用如下公式计算:

  • 阶段三:根据权重系数对Value值进行加权求和,得到Attention Value(此时的V是具有一些注意力信息的,更重要的信息更关注,不重要的信息被忽视了);

    这三个阶段可以用下图表示:


🌟二、自注意力机制:Self-Attention

2.1 什么是自注意力机制?

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

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

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

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

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

2.2 如何运用自注意力机制? 

其实步骤和注意力机制是一样的。

第1步:得到Q,K,V的值

对于每一个向量x,分别乘上三个系数 W^{q}, W^{k}W^{v},得到的Q,K和V分别表示query,key和value

【注意】三个W就是我们需要学习的参数。

 第2步:Matmul

利用得到的Q和K计算每两个输入向量之间的相关性,一般采用点积计算,为每个向量计算一个score:score =q ·

第3步:Scale+Softmax

将刚得到的相似度除以\sqrt{d_{k}},再进行Softmax。经过Softmax的归一化后,每个值是一个大于0且小于1的权重系数,且总和为0,这个结果可以被理解成一个权重矩阵。

第4步:Matmul

使用刚得到的权重矩阵,与V相乘,计算加权求和。

以上是对Thinking Machines这句话进行自注意力的全过程,最终得到z1z2两个新向量。

其中z1表示的是thinking这个词向量的新的向量表示(通过thinking这个词向量,去查询和thinking machine这句话里面每个单词和thinking之间的相似度)。

也就是说新的z1依然是 thinking 的词向量表示,只不过这个词向量的表示蕴含了 thinking machines 这句话对于 thinking 而言哪个更重要的信息。


2.3 自注意力机制的问题

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

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

要唠这个这就唠到位置编码(Positional Encoding) 了,这个我们下篇论文再讲,先大致说一下吧:对每一个输入向量加上一个位置向量e,位置向量的生成方式有多种,通过e来表示位置信息带入self-attention层进行计算。

具体原理吧,感兴趣的话可以看一下:

[2003.09229] Learning to Encode Position for Transformer with Continuous Dynamical Model (arxiv.org)


🌟三、多头注意力机制:Multi-Head Self-Attention

通过刚才的学习,我们了解到自注意力机制的缺陷就是,模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身的位置,有效信息抓取能力就差一些。 因此就有大佬提出了通过多头注意力机制来解决这一问题。这个也是实际中用的比较多的。

3.1 什么是多头注意力机制?

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

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


3.2 如何运用多头注意力机制? 

第1步:定义多组W,生成多组Q、K、V

刚才我们已经理解了,Q、K、V是输入向量X分别乘上三个系数 W^{q}, W^{k}W^{v}分别相乘得到的,  W^{q}, W^{k}W^{v}是可训练的参数矩阵。

现在,对于同样的输入X,我们定义多组不同的 W^{q}, W^{k}W^{v} ,比如W_{0}^{^{q}}W_{0}^{^{k}}W_{0}^{^{v}}W_{1}^{^{q}}W_{1}^{^{k}}W_{1}^{^{v}}每组分别计算生成不同的Q、K、V,最后学习到不同的参数。

第2步:定义8组参数

对应8个single head,对应8组  W^{q}, W^{k}W^{v} ,再分别进行self-attention,就得到了Z_{0}-Z_{7}

第3步:将多组输出拼接后乘以矩阵W_{0}以降低维度

首先在输出到下一层前,我们需要将Z_{0}-Z_{7}concat到一起,乘以矩阵W_{0}做一次线性变换降维,得到Z。

 完整流程图如下:(感谢翻译的大佬!)

【注意】对于上图中的第2)步,当前为第一层时,直接对输入词进行编码,生成词向量X;当前为后续层时,直接使用上一层输出。 


🌟四、通道注意力机制:Channel Attention

(恭喜你已经翻越了3座大山看到这里 (๑•̀ㅂ•́)و✧)

4.1 什么是通道注意力机制?

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

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

 咦,我们好像看到了一个老朋友——SENet! ╰(*°▽°*)╯


4.2 SENet

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

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

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

这里就简单回顾一下~

更详细的了解请看我的这两篇:

经典神经网络论文超详细解读(七)——SENet(注意力机制)学习笔记(翻译+精读+代码复现) SENet代码复现+超详细注释(PyTorch)


4.3 其他通道注意力机制

① ECA

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

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


② CBAM

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

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


🌟五、空间注意力机制:Spatial Attention

5.1 什么是空间注意力机制?

其实上面那个图就包含空间注意力机制了:绿色长条的是通道注意力机制,而紫色平面则就是空间注意力机制。

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


5.2 STN

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

016e12eb6d3b581c0ac87760beac0d9d.png

空间采样器的实现主要分成三个部分:

  • 1)局部网络(Localisation Network)
  • 2)参数化网格采样( Parameterised Sampling Grid)
  • 3)差分图像采样(Differentiable Image Sampling)

总结

以上就是我们这篇要介绍的注意力机制,目前所有的注意力机制方法大都是基于各个不同的维度利用有限的资源进行信息的充分利用,它本质作用是增强重要特征,抑制非重要特征。注意力机制非常重要,在CV领域可以说是遍地开花,被广泛应用在网络中提升模型精度,本文也只是简单的介绍了一下,为下一篇论文阅读扫清障碍。以后应用于代码之中再详细介绍吧!


本文参考:

一文看尽深度学习中的各种注意力机制 - 知乎 (zhihu.com)

 注意力机制到底在做什么,Q/K/V怎么来的?一文读懂Attention注意力机制 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/440336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金陵科技学院五年一贯制专转本管理学原理考试大纲

金陵科技学院五年一贯制专转本管理学原理考试大纲 一、考核对象 本课程的考核对象为五年一贯制高职专转本“旅游管理”专业入学考试考生。 二、考核方式 本课程考核采用闭卷笔试的方式。 三、命题依据及原则 1、命题依据 参考书目:《管理学——原理与方法》 …

Docker Swarm集群企业案例实战

1. Docker Swarm集群企业案例实战 Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创…

驼峰式匹配-力扣1023-java

一、题目描述 如果我们可以将小写字母插入模式串 pattern 得到待查询项 query,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。) 给定待查询列表 queries,和模式串 pattern&a…

未来技术方向——“乐高式”可组装式开发能力

技术正在改变各行各业的发展,Gartner的主要战略技术趋势一直是行业的技术风向标之一。近3年,Gartner在主要的战略技术趋势中都提到组装式技术,2021年首次提出组装式企业,2022年提出可组装式应用,2023年在2项主要战略技…

ModuleNotFoundError: No module named ‘d2l’

目录 1. 下载李沐老师分享的源代码 step1:下载李沐老师分享的源代码: step3:Anaconda Prompt中安装d2l(这个l是英文) step4:运行代码,成功: (番外)ModuleNotFoundError: No mod…

【微服务】5、声明式 HTTP 客户端 —— Feign

目录 一、RestTemplate 不好的地方二、Feign 是什么三、使用四、自定义 Feign 的配置(1) Feign 的几个常见配置(2) 配置 Feign 的日志级别① 通过配置文件② Java 代码配置日志级别 五、Feign 性能优化(1) 性能优化介绍(2) 修改 Feign 底层的 HTTP 请求客户端 六、Feign 的最佳…

C++:std::function模板类(前言):为什么有了函数指针还需要Functional

为什么有了函数指针还有 Functional 1: 函数指针定义2: 函数指针结论3:疑问4: Function来源5:Functional 特点 1: 函数指针定义 在C中可以使用指针指向一段代码,这个指针就叫函数指针,假设有下面一段代码 …

交友项目【首页推荐,今日佳人,佳人信息】

目录 1:首页推荐 1.1:接口地址 1.2:流程分析 1.3:代码实现 2:今日佳人 1.1:接口地址 1.2:流程分析 1.3:代码实现 3:佳人信息 1.1:接口地址 1.2&am…

计算机基础--MySQL--索引

参考文献 [MySQL索引连环18问!] https://zhuanlan.zhihu.com/p/364041898[深入理解MySQL索引] https://www.infoq.cn/article/ojkwyykjoyc2ygb0sj2c[聚集索引和非聚集索引的区别] https://juejin.cn/post/7001094401858469918[索引分类] https://blog.csdn.net/dd2…

【消费战略】解读100个食品品牌丨王小卤 4年10亿爆品破局

爆品破局 王小卤的聚焦发展! 王小卤创建于 2016 年,与饮料行业的独角兽元气森林同年。 相较于元气森林的快速增长,王小卤历经 三年坎坷之路,直至 2019 年才踏上高增长的赛道,实现四年十亿的增长。 “所有的消费品都值得重新 做…

RHCSA练习作业(二)

目录 题目一 题目二 题目三 第四题 第五题 题目一 文件查看:查看/opt/passwd文件的第六行(使用head和tail指令) 代码如下: head -6 /opt/passwd | tail -1 题目二 在/etc及其子目录中,查找host开头的文件&#x…

纯净Python环境的安装以及配置PyCharm编辑器

前言 优质的教程可以让我们少走很多弯路,这一点毋庸置疑。去年二月我接触了Python,并找到了一份优质的配置教程,让我能够快速上手Python的学习。现在,一年多过去了,我已经有了很大的进步和变化,这也让我更…

ARM kernel 内核的移植 - 从三星官方内核开始移植

一、内核移植初体验 1、三星官方移植版内核获取 (1) 从网盘下载源码包。 (2) 这个文件最初是来自于三星的 SMDKV210 开发板附带的光盘资料。 2、构建移植环境 (1) Windows下建立工程。 (2) ubuntu下解压。 3、配置编译下载尝试 (1) 检查 Makefile 中 ARCH 和 CROSS_COMPI…

手把手教你Python爬虫

前言 python爬虫技术在java开发工作中属于工具性的技术属性,所以我这里就只从爬取一个网站的数据为例作为教学内容,具体的基础学习与其它的扩展知识内容,我会以链接的形式给出,若有兴趣可自行点击学习。 python基础知识教学 Pyth…

怎么压缩图片的体积大小,4款软件分享

怎么压缩图片的体积大小?因为在日常生活和工作中,我们常常会遇到需要压缩图片大小的情况。图片的大小是由像素点数量和每个像素的颜色深度共同决定的,一般来说,像素点数量越多,每个像素的颜色深度越高,图片…

四百元以内哪种耳机音质好?2023便宜音质好的蓝牙耳机推荐

现如今,蓝牙耳机的发展速度越来越快,不少人对于其音质方面的要求也越来越高。最近看到很多人问,有没有便宜音质又好的蓝牙耳机?针对这个问题,我来给大家推荐几款便宜音质好的蓝牙耳机,一起来看看吧。 一、…

怎么远程控制电脑

为什么要从另一台电脑远程控制电脑? 如今,Splashtop已广泛应用于各个领域。 在很多情况下,您需要从另一台远程电脑控制一台电脑。 这里演示了两个例子: 1:当您不在同一楼层时,您的同事需要您的帮助来解决…

阿里云张献涛:云原生计算基础设施助力汽车行业数字化升级

2023 年阿里云峰会北京站《云上智能汽车》论坛,阿里云智能基础产品部副总裁、阿里云智能弹性计算 & 无影产品线总经理张献涛,发表了《云原生计算基础设施助力汽车行业数字化升级》的主题演讲。 当前,汽车行业的数字化浪潮已经渗透到汽车设…

System V 共享内存

System V 共享内存 共享内存是什么如何使用共享内存ftokshmgetshmatshmdtshmctl 共享内存的原理共享内存实现两个进程间通信共享内存的特点共享内存与管道配合使用两个进程间通信多个进程间通信 共享内存是什么 🚀共享内存是最快的IPC形式。一旦这样的内存映射到共…

【产品应用】一体化步进伺服电机在高速异形插件机的应用

随着科技的不断发展,自动化生产设备在各个行业中得到了广泛的应用。高速异形插件机作为自动化生产设备中的一种,其核心部件之一就是一体化步进伺服电机。本文将详细介绍一体化步进伺服电机在高速异形插件机中的应用。 01.设备简介 高速异形插件机是一种…