Efficient Attention: Attention with Linear Complexities

news2024/11/17 4:49:03

paper: https://arxiv.org/pdf/1812.01243.pdf

这里写目录标题

  • 一、引言
  • 二、方法实现
    • 高效注意力的解释
    • 效率优势
  • 三、实验
    • 消融
      • 插入层
      • 键的维度
      • 骨干架构

一、引言

注意机制在计算机视觉和自然语言处理中有着广泛的应用。最近的工作开发了点积注意力机制,并将其应用于各种视觉和语言任务。然而,点积注意力的内存和计算成本随着输入的时空复杂度大小呈二次增长。这样的增长阻碍了该机制在大输入上的应用,例如长序列、高分辨率图像或大视频。为了弥补这一缺陷,本文提出了一种新的有效注意力机制,它相当于点积注意力,但大大减少了内存和计算成本。资源效率允许更广泛和灵活地将有效的注意力模块合并到神经网络中,从而提高准确性。由于高昂的成本,这些模型无法包含原始的点积注意力。
对大输入(如长序列、高清图像和大视频)的全局依赖建模仍然是一个未解决的问题。现有点积注意力模块的二次内存和输入大小的计算复杂性限制了它们在如此大输入上的应用。例如,一个非本地模块对于一个64通道128 × 128特征映射使用超过1GB的GPU内存和超过50 GMACC(MACC代表乘法积累,MACC表示1个乘法或加法运算。)的计算。
对大输入的全局依赖关系建模的需求极大地激发了对资源高效注意力算法的探索。对非局部模块的研究揭示了一个有趣的现象。每个位置的注意图尽管是独立生成的,但却是相关的。位置的注意力图主要集中在语义相关的区域。下图显示了在非局部模块中学习到的注意映射。当生成灌木丛前的鸟的图像时,腿上的像素倾向于关注其他腿上的像素以获得结构一致性。同样,主体像素主要关注主体,背景像素关注灌木。
在这里插入图片描述
这一观察启发了本文提出的有效注意机制的设计。类似于dotproduct注意,该机制首先从输入生成一个关键特征映射、一个查询特征映射和一个值特征映射。它将键值特征图的每个通道解释为全局注意力图。有效注意力将每个全局注意图作为权重,聚合键值特征图,生成一个全局上下文向量,该向量概括了全局特征的一个方面。然后,在每个位置,模块将查询特征视为全局上下文向量上的一组系数。最后,该模块以查询特征为权重,计算全局上下文向量的和,生成该位置的输出特征。
该算法避免了成对注意矩阵的生成,其大小在输入的时空大小中是二次的。因此,它实现了与输入大小相关的线性复杂性,并获得了显著的效率改进。
本文的主要贡献是有效的注意机制,即:
1。相对于输入的时空大小,具有线性记忆和计算复杂性;
2. 具有与广泛采用的点积注意机制相同的表示力;
3. 允许将更多的注意力模块合并到神经网络中。
除了点积注意力,文献中还有一组单独的技巧被称为注意力机制。这部分将它们称为缩放注意力。点积注意力对于全局依赖关系建模是有效的,而缩放注意力则侧重于强调重要的特征并抑制无信息的特征。例如,挤压-激励(SE)模块使用全局平均池化和线性层来计算每个通道的缩放因子,然后相应地缩放通道。增强后的模型在图像分类方面取得了最先进的性能,在场景分割和目标检测方面取得了实质性的改进。在SE的基础上,CBAM在全局平均池的基础上增加了全局最大池和一个额外的空间注意力子模块。这进一步提高了SE的性能。
尽管两个名字都包含注意力,点积注意力和缩放注意力是两套完全不同的技术,它们的目标非常不同。在适当的时候,可以同时使用这两种技术并让它们一起工作。因此,没有必要将有效注意力与缩放注意技术进行比较。

二、方法实现

