深度学习中的稀疏注意力

稀疏注意力

文章目录

一、稀疏注意力的特点

1. 单头注意力(Single-Head Attention)

2. 多头注意力(Multi-Head Attention)

3. 稀疏注意力(Sparse Attention)

二、稀疏注意力的示意图

三、与Flash Attention的区别

总结


一、稀疏注意力的特点

DeepSpeed有很多不错的功能:Training Overview and Features - DeepSpeed

其中有一个功能是注意力稀疏,我们重点展开说明。

需要注意的是:稀疏注意力的实现并不仅限于DeepSpeed。虽然DeepSpeed提供了一种高效的稀疏注意力实现,但其他深度学习框架和库也可能提供稀疏注意力的支持。例如,Hugging Face的Transformers库就包含了一些稀疏注意力的实现,如Longformer和BigBird。

1. 单头注意力(Single-Head Attention)

单头注意力(Single-Head Attention)是一种注意力机制,它可以将一个查询向量(Query)和一组键值对(Key-Value)映射到一个输出向量,其中输出向量是值向量(Value)的加权和,而权重是由查询向量和键向量(Key)的相似度计算得到的。单头注意力的概念最早出现在2014年的论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,该论文提出了一种基于编码器-解码器(Encoder-Decoder)的神经机器翻译模型,其中使用了单头注意力来捕捉输入序列和输出序列之间的对齐关系。

2. 多头注意力(Multi-Head Attention)

多头注意力(Multi-Head Attention)是一种改进的注意力机制,它可以将一个查询向量和一组键值对映射到一个输出向量,但与单头注意力不同的是,它会将查询向量、键向量和值向量分别投影到多个子空间中,然后在每个子空间中分别计算注意力。最后将所有子空间的注意力输出拼接起来得到最终的输出向量。多头注意力的概念最早出现在2017年论文《Attention Is All You Need》中,该论文提出了一种基于自注意力(Self Attention)的序列到序列(Seq2Seq)模型,称为Transformer,其中使用了多头注意力来增强模型的表达能力和关注不同位置的信息的能力。

3. 稀疏注意力(Sparse Attention)

稀疏注意力(Sparse Attention)是一种优化的注意力机制,它可以将一个查询向量和一组键值对映射到一个输出向量,但与单头注意力和多头注意力不同的是,它不会计算查询向量和所有键向量的相似度,而是只计算查询向量和部分键向量的相似度,从而减少计算量和内存消耗。稀疏注意力的概念最早出现在2018年的论文《Generating Long Sequences with Sparse Transformers》中,该论文提出了一种基于Transformer的长序列生成模型,其中使用了稀疏注意力来处理超过8000个单词的文本序列。

我们假设一个伪代码的例子说明:

针对一段文本:

我爱吃苹果,因为它们很好吃。我也喜欢吃香蕉,因为它们富含钾。但是,我最喜欢的还是橙子,因为它们既甜又酸,非常好吃。我也喜欢吃西瓜,挺甜的非常甜。但比前面又黄又园的,可能稍微差那么一丢丢。我不喜欢吃辣,因为我觉得辣的食物会让我口渴。我也不喜欢吃咸的食物,因为我觉得咸的食物对健康不好。

问题:我喜欢什么?

  1. 单头注意力:在单头注意力中,我们可能只关注"我"最近的一个动词或名词。例如,我们可能会回答:“你喜欢吃西瓜。” 这是因为"我"和"西瓜"在句子中是相邻的,所以我们只关注了这个最近的上下文。
  2. 多头注意力:在多头注意力中,我们会关注"我"的所有上下文。例如,我们可能会回答:“你喜欢吃苹果,吃香蕉,吃橙子和吃西瓜。” 这是因为我们同时关注了"我"和"苹果"、“香蕉”、“橙子”、"西瓜"这些词,所以我们能够提供一个更全面的回答。
  3. 稀疏注意力:在稀疏注意力中,我们可能只关注"我"和一些特定的、重要的上下文。例如,我们可能会回答:“你喜欢吃橙子和吃西瓜,但是你不喜欢吃辣的和咸的食物。” 这是因为我们认为"喜欢"和"不喜欢"是重要的修饰词,所以我们只关注了"我"和"喜欢"、“橙子”、“西瓜”、“不喜欢”、"辣的"和"咸的"这些词。

接下来验证一下text-davinci-003和ChatGPT:

text-davinci-003:

ChatGPT4:

可以确定的是chatgpt4使用了多头注意力。

二、稀疏注意力的示意图

