稀疏注意力 一、稀疏注意力的特点 DeepSpeed有很多不错的功能:Training Overview and Features - DeepSpeed 其中有一个功能是注意力稀疏,我们重点展开说明 需要注意的是:稀疏注意力的实现并不仅限于DeepSpeed。虽然DeepSpeed提供了一种高效的稀疏注意力实现,但其他深度学习框架和库也可能提供稀疏注意力的支持。 二、稀疏注意力的示意图 “稀疏注意力”是一种与传统注意力机制不同的技术,它只关注序列中的部分元素以提高处理速度。 蓝色的单元格在图中代表了被计算的元素,也就是被注意力机制关注的部分,体现了这种选择性关注。 稀疏性:稀疏性是稀疏注意力机制的另一个重要特点。 在处理稀疏注意力内核时,DeepSpeed采用了块稀疏计算。 在训练阶段,可以使用稀疏注意力来优化模型。稀疏注意力通过减少注意力机制中需要计算的元素数量来提高训练效率。
此外,还从理论上证明了稀疏注意力机制保持了二次型全 Transformer 的表达能力和灵活性。 BigBird 模型中的稀疏注意力包括三个主要部分: 一组注意输入序列的所有部分的全局标记 所有标记注意一组相邻的局部标记 所有标记注意一组随机标记 BigBird 稀疏注意力模型由(注意输入序列的所有部分的 全局标记作为信息流的管道,证明了使用全局标记的稀疏注意力机制可以和全注意模型一样强大。 稀疏注意力模型的高效实现 大规模采用稀疏注意力的一个主要障碍,是稀疏操作在现代硬件中效率相当低。 相反,将稀疏的局部注意力和随机注意力转换成密集的张量运算,以充分利用现代单指令、多数据(single instruction, multiple data,SIMD)硬件。 稀疏注意力机制的高效实现示意图。
2025年2月,中国AI公司DeepSeek推出原生稀疏注意力机制(Native Sparse Attention, NSA),通过算法与硬件的协同创新,为长文本建模提供了高效解决方案。 原生可训练性 传统稀疏注意力机制多采用固定模式(如局部窗口或随机采样),而NSA通过动态路由机制,允许稀疏模式在训练过程中自适应调整。 这种设计使得模型能够根据任务需求自主优化注意力分布,避免人工预设模式的局限性。 例如,已有团队基于NSA改进低秩注意力机制(MLA),进一步压缩KV缓存至原有规模的5%。 3. 总结 DeepSeek原生稀疏注意力机制(NSA)不仅是技术层面的突破,更是AI发展理念的革新。它证明:在算力霸权横行的时代,以“大道至简”的算法设计为核心,依然能够实现性能与效率的双重飞跃。
而sparsemax是2016年提出的softmax的改进版,他可以得到稀疏的结果,即让一些值为0,它和softmax具有相似的性能,但具有选择性、更紧凑、注意力集中。 如下如所示,sparsemax相比如softmax是更硬的,在过大过小的地方对应1和0,即可以得到稀疏解。 注意力机制如下,其中 K=V=\hat{C} ,但是 Q=f(\hat{C}W^Q+b^Q) ,其中f为relu函数。 ,e_t,e_s\} 就是稀疏自注意力机制的得到的输出。前t个是item的embedding,字后一个es是目标embedding。 针对第一个问题,作者采用学习target embedding的方式,而不是直接采用会话中最后一个点击的商品 针对第二个问题,作者采用α-entmax的激活函数,主要是通过该方法产生稀疏解,从而避免给一些不感兴趣的商品加权
深入浅出:什么是 DeepSeek 稀疏注意力 (DSA)?本文旨在揭开 DeepSeek 稀疏注意力(DeepSeek Sparse Attention, DSA)机制的神秘面纱。 在大型语言模型中,一个核心机制叫做“注意力”(Attention),它帮助模型理解单词之间的关系。在传统的注意力机制中,模型为了理解一个词,必须将其与前面出现过的每一个词进行关联和计算。 而 DeepSeek 稀疏注意力(DSA)正是为了解决这个效率难题而设计的创新方案。2. 解决方案:DeepSeek 稀疏注意力 (DSA) 登场DeepSeek 稀疏注意力(DSA)是由 DeepSeek-AI 开发的一种创新的注意力机制,旨在解决长文本处理的效率问题。 DeepSeek 稀疏注意力(DSA)是一项关键的架构创新,它通过智能的两步筛选机制,有效解决了大型语言模型在处理长文档时面临的效率和成本瓶颈。
现在考虑另一种稀疏性:D所对应的矩阵中存在很多零元素,但这些零元素并不是以整列、整行形式存在的。 当样本具有这样的稀疏表达形式时,对学习任务来说会有不少好处。 例如具有高度的稀疏性使大多数问题变得线性可分。同时,稀疏样本并不会造成存储上的巨大负担,因为稀疏矩阵已有很多高效的存储方法。 这两个称谓稍有差别,”字典学习“更侧重于学得字典的过程,而”稀疏编码“则更侧重于对样本稀疏表达的过程。 6 压缩感知 与特征选择、稀疏表示不同,压缩感知关注的是如何利用信号本身所具备的稀疏性,从部分观测样本中恢复原信号。通常认为,压缩感知分为”感知测量“和”重构恢复“这两个阶段。” 感知测量“关注如何对原始信号进行处理以获得稀疏样本表示;”重构恢复“关注的是如何基于稀疏性从少量观测中恢复原信号,这是压缩感知的精髓,当我们谈到压缩感知时,通常是指该部分。
从2017年Transformer架构的提出,到如今的稀疏注意力和混合专家模型,LLM架构经历了快速的演进。 稀疏注意力机制 4.1 稀疏注意力的基本思想 稀疏注意力机制通过限制注意力计算的范围,将标准注意力的 O(L2)O(L^2) 复杂度降低到 O(L⋅K)O(L \cdot K) 或 O(LlogL)O 核心思想: 局部注意力:只关注相邻的位置 固定模式注意力:使用预定义的稀疏模式 自适应稀疏注意力:根据内容动态确定关注的位置 结构化稀疏:利用特定结构(如块、带状等)进行稀疏化 4.2 代表性稀疏注意力模型 1 1] [0 0 1 1 1 1] [0 0 0 1 1 1] 4.3 稀疏注意力的数学推导 对于局部稀疏注意力,假设每个位置只关注 KK 个相邻位置,则计算复杂度为 O(L⋅K)O(L \cdot :保持稀疏矩阵结构 模式化剪枝:按照特定模式剪枝权重 动态稀疏训练:训练过程中逐步增加稀疏度 7.2.3 2025年剪枝最新技术 PagedAttention剪枝:保留注意力重要区域,剪枝次要区域 渐进式稀疏化
deepseek-ai/DeepSeek-V3.2-Exp/blob/main/DeepSeek_V3_2.pdf这一次它最主要的是引入了一个新机制DeepSeek Sparse Attention(稀疏注意力 稀疏注意力的思路在很多新一代 Transformer 变体中都在被探索:即不是所有 token 间都做全连接的 self-attention,而是选一些关键 token 或局部连接,从而减少计算复杂度。 DeepSeek 在这个版本中尝试了一种“细粒度稀疏”的策略。具体就是用到了两个关键组件:Lightning Indexer和Top-k Token Selection。 接下来只在这些 top-k 上计算真正的注意力。经过两个组件之后,这样复杂度从 O(L^2)降低到O(LK),其中 k<<LDeepSeek-V3.2-Exp的优势是什么? (4)性能表现:尽管采用稀疏注意力,但整体能力与 V3.1-Terminus 基本持平,尤其在长上下文任务中展现出更优的性价比。
谷歌最近又推出了一个重磅的稀疏注意力模型:Big Bird。 之前各种刷榜的BERT和它的各种衍生版本RoBERTa等,都是构建在Transformer基础上。 谷歌团队解决这个问题的方法,是引入一种全新的稀疏注意力机制:Big Bird。 谷歌「大鸟」:稀疏注意力机制更省内存 Big Bird相对于传统的全注意力机制来说变的更稀疏,作为更长序列上的Transformer,Big Bird不仅能注意到更长的上下文信息,还将计算的二次依赖降低到了线性 实验:三种注意力机制结合效果最好 只采用随机注意力机制、局部注意力机制,或者两者融合起来,都没有三者合体的效果好。 有网友说,最近爆火的GPT-3也用了稀疏注意力机制,但是因为OpenAI的blocksparse太久没更新了,所以不知道二者有没有内在的相似性。
BiFormer中的查询感知稀疏注意力旨在让每个查询聚焦于top-k路由区域。然而,在计算注意力时,选定的键值对受到太多无关查询的影响,减弱了对更重要查询的注意力。 然而,无论是 YOLO11 及更早版本的卷积架构,还是 YOLOv12 引入的基于区域的自注意力机制,都仅限于局部信息聚合和成对相关性建模,缺乏捕捉全局多对多高阶相关性的能力,这限制了在复杂场景下的检测性能 虽然在图像分类中使用稀疏自适应注意力(如DAT)取得了显著成果,但在针对语义分割任务进行微调时,由可变形点选择的键值对缺乏语义相关性。 BiFormer中的查询感知稀疏注意力旨在让每个查询聚焦于top-k路由区域。然而,在计算注意力时,选定的键值对受到太多无关查询的影响,减弱了对更重要查询的注意力。 为了提高查询的注意力效率,我们提出了可变形双级路由注意力(DBRA),这是一种用于视觉识别的注意力内注意力架构。在DBRA的过程中,第一个问题是如何定位可变形点。
将i存到稀疏数组[0][0]的位置 将j存到稀疏数组[0][1]的位置 将count存到稀疏数组[0][2]的位置 将各个有效值的行列存到稀疏数组下一行,例如[1][0]=行,[1][1]=列,[1][ 1.3 代码实现 代码 package com.xn2001.sparsearray; /** * 稀疏数组 * * @author 乐心湖 * @date 2020/8/11 14:53 **/ public class SparseArray { public static void main(String[] args) { //创建一个原始的二维数组 11 * 11 //0: 表示没有棋子 //1: 表示黑子 //1: 表示蓝子 int chessArr1[][] = new int[7][ -> 恢复成 原始的二维数组 /* * 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的`chessArr2 =int[11][11]`
可以看到棋盘是11*11的,并且棋盘上面分布了黑子和蓝子 第一种最简单的办法是将这个棋盘以二维数组的形式保存起来 1代表黑子。 int[][] sparse = new int[sum+1][3]; //填充稀疏数组第一行数据 sparse[0][0] = 11; sparse[0][1] = 11; sparse[0][2] = sum; //将原二维数组转换为稀疏数组 int count = 0;//记录当前累计的行数 1.先读取稀疏数组的第一行(因为第一行数据保存了原来二维数组的行列和有效数据的个数) 2.根据第一行的数据数据创建原始的二维数组 chessArr2 = int[11][11] 3.在读取稀疏数组后几行的数据 11 11 2 1 3 1 2 4 2 稀疏数组转换后的原始二维数组 0 0 0 0 0 0 0
,2020.2 IDEA 激活码 一、稀疏数组的定义 ---- 稀疏(sparsearray)数组:可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组。 当遇到此种情况时,可以使用稀疏数组。 ? 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 【1】将上面类似的二位数组棋盘保存到稀疏数组中,并存放至外部备份文件 sparsearray.text 中:稀疏数组可以简单的看作为是压缩,在开发中也会使用到。 [] args) throws Exception { //定义成int类型的二维数组,默认值就为0; int[][] intArr = new int[11][11]; : 11 11 2 1 2 1 2 3 2 */ System.out.println("====分隔符==
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: 1)记录数组一共有几行几列,有多少个不同的值 2)把具体不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。 ? 二维数组转稀疏数组 public class SpareseArray { public static void main(String[] args) { /** * 创建二维数组 */ int[][] chessArr1 = new int[11][11]; chessArr1[1][2] = 1; 创建稀疏数组,行数=sum+1 ,多出来的1行是对稀疏数组中总行数、总列数以及非0个总个数的 sparseArr[0][0] = chessArr1.length; sparseArr
稀疏注意力 im3 = ax3.imshow(sparse_mask.numpy(), cmap='Blues', vmin=0, vmax=1) ax3.set_title('稀疏注意力( (8×8): 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1... 稀疏注意力:同样大致为线性关系 O(n) ,但斜率比滑动窗口稍高。 稀疏注意力:让大模型记得更全稀疏注意力解决了滑动窗口短视的问题:比如分析一本 10 万字的小说,滑动窗口只能看到局部情节,稀疏注意力能看到开头的人物设定、中间的关键转折、结尾的结局;现在的 “超长上下文大模型 总结下来就是:追求快、处理中短文本,选滑动窗口;要兼顾全面性、搞定超长文本,就用稀疏注意力。
稀疏数组 一、介绍 稀疏数组可以看作是普通数组的压缩,当一个数组中大部分元素为0或同一个值时,可用稀疏数组来保存该数组。 稀疏数组的压缩方法: 记录原数组的大小,几行几列,以及有多少个不同的值 记录原数组不同的值的行数和列数,将其保存在一个小的数组之中 二、实现 1)思路分析 如果原始数组是11*11的一个二维数组 ,里面的有效值个数有三个, 那么转为稀疏数组后,将会变成一个4*3的稀疏数组。 class SparseArray { public static void main(String[] args) { int[][] arrays = new int[11 ][11]; arrays[2][3] = 1; arrays[2][4] = 2; arrays[3][3] = 1; for (int
在矩阵中,如果数值为0的元素数目远远多于非0元素的数目,并且非0元素分布无规律时,则称该矩阵为稀疏矩阵(sparse matrix);与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。 当一个矩阵中含有大量的0值时,可以将矩阵以稀疏矩阵的方式存储以解决资源。在R中,可以用Matrix这个包, 它可以将矩阵转化为稀疏矩阵。 #转化成稀疏矩阵,可以看到0变成了点 library(Matrix) sparseM= Matrix(M) class(sparseM) sparseM ?
为此,「Google提出了一个稀疏注意力框架Exphormer,它使用扩展图来提高图Transformer的可扩展性,并在长期依赖关系表现出了强大的性能」。 具体来说,Exphormer 的稀疏注意力机制构建了一个由三种类型的边组成的交互图,如下图所示: 输入图的边(局部注意力) constant-degree扩展图的边(扩展注意力) 从每个节点到一小组虚拟节点的边 此外,由于使用constant-degree扩展图和少量恒定数量的虚拟节点来进行全局注意力,因此所得的稀疏注意力机制与原始输入图的大小呈线性关系,即它模拟了许多直接交互节点和边总数的顺序。 特别是,当 Exphormer 的稀疏注意力图通过自环(将节点连接到自身的边)进行增强时,它可以普遍逼近连续函数。 与稀疏Transformer的关系 将 Exphormer 与稀疏注意力方法进行比较是很有趣的。也许在概念上与我们的方法最相似的架构是 BigBird,它通过组合不同的组件来构建交互图。
提供两种经典注意力改进方法,涨点小能手:1)通道注意力和空间注意力CBAM;2)全新注意力GAM:超越CBAM,不计成本提高精度; 本文改进:分别加入到YOLO11的backbone、neck、detect ultralytics/nn/modules/head.py 2.计算机视觉中的注意力机制一般来说,注意力机制通常被分为以下基本四大类:通道注意力 Channel Attention空间注意力机制 Spatial Attention时间注意力机制 Temporal Attention分支注意力机制 Branch Attention2.1.CBAM:通道注意力和空间注意力的集成者轻量级的卷积注意力模块,它结合了通道和空间的注意力机制模块论文题目 ,同样是使用了通道注意力机制和空间注意力机制。 但是不同的是对通道注意力和空间注意力的处理。
2.问题分析 上面棋盘可用二维数组进行记录,但是二维数组的很多值是默认值0,因此记录了很多没有意义的数据->稀疏数组 3.基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值。 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩程序的规模。 4.应用实例 (1)使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等) (2)把稀疏数组存盘,并且可以重新恢复原来的二维数组 public class MySparseArray { 1; SparseArray[7, 5] = 1; SparseArray[7, 9] = 1; SparseArray[7, 11 [i,j]; } } } Console.WriteLine("4.输出得到的稀疏数组