将所有n个位置的查询、键、值特征分别表示为 Q ∈ R n × d k Q∈R^{n×d_k} QRn×dk, K ∈ R n × d k K∈R^{n×d_k} KRn×dk, V ∈ R n × d v V∈R^{n×d_v} VRn×dv,则点积注意力的输出为:
在这里插入图片描述
归一化函数有两种常见的选择:
在这里插入图片描述
其中 σ r o w σ_{row} σrow表示沿矩阵Y的每一行应用softmax函数。下图(左)展示了点积注意力模块。
在这里插入图片描述
这种机制的主要缺点是其资源需求。由于它计算每对位置之间的相似性,因此有 n 2 n^2 n2个这样的相似性,这导致 O ( n 2 ) O(n^2) O(n2)内存复杂度和 O ( d k n 2 ) O(d_kn^2) O(dkn2)计算复杂度。因此,点积注意力的资源需求在大输入时变得高得令人望而却步。在实践中,该机制的应用只可能在低分辨率特征上。
针对点积注意的缺陷,提出了一种数学上等同于点积注意的高效注意机制。这速度更快,内存效率更高。在高效关注中,单个特征向量 X ∈ R n × d X∈R^{n×d} XRn×d仍然经过三个线性层,形成查询特征 Q ∈ R n × d k Q∈R^{n×d_k} QRn×dk,键特征 K ∈ R n × d k K∈R^{n×d_k} KRn×dk,值特征 V ∈ R n × d v V∈R^{n×d_v} VRn×dv。但是,该模块没有将键值特征解释为 R d k R^{d_k} Rdk中的n个特征向量,而是将它们视为 d k d_k dk个单通道特征映射。高效注意力使用这些特征映射中的每一个作为对所有位置的加权,并通过加权求和将所有位置的值特征聚合起来,形成全局上下文向量。这个名字反映了这样一个事实,即向量不对应于特定的位置,而是对输入特征的全局描述。
高效注意机制的特征如下:
在这里插入图片描述
其中, ρ q ρ_q ρq ρ k ρ_k ρk分别为查询和键特征的归一化函数。实现了与点积注意相同的两种归一化方法。
在这里插入图片描述
其中 σ r o w σ_{row} σrow σ c o l σ_{col} σcol表示分别沿矩阵Y的每一行或每一列应用softmax函数。
高效注意模块是计算机视觉数据处理机制的具体实现。对于输入特征映射 x ∈ R h × w × d x∈R^{h×w×d} xRh×w×d,模块将其扁平化为矩阵 x ∈ R h w × d x∈R^{hw×d} xRhw×d,对其应用高效关注机制,并将结果重塑为 h × w × d v h×w× d_v h×w×dv。如果 d v ! = d d_v != d dv!=d,则进一步应用1x1卷积将维数恢复为d。最后,将得到的特征与输入特征相加,形成残差结构。

下面是在使用缩放归一化时,点积和高效注意之间等价的正式证明。将式(2)中的比例归一化公式代入式(1)得到:
在这里插入图片描述
同理,将式(4)中的比例归一化公式代入式(3)得到:
在这里插入图片描述
因为标量乘法和矩阵乘法是符合乘法结合律,则有:
在这里插入图片描述
比较式(5)和式(7),我们得到:
在这里插入图片描述
上面的证明适用于softmax规范化变量。QK上的两个softmax操作并不完全等同于QKT上的单个softmax操作。然而,它们非常接近原始softmax函数的效果。 σ r o w ( Q K T ) σ_{row} (QK^T) σrow(QKT)的临界性质它的每一行之和为1,代表了所有位置的标准化注意力分布。

矩阵 σ r o w ( Q ) σ c o l ( K ) T σ_{row}(Q)σ_{col}(K)^T σrow(Q)σcol(K)T具有这个性质。因此,高效注意的softmax变体是点积注意变体的近似。

高效注意力的解释