“稀疏注意力”是一种与传统注意力机制不同的技术,它只关注序列中的部分元素以提高处理速度。相对的技术是“全注意力”,它会考虑序列中每个元素与其他元素之间的关系,尽管这在处理长序列时会非常耗时。稀疏注意力采用各种方式实现,如固定模式、可学习的模式或基于启发式规则,这降低了计算资源需求。Transformer模型虽然擅长处理长序列,但计算和存储需求会随着序列长度的增加而急剧下降,显著减少了计算和存储需求。调整参数w可在计算效率和模型性能之间找到平衡,使处理长序列更可行。

这张图是DeepSpeed使用的变量稀疏结构的视觉表示。图中的网格和单元格分别代表序列和序列中的元素。蓝色的单元格表示正在计算的元素,绿色的单元格表示未被计算的元素。

传统的深度学习模型需要计算序列中所有部分之间的关系,这需要大量的内存。然而,DeepSpeed引入的稀疏注意力(SA)技术改变了这一点。SA只计算序列中某些部分之间的关系,从而大大减少了计算和存储需求。

稀疏性的程度由参数w控制,w是一个比1大但比序列长度n小的数。通过调整w的值,我们可以在计算效率和模型性能之间找到一个平衡。

这张图直观地展示了稀疏性。蓝色的单元格就是被计算的元素,也就是被注意力机制关注的部分。绿色的单元格则是被忽略的部分,也就是没有被注意力机制关注的部分。通过调整w的值,我们可以控制被计算的元素的数量,从而在计算效率和模型性能之间找到一个平衡。

在稀疏注意力机制中,我们并不需要计算所有元素之间的关系,而只需要计算部分元素之间的关系。这样,我们只关注和计算那些对模型性能影响较大的元素之间的关系,而忽略那些影响较小的元素。

图中的蓝色单元格代表了被计算的元素,也就是被注意力机制关注的部分。这体现了稀疏注意力机制的一个重要特点,即选择性关注。图中的绿色单元格代表了未被计算的元素,也就是没有被注意力机制关注的部分。这体现了稀疏注意力机制的另一个重要特点,即稀疏性。通过调整参数w的值,我们可以控制被计算的元素的数量,从而在计算效率和模型性能之间找到一个平衡。这个特点在图中并没有直接体现,但是通过理解蓝色和绿色单元格的含义,我们可以推断出这一点。

总结起来就是:

  1. 选择性关注:在稀疏注意力机制中,我们并不需要计算所有元素之间的关系,而只需要计算部分元素之间的关系。这样,我们只关注和计算那些对模型性能影响较大的元素之间的关系,而忽略那些影响较小的元素。蓝色的单元格在图中代表了被计算的元素,也就是被注意力机制关注的部分,体现了这种选择性关注。
  2. 稀疏性:稀疏性是稀疏注意力机制的另一个重要特点。通过忽略那些对模型性能影响较小的元素,我们可以大大降低计算复杂度和存储需求。在图中,绿色的单元格代表了未被计算的元素,也就是没有被注意力机制关注的部分,体现了这种稀疏性。
  3. 可调节性:稀疏注意力机制的一个重要优势是其可调节性。通过调整参数w的值,我们可以控制被计算的元素的数量,从而在计算效率和模型性能之间找到一个平衡。这个特点在图中并没有直接体现,但是通过理解蓝色和绿色单元格的含义,我们可以推断出这一点。

稀疏注意力是一种基于PyTorch的库,用于优化深度学习模型的训练过程,主要目标是减少传统Transformer的时间复杂度和空间复杂度。通过top-k选择,将注意力退化为稀疏注意力,保留最有助于引起注意的部分,并删除其他无关的信息。这种方法有效地保存了重要信息并消除了噪声。

这个库确实是通过Triton平台来开发和优化其所需的计算内核的。Triton是一个开源项目,为在GPU上高效执行自定义操作提供了方法。这个库的内核没有用CUDA编写,这意味着未来可能支持CPU、OpenCL或Vulkan。

这个库作为DeepSpeed的一个扩展,既可以通过DeepSpeed使用,也可以单独使用。在处理稀疏注意力内核时,DeepSpeed采用了块稀疏计算。

在训练阶段,可以使用稀疏注意力来优化模型。稀疏注意力通过减少注意力机制中需要计算的元素数量来提高训练效率。具体来说,稀疏注意力只关注与给定元素最相关的一部分其他元素,而不是所有元素。这可以大大减少计算量,从而提高训练速度。

