Self-Attention 加速方法一览:ISSA、CCNet、CGNL、Linformer

大模型训练之加速篇 -attention优化【线性化performer/VQ->分块计算MQA/GQA->计算(flash atten/slim/dec)->缓存MLA/pagedAtt】 加速 阅读详情

作者:林天威

链接:https://zhuanlan.zhihu.com/p/270898373

本文转载自知乎,作者已授权,未经许可请勿二次转载

Attention 机制最早在NLP 领域中被提出,基于attention 的transformer结构近年在NLP的各项任务上大放异彩。在视觉任务中,attention也收到了很多的关注,比较有名的方法包括Non-Local Network,能够在时空volume中对全局的关系进行建模,获得了很好的效果。但视觉任务中的self-attention模块通常需要进行大矩阵的矩阵乘法,显存占用大且比较耗时。所以近年有许多优化self-attention模块速度的方法,这篇笔记主要讨论几篇相关方法,有错误之处欢迎指正。

Self-Attention 简介

Attention 机制通常可以表达为如下的形式

其中,  为query,  为key,  为value。从检索任务的角度来看,query是要检索的内容,key是索引,value则是待检索的值。attention的过程就是计算query 和key之间的相关性,获得attention map,再基于attention map去获得value中的特征值。而在如下图所示的self-attention中,Q K V均为同一个feature map。

上图是一个self-attention模块的基本结构,输入为  , 分别通过1x1卷积获得  和  (记  )。则可以获得attention map为  。最后与  做矩阵乘法获得与输入shape想同的self-attention feature map。

在self-attention中,计算量和显存占用比较大的主要是生成attention map时的  和 最后的  两个步骤。对于64大小的feature map,  的大小为  。因此,self-attention 模块通常放在分辨率较低的网络后半段特征。

如何了优化attention的显存和计算量效率内,今天介绍的方法主要有两个方向的思路:

  • 改变attention的形式,避免直接全图attention

    • Long + Short range attention:Interlaced Sparse Self-Attention

    • 水平+垂直attention:Ccnet: Criss-cross attention for semantic segmentation

    • A2-Nets: Double Attention Networks

  • 降低attention计算过程中的某个维度

    • 降低N维度:Linformer: Self-Attention with Linear Complexity

    • 降低C维度:常用方法了,通常就是C/2 或者C/4

  • 其他

    • 优化GNL:Compact generalized non-local network

Attention 形式优化

ISSA: Interlaced Sparse Self-Attention

  • 论文基本思路:这篇论文的基本思路是“交错”。如下图所示,首先通过permute将feature以一定规律打乱,然后将feature map分为几个块分别做self-attention,这样获得的是long-range 的attention信息;此后,再进行一次permute还原回原来的特征位置,再次进行分块attention,获得了short-range 的attention。通过拆解long/short range的attention,能够大大降低计算量。

  • 具体的性能表现如下图所示,可以看出,下降最明显的是显存的占用,主要是因为避免了attention过程中的大矩阵。而由于permute,divide等操作虽然不占flop,但是在inference的时候需要一定的时间,所以实际速度没有flops提升的那么多。不过总体而言,在效果没有明显下降的前提下,这个速度/显存的优化已经很优秀了。

  • 这篇文章在看的时候感觉既视感好强,后来想到这不就是hw上的shufflenet嘛。

CCNet: Criss-cross attention for semantic segmentation

  • 论文主要思路:区别与Non-Local 中的全局attention,这篇文章提出只在特征点所对应的十字上进行attention。从而将复杂度从  降低到 

  • CCNet 的具体做法是,对于  上的一个点  ,我们都可以得到对应的特征向量  ,对于这个点对应的十字形区域,我们可以从  中提取对应的特征,构成  ,针对 和 进行矩阵乘法,则可以得到attention map 为  。最后对  以同样的方式提取十字形特征并进行矩阵乘法,则可以得到最后的结果。

  • 那么如何从十字attention过渡到全局attention呢,方法其实很简单,只需要做两次十字attention,每个点就可以获得全局的信息了。

  • CCNet 的理论计算量(Flops and memory)比起Non-Local 是很有优势的。但是提取十字形特征这一步的效率可能并不是很高,论文中也并没有放出具体的代码实现。