高效注意为注意机制提供了新的解释。在点积注意力中,选择位置i作为参考位置,可以收集所有位置与位置i的相似度,形成该位置的注意图 s i s_i si。注意图 s i s_i si表示位置i对输入中每个位置j的关注程度。位置j在 s i s_i si上的值越高,意味着位置i更关注位置j。在点积注意中,每个位置i都有这样一个注意图 s i s_i si,该机制利用该注意图来聚合值特征V来产生位置i的输出。
相反,高效的注意力不会为每个位置生成一个注意力图。相反,它将键特征 K ∈ R n × d k K∈R^{n×d_k} KRn×dk解释为 d k d_k dk注意力图 k j T k^T_j kjT。每个 k j T k^T_j kjT都是一个全局注意力图,不对应于任何特定的位置。相反,它们中的每一个都对应于整个输入的一个语义方面。例如,一个这样的注意图可能会覆盖输入中的人。另一个可能对应于背景。高效注意力使用每个 k j T k^T_j kjT来聚合值特征V,并产生一个全局上下文向量 g j g_j gj。由于 k j T k^T_j kjT描述了输入的全局语义方面, g j g_j gj也总结了输入的全局语义方面。然后,位置i使用 q i q_i qi作为 g 0 , g 1 , … , g d k − 1 g_0, g_1,…, g_{dk−1} g0,g1,gdk1的一组系数。使用前面的示例,人物像素可能会对人物的全局上下文向量施加较大权重,以改进其表示。物体边界的像素可能对物体和背景的全局上下文向量具有较大的权重,以增强对比度。

效率优势

本节分析了高效注意力相对于点积注意力在内存和计算方面的效率优势。高效的注意力不计算每对位置之间的相似性,这将占用 O ( n 2 ) O(n^2) O(n2)内存并需要 O ( d k n 2 ) O(d_kn^2) O(dkn2)计算来生成。相反,它只在 R d v R^{d_v} Rdv中生成 d k d_k dk个全局上下文向量。这一改变消除了模块内存和计算复杂性中的 O ( n 2 ) O(n^2) O(n2)项。
因此,在 d v = d d_v = d dv=d的通用设置下,有效注意具有 O ( ( d k + d ) n + d k d ) O((d_k + d)n + d_kd) O((dk+d)n+dkd)内存复杂度和 O ( ( d k d + d 2 ) n ) O((d_kd + d^2)n) O((dkd+d2)n)计算复杂度。下表给出了高效注意模块和非局部模块(使用点积注意)的复杂度公式。
在这里插入图片描述

在计算机视觉中,这种复杂度差异是非常显著的。首先,n本身是图像边长的二次方,在实际应用中往往很大。其次, d k d_k dk是模块的一个参数,网络设计者可以对其进行调整,以满足不同的资源需求。
在合理的范围内,该参数对性能的影响最小。这个结果意味着一个有效的注意力模块通常可以有一个小的 d k d_k dk,这进一步增加了它比点积注意力的效率优势。下表比较了高效注意力模块与ResBlock的复杂性。在这里插入图片描述

该表显示,高效注意力模块的资源需求与ResBlock相当(在大多数情况下低于ResBlock),这给了该模块效率水平的直观想法。

三、实验

在这里插入图片描述
图4说明了本文的体系结构。从ImageNet预训练中初始化主干。
在这里插入图片描述
上表报告了与非局部模块的比较。如res3和fpn3所示,在网络的相同位置插入一个有效的注意力模块或一个非局部模块对神经网络的影响几乎相同的性能。然而,在输入较大的层中,插入非局部模块会导致内存不足错误,而插入有效的注意力模块则会显著提高性能并消耗很少的额外资源。因此,使用每个模块的最佳插入方案,高效注意力模块比非局部模块高出0.9AP和0.8AP。
在这里插入图片描述
上表比较了MS-COCO 2017数据集上有效的注意力增强检测器与其他最先进的方法。

消融

插入层