在推理阶段,仍然可以使用稀疏注意力。实际上,稀疏注意力在推理阶段可能更加有用,因为它可以帮助模型更快地生成预测。由于稀疏注意力减少了需要计算的元素数量,所以它可以使模型在处理新的输入数据时更快地生成预测。

三、与Flash Attention的区别

ColossalAI就使用了Flash Attention)

稀疏注意力:

  • 稀疏注意力通过选择性地处理信息来减少计算量。具体来说,它从一个序列中计算经过选择的相似性得分,而不是所有可能的Pair,从而产生一个稀疏矩阵而不是一个完整的矩阵。
  • 稀疏注意力机制的主要目的是减少传统Transformer的时间复杂度和空间复杂度。

Flash Attention:

  • Flash Attention的主要目的是加速和节省内存。它的主要贡献包括:计算softmax时候不需要全量input数据,可以分段计算;反向传播的时候,不存储attention matrix (N^2的矩阵),而是只存储softmax归一化的系数。
  • Flash Attention将输入分割成块,并在输入块上进行多次传递,从而以增量方式执行softmax缩减。
  • 在Flash Attention的前向计算算法中,Flash Attention算法并没有将S、P写入HBM中去,而是通过分块写入到HBM中去,存储前向传递的 softmax 归一化因子,在后向传播中快速重新计算片上注意力。

总的来说,稀疏注意力和Flash Attention都是为了优化注意力机制的计算效率,但稀疏注意力更侧重于选择性地处理信息,而Flash Attention则更侧重于优化计算过程和内存使用。


总结

Deepspeed稀疏注意力启用的代码实现:

DeepSpeed Sparse Attention - DeepSpeed

来源:大魏分享

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML--CSS--字体、文本样式

字体样式 属性作用font-family字体类型font-size字体大小font-weight字体粗细font-style字体风格color字体颜色 font-family 字体类型 用法: 如下,定义 div元素内的字体,默认是宋体,要设定其他字体就用这个属性进行设定&#x…

汽车ECU的虚拟化技术初探(四)--U2A内存管理

目录 1.内存管理概述 2. 内存保护功能 2.1 SPID 2.2 Slave Guard 3.小结 1.内存管理概述 为了讲清楚U2A 在各种运行模式、特权模式下的区别,其实首先应该搞清楚不同模式下可以操作的寄存器有哪些。 但是看到这个寄存器模型就头大。 再加上之前没有研究过G4MH…

CSS 雷达监测效果

