深度学习中的稀疏注意力

news2025/5/13 12:45:26

稀疏注意力

文章目录

一、稀疏注意力的特点

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

来源:大魏分享

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

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

相关文章

React项目实战--------极客园项目PC端

项目介绍:主要将学习到的项目内容进行总结(有需要项目源码的可以私信我) 关于我的项目的配置如下,请注意下载的每个版本不一样,写的api也不一样 一、项目介绍 1.资料 1)短信接收&M端演示&#xff1a…

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

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

1.10 Unity中的数据存储 XML

一、XML 1.介绍 XML是一个文档后缀名是*.xmlXML是一个特殊格式的文档XML是可扩展的标记性语言XML是Extentsible Markup Language的缩 写XML是由万维网联盟(W3C)创建的标记语言,用于定义编码人类和机器可以读取的文档的语法。它通过使用定义文档结构的标签以及如何…

力扣 第 121 场双周赛 解题报告 | 珂学家 | 数位DP

前言 整体评价 T3, T4 都是典题 T1. 大于等于顺序前缀和的最小缺失整数 思路: 模拟 class Solution { public:int missingInteger(vector<int>& nums) {set<int> s(nums.begin(), nums.end());int acc nums[0];for (int i 1; i < nums.size(); i) {if …

非常非常实用!不能错过,独家原创,9种很少人听过,但却实用的混沌映射!!!以鲸鱼混沌映射为例,使用简便

很多人在改进的时候&#xff0c;想着增加混沌映射&#xff0c;增加初始种群的多样性&#xff0c;可是&#xff0c;大多数论文中常见的映射&#xff0c;都被别人使用了&#xff0c;或者不知道被别人有没有使用&#xff0c; 本文介绍9种很少人知道&#xff0c;但非常实用混沌映射…

【Maven】006-Maven 依赖传递和依赖冲突

【Maven】006-Maven 依赖传递和依赖冲突 文章目录 【Maven】006-Maven 依赖传递和依赖冲突一、依赖传递1、概述2、案例&#xff1a;jackson 依赖引入依赖Maven 仓库详情页IDEA 中查看 Maven 依赖关系 二、依赖冲突1、概述2、冲突解决的两种方式 一、依赖传递 1、概述 概念&am…

【并发】共享模型之管程

共享模型之管程 共享问题 package 并发;public class Test1 {static int a0;public static void main(String[] args) throws InterruptedException {Thread t1new Thread(new Runnable() {Overridepublic void run() {for(int i0;i<5000;i){a;}}});Thread t2new Thread(n…

Linux scp命令 服务器之间通讯

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

python基础-文件读写

总结&#xff1a; 文件操作掌握一个函数open&#xff0c;三个方法read,write,close; 1、操作文件的思路 打开文件&#xff1b; 注意&#xff1a; 计算机操作文件的步骤基本固定&#xff01;读取文件&#xff1b; 关闭文件&#xff1b; 2、 操作文件 在Python中…

【数据库】聊聊MVCC机制与BufferPool缓存机制

上一篇文章&#xff0c;介绍了隔离级别&#xff0c;MySQL默认是使用可重复读&#xff0c;但是在可重复读的级别下&#xff0c;可能会出现幻读&#xff0c;也就是读取到另一个session添加的数据&#xff0c;那么除了配合使用间隙锁的方式&#xff0c;还使用了MVCC机制解决&#…

信息系统安全——Linux 访问控制机制分析

实验 4 Linux 访问控制机制分析 4.1 实验名称 《Linux 访问控制机制分析》 4.2 实验目的 1 、熟悉 Linux基本访问控制机制使用和原理 2 、熟悉 Linux S 位的作用和使用 3 、熟悉强制访问控制 Selinux 原理及其使用 4.3 实验步骤及内容 1 、Linux 基本访问控制机制 &#xff08…

Harbor离线安装

下载安装包 $ wget https://github.com/goharbor/harbor/releases/download/v2.7.4/harbor-offline-installer-v2.7.4.tgz解压 $ tar xvf harbor-offline-installer-v2.7.4.tgz -C /usr/local修改配置 $ cd /usr/local/harbor $ cp harbor.yml.tmpl harbor.yml $ vim harbo…

c++多久会被Python或者新语言取代?

c多久会被Python或者新语言取代&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&am…

【保姆级】教师资格证介绍,教资考什么,应该准备什么,5分钟快速浏览(包含报考流程)

官网 一般一年两次&#xff0c;通过笔试之后可以报名面试 这里写目录标题 报考教资的报考条件笔试科目一&#xff0c;科目二科目三 面试笔试面试通过后需要进行申请拿到教师资格证申请需要的材料1.毕业证书2.普通话3.笔试面试合格4.体检检查合格5.思想品德鉴定6.其他证件 黑龙…

mybatisplus(service CRUD 接口)

一、我们在控制器层都是调用Service层&#xff0c;不会直接调用仓储层。现在我给大家介绍一下怎么快速实现Service 的CRUD 定义接口&#xff1a;IProductService 继承IService<实体> package com.saas.plusdemo;import com.baomidou.mybatisplus.extension.service.ISe…

VSCode添加Python解释器并安装Python库

目录 一、安装VSCode 二、安装Python解释器 1、安装包链接 2、安装过程 3、测试 4、安装flake8和yapf两个包 &#xff08;1&#xff09;安装flake8包 &#xff08;2&#xff09;安装yapf包 三、VSCode中选择python解释器 一、安装VSCode VSCode安装教程&#xff08;默…

【iOS】UIColor、CGColor、CIColor的区别和联系

编者在实验室小组的指导下&#xff0c;仿写了许多App&#xff0c;其中UI的颜色模仿也是令人头痛的点。设计颜色一般使用UIColor类方法直接获取颜色&#xff1a; 有时会使用 (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alph…

GPT编程:运行第一个聊天程序

环境搭建 很多机器学习框架和类库都是使用Python编写的&#xff0c;OpenAI提供的很多例子也是Python编写的&#xff0c;所以为了方便学习&#xff0c;我们这个教程也使用Python。 Python环境搭建 Python环境搭建有很多种方法&#xff0c;我们这里需要使用 Python 3.10 的环境…

2023年终总结,一路向阳待花期

回望2023&#xff0c;可谓“苦尽甘来终有时&#xff0c;一路向阳待花期”。这一年&#xff0c;经历很多&#xff0c;收获亦很多。 回望2023 2023年最重要的三件事&#xff0c;想聊聊买房、工作、自我提升。 买房&#xff1a; 众所众知&#xff0c;2023楼市整体的情况不甚乐…

【SpringBoot实战专题】「开发实战系列」深入迁出探索剖析SpringBoot服务容器特性的利器之Actuator(Web端点)

深入迁出探索剖析SpringBoot服务容器特性的利器之Actuator 内容简介内容大纲Actuator Web端点洞察应用程序内部状况的关键Actuator提供了13个端点启用ActuatorMaven依赖Gradle依赖 Actuator透视组件装配过程获得Bean装配报告&#xff08;/beans&#xff09;Bean属性概览Bean报告…