下表显示了在不同层插入EA模块的模型对比实验。当添加单个模块时,读者可以推断出在相同类型的层中(例如在FPN层或ResNet层中)的一般趋势,一层的分辨率越高,插入高效注意力模块带来的性能收益越多。这一结果重申了有效关注的重要性。由于注意力对高分辨率的输入更有利,因此有效注意力的效率优势具有很强的影响力。res4层是唯一一个插入会导致性能下降的层。一个假设是,低分辨率和输入(2048)和键(64)之间的大差距可能是原因。由于实现上的缺陷导致res1和res2的实验失败,因此本文无法获得实验结果。
在这里插入图片描述
随后的实验探索了在网络中添加多个有效的注意力模块。在res3、res4和每个FPN级别中添加一个有效的注意力模块,导致1.8AP和1.6AP的改进。
尽管在res4处插入单个模块会降低性能,但从fpn1-5和res3,4模型中删除res4处的模块会导致性能显著降低,如fpn1-5和res3所示。这一结果进一步强化了多跳连接依赖建模的重要性,因为即使是不能独立提高性能的高效注意力模块,也可以在与其他高效注意力模块协作时做出贡献。高效注意力模块的低复杂性使多次插入成为可能,并实现了先前假设的注意力优势。

键的维度

这些实验测试了键的维度对有效注意效果的影响。如下表所示,将键的维数从128降至32只会导致最小的性能变化。这一结果强化了第1节中的假设,即大多数注意力图可表示为一组有限的基本注意力图的线性组合。因此,如果需要进一步节省资源,研究人员可以降低高效注意力模块中的关键字和查询的维数。
在这里插入图片描述

骨干架构

本节报告在不同骨干网上的实验。下表报告了使用三种选择的架构ResNet-50、ResNet-101和ResNeXt-101的结果
在这里插入图片描述

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

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

相关文章

MobileBERT模型简单介绍

目录 一、概要 二、深入扩展 2.1 知识蒸馏方法 2.2 渐进式知识迁移 一、概要 MobileBERT 可以看作一个“瘦身”后的BERT-large模型,其使用了瓶颈结构(Bottleneck Structure),并且在自注意力和前馈神经网络的设计上也有一定的改…

图形化之家谱遗传系统