A2-Nets: Double Attention Networks

  • 这篇论文的attention 方式看下图即可

  • 第一个 feautre gathering,可以理解为对每个channel,softmax找到最重要的位置,再去gathering所有channel上这个最重要位置上的特征;得到 CxC

  • 第二个 feautre distribution,可以理解为对每个channel,softmax找到最重要的位置,然后给每个channel的这个位置都分配一遍特征。

  • 这篇文章的attention 方式很有趣,值得仔细琢磨一下的。不过速度方面比起NL应该没有提升特别多。

Attention 维度优化

Linformer: Self-Attention with Linear Complexity

  • Attention的过程如上所说,可以看作是  ,这篇文章对N做降维,将attention 转化为  ,在K是定值的情况下,既将复杂度从  降低到了 

  • 这篇文章大部分的篇幅,是在证明这样降低维度和原来的结果是近似的,没看太懂证明部分

  • 实验部分,K取得越大效果越好,但是并不明显。即降维会非常略微地影响效果,同时非常有效地提升速度。

其他

CGNL: Compact generalized non-local network

这篇文章主要是来优化一种计算量更大的Self-attention方法:Generalized Non-local (GNL)。这种方法不仅做H W两个spatial尺度上的non-local attention,还额外考虑了C维度。因此复杂度是  。

这篇文章的主要思路是:利用泰勒展开,将  近似成了  。从而可以通过先计算后两项,将复杂度从  降低到了 

  • 这篇文章在视频理解、目标检测等任务上的实验效果都还不错,但是并没有给出速度方面的实验结果和分析。

☆ END ☆

【学习】自注意力机制的改进方法、non-autoregressive sequence generation、point network 李宏毅机器学习 学习自注意力机制的改进方法、non-autoregressive sequence generation、point network 阅读详情

相关推荐

【论文阅读】注意力综述(自注意力)

