当前位置: 首页 > ai >正文

Efficient Attention 理解

论文链接:arxiv.org/pdf/1812.01243


 引言

点积注意力 [1, 22, 23] 是神经网络中一种普遍的机制,用于建模长距离依赖性,这是深度学习面临的一项关键挑战,而卷积和递归网络在这方面的表现有限。该机制通过对前一层中所有位置的特征进行加权求和,计算每个位置的响应。与卷积或递归层的有限感受野不同,点积注意力在一次传递中将感受野扩展到整个输入。使用点积注意力高效建模长距离依赖性使得卷积和递归能够专注于局部依赖建模,这是它们的专长。

点积注意力 Dot-Product Attention

非局部模块 [23] 是点积注意力在计算机视觉中的一种改编,已经在视频分类 [23] 和生成对抗图像建模 [28, 2] 中取得了最先进的性能,并在目标检测 [23]、实例分割 [23]、行人再识别 [14]、图像去雨 [13] 等任务中展示了显著的改进。然而,在大输入(例如长序列、高分辨率图像、大型视频)上进行全局依赖建模仍然是一个未解决的问题。点积注意力的内存和计算复杂度与输入大小呈平方关系,限制了它在大输入上的应用。例如,非局部模块在处理 64 通道 128 × 128 的特征图时,使用超过 1 GB 的 GPU 内存和超过 25 GMACC 的计算,或者在处理 64 通道 64 × 64 × 32 的三维特征体积时,使用超过 68 GB 的内存和超过 1.6 TMACC 的计算(例如用于深度估计或视频任务)。高内存和计算成本限制了点积注意力在模型低分辨率部分的应用 [23, 28, 2],并禁止其在对分辨率敏感或资源消耗大的任务中的使用。因此,对大输入进行全局依赖建模的需求激励了资源高效的注意力机制的探索。

对非局部模块的调查揭示了一个有趣的发现。如图 1 所示,撇开归一化不谈,点积注意力涉及两次连续的矩阵乘法。

第一次乘法S=QK^T计算像素之间的成对相似性,并形成逐像素的注意力图。

第二次乘法 D=SV 则通过逐像素的注意力图对值 V 进行聚合,从而产生输出。

由于矩阵乘法是结合律的,将顺序从 (QK^T)V改为 Q(K^TV)并不会影响效果,但会将复杂度从 O(n^2) 改变为 O(d_kd_v),其中 n 是输入大小,d_k和 d_v 分别是键和值的维度。这一改变消除了模块复杂度中的 O(n^2)项,使其在复杂度上变为线性。

此外,在实际情况下,d_kd_v显著小于 n^2,因此这个新项不会成为新的瓶颈。

由此,将乘法顺序改为 Q(K^TV) 产生了一种显著更高效的机制,本文将其称为高效注意力。这种新机制在数学上等价于带有缩放归一化的点积注意力,并且与 softmax 归一化近似等价。实验实证验证了当等价性是近似时,并不会影响准确性。此外,实验显示其效率允许在网络中集成更多的注意力模块,并集成到高分辨率的网络部分,从而显著提高了准确性。此外,实验表明,高效注意力使得在由于资源限制而无法使用点积注意力的任务中广泛应用注意力成为可能。

另一个发现是,高效注意力为注意力机制提供了新的解释。假设键的维度为 d_k,输入大小为 n,可以将 d_k\times n的键矩阵解释为d_k个模板注意力图,每个图对应输入的一个语义方面。然后,每个像素的查询是对每个 d_k模板注意力图的 d_k个系数。

在这种解释下,高效注意力与点积注意力的区别在于,点积注意力首先从系数合成逐像素的注意力图,并让每个像素通过其自身的注意力图聚合值,而高效注意力则首先通过模板注意力图聚合值以形成模板输出(即全局上下文向量),然后让每个像素聚合模板输出。

方法

详看这篇博客:

Efficient Attention: Attention with Linear Complexities-CSDN博客

总结就是,更换了注意力机制的计算顺序,先算K^TV,再和Q相乘,减少了计算复杂度;

然后给这种计算方式赋予了新的解释:也就是将K\in R^{n\times d_k} 解释为了d_k个单通道特征映射。每个单通道映射都是一个全局注意力图,不对应特定位置,而是对应整个输入的一个语义方面。

使用每一个单通道映射 来 聚合 值特征V,并产生一个全局上下文向量,然后每个位置使用 q 作为全局上下文向量的一组系数相乘。

http://www.xdnf.cn/news/13316.html

相关文章:

  • 美团完整面经
  • Matlab解决无法读取路径中的空格
  • matlab分布式电源微电网潮流
  • uni-app 自定义路由封装模块详解(附源码逐行解读)
  • FEMFAT许可使用数据分析工具介绍
  • MySQL 主从复制与一主多从架构实战详解
  • Electron-vite【实战】MD 编辑器 -- 编辑区(含工具条、自定义右键快捷菜单、快捷键编辑、拖拽打开文件等)
  • 深入理解 TCP 套接字:Socket 编程入门教程
  • uniapp请求接口封装
  • C#引用传递代码记录
  • 第七章: SEO与渲染方式
  • 滚珠导轨在汽车自动化装配线中的核心传动
  • AVCap视频处理成帧和音频脚本
  • CKA考试知识点分享(9)---gateway api
  • 混合型交易所架构:CEX+DEX融合与Layer2扩展方案
  • Visual Stdio程序弹出的黑框内容如何复制
  • (天文学)恒星的介绍分类
  • 中兴B860AV1.1江苏移动-自动降级包
  • 手写RPC框架<四> 负载均衡
  • LSTM-XGBoost回归预测,多输入单输出(Matlab完整源码和数据)
  • 【AI时代速通QT】第一节:C++ Qt 简介与环境安装
  • 41页PPT | 基于AI制造企业解决方案架构设计智能制造AI人工智能应用智能质检人工智能质检建设
  • MyBatis实战指南(六)自动映射
  • 科技评论:Jim Keller 的“反向”战略:RISC-V 成为中国应对美国芯片封锁的关键武器
  • 为何AI推理正推动云计算从集中式向分布式转型
  • 一个教学项目pom.xml杂记
  • V837s-SDK Telnetd服务连接不上异常解决
  • 蓝奏云(Lanzou Cloud)一款国内知名的免费网盘和文件分享服务 以及蓝奏云的api
  • Cesium1.95中高性能加载1500个点
  • MybatisPlus