<template><view class="center"><view class="loader"><view></view></view></view></template><script></script><style>/* 设置整个页面的背景颜色为深灰色 */body {background-col…

[NSSCTF Round#16 Basic]RCE但是没有完全RCE

[NSSCTF Round#16 Basic]RCE但是没有完全RCE 第一关 <?php error_reporting(0); highlight_file(__file__); include(level2.php); if (isset($_GET[md5_1]) && isset($_GET[md5_2])) {if ((string)$_GET[md5_1] ! (string)$_GET[md5_2] && md5($_GET[md…

【AIGC】AnimateDiff:无需定制化微调的动画化个性化的文生图模型

前言 Animatediff是一个有效的框架将文本到图像模型扩展到动画生成器中&#xff0c;无需针对特定模型进行调整。只要在大型视频数据集中学习到运动先验知识。AnimateDiff就可以插入到个性化的文生图模型中&#xff0c;与Civitai和Huggingface的文生图模型兼容&#xff0c;也可…

docker部署私人云盘

目录 1.安装 2.登陆 1.安装 mkdir -p /opt/alist docker run -d --restartalways -v /opt/alist:/opt/alist/data -p 5244:5244 --name"alist" xhofe/alist:latest 2.登陆 ip:5224 默认账户admin 密码在日志中

逆水行舟 不进则退

目录 一、前言 二、2023年度总结 三、2024展望未来 一、前言 这是我从工作以来到现在最喜欢的一句话&#xff0c;我想把这句话送给自己也想送给大家。 2019年7月实习到现在已经过去了四年多&#xff0c;进入2024年也迎来了我工作生涯的第五个年头。 在这个行业里&#xff…

《教育界》期刊怎么投稿发表论文?

《教育界》是国家新闻出版总署批准的正规教育类期刊&#xff0c;由广西师范大学主管&#xff0c;广西师范大学出版社集团有限公司主办&#xff0c;面向国内外公开发行&#xff0c;旨在追踪教育新动向&#xff0c;探讨教育改革与管理、办学与教育教学经验等&#xff0c;为广大一…

Linux scp命令 服务器之间通讯

目录 一. scp命令简介二. 本地服务器文件传输到远程服务器三. 本地服务器文件夹传输到远程服务器 一. scp命令简介 scp&#xff08;Secure Copy Protocol&#xff09;是用于在Unix或Linux系统之间安全地复制文件或目录的命令。 它使用SSH&#xff08;Secure Shell&#xff09;…

等保测评流程是什么样的?测评周期多久?

等保测评流程是什么样的&#xff1f;测评周期多久&#xff1f; 等保测评一般分成五个阶段&#xff0c;定级、备案、测评、整改、监督检查。 1.定级阶段 针对用户的信息系统有等保专家进行定级&#xff0c;一般常见的系统就是三级系统或者是二级系统。在这里有一个小的区分&am…

【ArcGIS微课1000例】0088:计算城市建筑物朝向(矩形角度)

文章目录 一、实验描述二、实验数据三、角度计算1. 添加字段2. 计算角度四、方向计算一、实验描述 矩形要素具有长轴和短轴,其长轴方向也称为矩形面的主角度,可用于确定面要素的走向趋势。根据该方向参数,可以对具有矩形特征的地理对象进行方向分析,且适用于很多应用场景,…

8.1 Centos安装部署Redis

文章目录 前言一、下载Redis二、编译Redis三、配置redis.conf四、启动Redis服务端五、启动Redis客户端测试前言 本文将手把手演示在CentOS7上安装部署Redis。 一、下载Redis 可以使用wget命令进行下载,这里下载到/app目录 wget http://download.redis.io/releases/redis-5.…

Python爬虫学习笔记(一)---Python入门

一、pycharm的安装及使用二、python的基础使用1、字符串连接2、单双引号转义3、换行4、三引号跨行字符串5、命名规则6、注释7、 优先级not>and>or8、列表&#xff08;list&#xff09;9、字典&#xff08;dictionary&#xff09;10、元组&#xff08;tuple&#xff09;11…

计算机毕业设计 | SpringBoot+vue的医院门诊预约挂号系统(附源码)

1&#xff0c;绪论 项目背景 预约挂号&#xff0c;挂专家号更是“一号难求”&#xff0c;这是当前许多大型医院的普遍现象。预约挂号是各地近年来开展的一项便民就医服务&#xff0c;旨在缩短看病流程&#xff0c;节约患者时间。这种预约挂号大多通过医疗机构提供的电话或者网…

视频号小店发展前景怎样?适合新手入驻吗?

我是电商珠珠 视频号于22年7月发展了属于自己的平台-视频号小店。作为一个发展了才一年的平台来说&#xff0c;很多人都不敢入驻&#xff0c;害怕它很快就会垮掉。 我们团队在22年10月的时候&#xff0c;开始入驻其中。发现它的玩法和抖音小店相比并没有什么两样。 在刚开始…

电脑定时关机应用

这是一个Python应用。家里卧室装了新电视&#xff0c;HDMI连接笔记本追剧还是很愉快的。可是经常睡着&#xff0c;自然忘了关机。搜了一大圈&#xff0c;都是用命令行或者bat解决。商店里的应用也不好用&#xff0c;有些还收费。于是萌生了自己写一个定时关机应用的想法。利用N…

Linux学习之网络编程3(高并发服务器)

写在前面 Linux网络编程我是看视频学的&#xff0c;Linux网络编程&#xff0c;看完这个视频大概网络编程的基础差不多就掌握了。这个系列是我看这个Linux网络编程视频写的笔记总结。 高并发服务器 问题&#xff1a; 根据上一个笔记&#xff0c;我们可以写出一个简单的服务端…

研0或研一|如何快速入门深度学习?

一、经验建议 1️⃣课程篇 直接上手B站【小土堆PyTorch深度学习快速入门教程】&#xff0c;共计9h50min左右&#xff0c;预计一周就可以学完&#xff0c;比较偏向理论和实践相结合跟李沐学AI B站【动手学深度学习 PyTorch版】刘二大人B站【PyTorch深度学习实践】&#xff0c;…

springboot集成jsp

首先pom中引入依赖包 <!--引入servlet--> <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId> </dependency> <!--引入jstl标签库--> <dependency><groupId>javax.servle…

echarts 3D地图

vueecharts 3D地图,可自定义地图背景底图。鼠标放上显示弹窗&#xff0c;弹窗自动切换。 <template><div id"gbznt" class"gbznt" ref"gbznt"><img class"mapBg" src"../../../img/propertyTransaction/echart-bg…