以下内容来自:综述:图像处理中的注意力机制 - 知乎 概述 自注意力机制是注意力机制的改进,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。 在神经网络中,我们知道卷积层通过卷积核和原始特征的线性结合得到输出特征,由于卷积核通常是局部的,为了增加感受野,往往采取堆叠卷积层的方式,实际上这种处理方式并不高效。同时,计算机视觉的很多任务都是由于语义信息不足从而影响最终的性能。自注意力机制通过捕捉全局的信息来获得更大的感受野和上下文信息。 自注意力机制 (self-attention)[1.

qq_36182852的博客 6382

transformer系列5---transformer显存占用分析

模型训练框架:例如pytorch框架的cuda context会占用大约几百MB显存,与版本有关;模型参数大小,比如7B的模型以FP16格式要占用14GB显存;

lansebingxuan的专栏 3439

Python-CompactGeneralizedNonlocalNetwork论文的一个PyTorch重新实现

Compact Generalized Non-local Network (NIPS 2018)的一个PyTorch重新实现

divide方法_Self-Attention 加速方法一览:ISSA、CCNet、CGNL、Linformer

好久没更新,搬运之前的笔记一篇。Attention 机制最早在NLP 领域中被提出,基于attention 的transformer结构近年在NLP的各项任务上大放异彩。在视觉任务中,attention也收到了很多的关注,比较有名的方法包括Non-Local Network,能够在时空volume中对全局的关系进行建模,获得了很好的效果。但视觉任务中的self-attention模块通常需要进行大...

weixin_39625864的博客 165

麒麟和UOS系统编写桌面点击可执行文件

在桌面上创建一个快捷方式(.desktop 文件)来运行脚本。打开文本编辑器,创建一个新文件,如。这可以通过文本编辑器来完成。首先,确保您的脚本具有执行权限。现在,您应该可以双击桌面上的。保存此文件到桌面目录,例如,在桌面上创建一个快捷方式(文件来运行您的脚本了。使用图形界面或命令行给。现在您可以双击桌面上的。为您脚本的实际路径。是您脚本的实际路径。文件来运行您的脚本了。

u013934107的博客 7254

ARM架构UOS实战:从源码编译Qt 5.15.2到定制Qt Creator的全流程解析

本文详细解析了在ARM架构统信UOS系统上,从源码编译Qt 5.15.2到定制Qt Creator开发环境的完整流程。内容涵盖环境准备、依赖部署、源码配置、编译优化、错误处理及IDE集成,旨在帮助开发者在国产化平台上构建自主可控的高性能Qt开发环境,解决特定ARM平台的兼容性与性能优化问题。

mango的博客 411

divide方法_SelfAttention 加速方法一览:ISSA、CCNet、CGNL、Linformer

公众号关注“ML-CVer”设为 “星标”,DLCV消息即可送达!作者丨林天威@知乎来源丨https://zhuanlan.zhihu.com/p/270898373编辑丨极市平台本文仅作学术分享,著作权归作者所有。若侵权,请联系后台作删文处理。导读Self-attention机制是神经网络的研究热点之一。本文从self-attention的四个加速方法:ISSA、CCNe、CGNL...

weixin_39883374的博客 145

OpenFOAM算例文件结构深度解析:以cavity案例为例教你读懂每个文件夹的作用

本文以OpenFOAM经典cavity案例为例,深度解析CFD算例文件结构。详细阐述了0、constant、system三个核心目录的作用:0存放初始与边界条件,constant定义物理属性和网格,system控制求解策略。通过剖析关键文件,帮助用户理解每个参数的意义,掌握从读懂到定制算例的能力,为高效使用这一开源CFD工具奠定坚实基础。

beer8的博客 240

降钙素多肽21215-62-3|CGNLSTCMLGTYTQDFNKFHTFPQTAIGVGAP-NH2

三字母:H2N-Cys-Gly-Asn-Leu-Ser-Thr-Cys-Met-Leu-Gly-Thr-Tyr-Thr-Gln-Asp-Phe-Asn-Lys-Phe-His-Thr-Phe-Pro-Gln-Thr-Ala-Ile-Gly-Val-Gly-Ala-Pro-NH2。单字母:CGNLSTCMLGTYTQDFNKFHTFPQTAIGVGAP-NH2。平均亲水性:-0.67307692307692。中文名称:Calcitonin, human。CAS号:21215-62-3。

allpeptide_com的博客 433

别再死记硬背了!用Python可视化带你直观理解柯西收敛定理(附NumPy代码)

本文通过Python可视化技术,结合NumPy和Matplotlib,直观展示柯西收敛定理的动态过程。文章提供了完整的代码实现,帮助读者从抽象数学定义过渡到具象理解,特别适合数学学习者和Python开发者。通过热力图和交互式参数探索,读者可以清晰观察数列收敛特性,提升数学分析的学习效率。

weixin_28465009的博客 186

71.qt quick-可伸展菜单-抽屉栏示例 通用QML界面(一键换肤)

特点: 支持动态添加item、删除item、自适应界面 附带添加删除、展开等动画 同时支持qwidget、qml加载 支持number提示(比如消息数量等) 侧边抽屉栏支持动画伸展 支持换肤、拖拽、最大化等

抵抗时间扭曲,坚持做一件有意义的事 5286

解码Transformer: 自注意力机制和TA的优化策略

注意力机制自从2014年被正式提出后,逐渐成为了NLP中应用最广泛的设计。借助简单而又变幻莫测的Attention机制,一系列横扫SOTA的模型被提出。自注意力机制(Self-Attention),允许序列中的标记相互交互,并计算输入和输出序列的表示,成为了大语言模型主流架构Transformer的关键组成部分。Transformer 结构中,自注意力机制的时间和存储复杂度与序列的长度呈平方的关系,因此占用了大量的计算设备内存和并消耗大量计算资源。因此,如何优化自注意力机制的时空复杂度、 增强计算效率是大语

2401_82452722的博客 1872

27、视网膜血管识别与分类的数据集和验证过程

本文介绍了视网膜血管自动识别与分类方法所使用的数据集及其验证过程。通过30张高分辨率的近红外反射视网膜图像,结合专业医生的手动标注结果,构建了包含597个血管段的基准数据集。研究采用准确率、召回率、F1分数和混淆矩阵等评估指标对模型进行验证,并提出了特征增强和分类器优化策略以提升性能。实验结果显示,该方法在复杂区域具有较强的鲁棒性和较高的准确性,为临床应用提供了可靠的依据。

i7j8k9l的博客 148

探索高效视觉识别:Compact Generalized Non-local Network

探索高效视觉识别:Compact Generalized Non-local Network 在深度学习和计算机视觉领域,模型的效率和准确性一直是研究的热点。今天,我们将介绍一个由Kaiyu Yue、Ming Sun等研究者开发的创新项目——Compact Generalized Non-local Network(CGNL网络),这是一个基于PyTorch的实现,旨在提升图像识别任务的性能。 项...

gitblog_01176的博客 510

Linux系统安全学习手册

Linux反弹shell Linux系统应急响应 Linux服务器安全加固 Linux下的用户、组和权限 Linux中的gcc Linux中su和sudo的用法和区别 Linux系统python2与python3共存 Linux中grep工具的使用 Linux中环境变量的设置 Linux中常见的150个命令(干货) Linux中编写Shell脚本 LNMP环境搭建Wordpress博客 LAMP环境搭建一个Discuz论坛 Linux运维比较常用的一些脚本 Linux系统中安装软

谢公子的博客 7534

与本地电脑PDF文档对话的PDF问答程序

紧接着,从PDF文档中提取文本,这部分代码的作用是遍历PDF文档中的每一页,并使用extract text(0方法提取每一页的文本内容,然后将这些文本内容累加到raw text变量中。PDF问答程序的实现方式是利用LangChain已实现的向量存储、嵌入,以及使用查询和检索相关的链来获取外部数据集及处理文档,在进行相关性检索后进行合并处理,将其置入大语言模型的提示模板中,实现与PDF文件交流的目的。例如,你正在为一项重要的报告寻找资料,你必须知道你需要查找的关键词,然后在大量的信息中筛选出你需要的部分。

weixin_43961909的博客 1422

语义分割系列23-ISANet(pytorch实现)

本文介绍了ISANet和其论文Interlaced Sparse Self-Attention for Semantic Segmentation。本文还介绍了Self-Attention(Non-Local)和Interlaced Sparse Self-Attention的实现方式,并提供了代码。并在Camvid数据集上进行了论文的复现和测试。......

yumaomi的博客 3059

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

加速attention计算的工业标准:flash attention 1和2算法的原理及实现

transformer模型大火,flash attention技术同时也被提出用于加速attention的计算,目前已经被pytorch、huggingface、paddlepaddle等集成到其框架中。

bug404 9149

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

探索深度学习的未来:紧凑型通用非局部网络(CGNL)

探索深度学习的未来:紧凑型通用非局部网络(CGNL) 在这个飞速发展的时代,深度学习已经成为了计算机视觉和人工智能领域的重要工具。随着模型的复杂度增加,我们对更高效、更具表现力的网络结构的需求也日益增长。正是在这种背景下,Kaiyu Yue等提出了一个创新的解决方案——紧凑型通用非局部网络(CGNL)。这个开源项目以PyTorch为基础,为研究人员和开发者提供了一个强大的平台,来探索和应用这种新型...

gitblog_00035的博客 685

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[Deep Learning] 计算机视觉中的注意力机制 Attention mechanism

最近想要往网络里面加一些注意力机制的模块,从网上整理了一些资料,了解一下attention mechanism. 什么是Attention机制? 没有找到attention的准确定义,但是我理解的注意力机制是这样的: 当我们在看一个东西时,我们会把我们的注意力集中在某些部位,忽略其他部位,比如我们看见一个人的脸的时候,我们最关注的可能是他的眼睛,其次是他的鼻子。所以说,我们对于目标物体不同的部分分...

thunder_k的博客 2708

Transformer性能优化:运算和显存

©作者 |王晗炜单位 |中科院信工所ASCII LAB研究方向 |自然语言处理概述Transformer [1]在如今的深度学习领域有着不可或缺的地位,它被广泛应用于自然语言处理、图像处理等领域,有着极大的影响力。自注意力机制作为 Transformer 模型的核心,其几乎不含归纳偏置的特性在足量数据的基础上带给了 Transformer 模型强大的建模能力,也给...

Paper weekly 4294

媲美全局注意力!百度、港大提出双边局部注意力ViT:引入特征空间,显著降低计算量...

©作者|马昊宇来源|机器之心在这项研究中,来自百度研究院和香港大学的研究者重新思考了局部自注意力机制,提出了特征空间局部注意力(feature-space local attention 或简称 FSLA)。Vision Transformer 舍弃了 ConvNet 先验信息,通过引入自注意力机制对远距离特征依赖进行建模,提升了模型的表征能力。然而 Vision...

Paper weekly 983

使用opencv+python 画出attention map

简单使用opencv+python画出attention map可视化图

qq_27061325的博客 5587
上一篇: 医学图像分割:UNet++
下一篇: 70岁Hinton还在努力推翻自己积累了30年的学术成果,他让我知道了什么叫做生命力...
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值