1:废话不多说先看成果。 QQ录屏20230418163603 QQ录屏20230418163732 2:解析: 1:不知道会有多少个孩子,所以我们用二叉树的孩子兄弟结构 typedef struct treeNode {char name[100];//名字int generation;//辈分char g…

Pytorch深度学习笔记(五)反向传播算法

推荐课程:04.反向传播_哔哩哔哩_bilibili 1.为什么要使用反向传播算法 简单模型可以使用解析式更新w 复杂模型,如图,输入矩阵为5*1矩阵,等一层权重矩阵H1为6*5矩阵,则需要30个解析式,第二层权重矩阵H2为6…

1685_Excel的几种脚本处理方式

全部学习汇总: GreyZhang/python_basic: My learning notes about python. (github.com) 做个小结,实际上是写的我自己学习的过程。 关于Excel的处理方式很多,我也不会那么多,在这里我只想写一下我自己接触过的。大致是三种方式&a…

Pikachu靶场(Cross-Site Scripting)

Cross-Site Scripting 反射型xss(get)源代码修改限制地址栏 反射性xss(post)存储型xssDOM型xss-xxss盲打xss之过滤xss之htmlspecialcharsxss之href输出xss之js输出 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突&#xff0c…

《花雕学AI》25:用文字画出你的非凡想象力,微软新Bing带你体验DALL-E的神奇

你有没有想过用文字来画画?这听起来可能很不可思议,但是现在,你可以通过微软新Bing来实现这个想法。微软新Bing支持AI绘画功能,只要输入一句话,就能生成一幅图像。这个功能是由DALL-E驱动的,DALL-E是一个能…

mybatis03-多表查询、延迟加载、逆向工程

mybatis03 mybatis 多表联查 背景产生:开发过程中单表查询 不能满足项目需求分析功能。对于复杂业务来说,关联的表有几张,甚至几十张 并且表与表之间的关系相当复杂。目的:实现复杂业务功能,必须进行多表查询&#x…

开发插件JFormDesigner(可视化GUI编程)的使用与注册-简单几步即可完成

开发插件JFormDesigner(可视化GUI编程)的使用与注册 获取链接:1.JFormDesigner获取2.记录插件下载路径3.使用zcj注册4.生成license5.打开idea进行注册 获取链接: https://pan.baidu.com/s/1N9ua2p3BpiMIARCEewRxIw?pwd4e9a 提取…

WebSocket 通信 —— 浏览器原生支持

在上一篇内容中讲到使用Node中的Net核心模块完成socket通信,那么本篇就继续来讲关于浏览器原生支持的 WebSocket ,实现通信。那么什么是 WebSocket ? 它是HTML5开始提供的一种浏览器与服务器间进行全双工(全双工:同时进行双向传输…

激活函数(Activation Function)及十大常见激活函数

目录 1 激活函数的概念和作用 1.1 激活函数的概念 1.2 激活函数的作用 1.3 通俗地理解一下激活函数(图文结合) 1.3.1 无激活函数的神经网络 1.3.2 带激活函数的神经网络 2 神经网络梯度消失与梯度爆炸 2.1 简介梯度消失与梯度爆炸 2.2 梯度不稳…

asp.net+C#房地产销售系统文献综述和开题报告+Lw

本系统使用了B/S模式,使用ASP.NET语言和SQL Server来设计开发的。首先把所有人分为了用户和管理员2个部分,一般的用户可以对系统的前台进行访问,对一般的信息进行查看,而注册用户就可以通过登录来完成对房屋信息的查看和对房屋的…

动态通讯录——C语言【详解+全部码源】

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:进阶C语言,本专栏主要讲解数据存储,进阶指针,动态内存管理&a…

企业数据安全能力建设思路

在现代社会,企业数据安全已经成为一个非常重要的话题。企业数据安全能力的建设是每个企业都必须面对和解决的问题。企业数据安全能力建设思路包括以下几个方面: 1. 建立完善的安全管理制度 企业要建立完善的安全管理制度,包括信息安全政策、…

[入门必看]数据结构5.1:树的基本概念

[入门必看]数据结构5.1:树的基本概念 第五章 树与二叉树5.1 树的基本概念知识总览5.1.15.1.2 树的定义和基本术语5.1.3 树的性质 5.1.15.1.2 树的定义和基本术语树的基本概念树形逻辑结构的应用结点之间的关系描述结点、树的属性描述有序树 V.S 无序树树 V.S 森林 5…

软考 软件设计师上午题uml

UML uml事物依赖关系关联聚合组合关系泛化关系实现关系关联多重度UML类图UML 类图的概念对象图用例图包含关系扩展关系泛化关系用例图概念交互图通信图![在这里插入图片描述](https://img-blog.csdnimg.cn/d62c6f00d57a48949e3306461f3fbe25.png)通信图例子状态图状态图的状态和…

# 生成器

生成器 生成器是什么? 生成器(generator)是一种用来生成数据的对象。它们是普通函数的一种特殊形式,可以用来控制数据的生成过程。 生成器有什么优势? 使用生成器的优势在于它们可以在生成数据的同时控制数据的生成过程…

android ContentObserver实时监测媒体图片增删改,java(1)

android ContentObserver实时监测媒体图片增删改,java&#xff08;1&#xff09; <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.READ_MEDIA_IMAGES" /> impl…

七、JS07使用 jQuery 操作 DOM

七、使用 jQuery 操作 DOM 7.1 DOM 操作 7.1.1 DOM 操作分类 使用 JavaScript 操作 DOM 时分为三类——DOM Core(核心)、HTML-DOM 和 CSS-DOMjQuery 操作也同样分为这三类下面主要回顾以下 JavaScript 中的 DOM 操作 JavaScript 中的 getElementById()、getElementByTagName…

c++内联函数inline

目录 内联函数的概念&#xff1a; 内联函数的用法&#xff1a; 内联的优点&#xff1a; 内联的缺点&#xff1a; 内联的使用场景 内联注意事项&#xff1a; 内联函数的概念&#xff1a; C中内联&#xff08;inline&#xff09;是一种关键字&#xff0c;用于告诉编译器把函…

以太网和DNS

以太网 数据链路层考虑的是相邻俩个节点之间的传输(通过网线/光纤/无线直接相连的设备),数据链路层中最典型的协议就说"以太网" 以太网协议规定了数据链路层,也规定了物理层的内容,我们使用的网线,也叫做"以太网线"(遵守以太网协议的网线) 以太网帧格式…