Mamba v2诞生:3 SMA与Mamba-2

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。

Mamba的出现为带来了全新的思路和可能性,通过对结构化半可分离矩阵的各种分解方法的理论研究,可以将状态空间模型SSM与注意力机制Attention的变种进行紧密关联,进而提出一种状态空间对偶SSD的理论框架。

状态空间对偶使得研究人员设计一种新的架构 (Mamba-2),其核心层是对 Mamba(选择性SSM)进行改进,速度提高了2-8倍,同时在语言建模方面能够保持对Transformers的压力。

在开始之前提醒下读者,在Mamba不再真正认为SSM是连续的。事实上,正如在原始论文的讨论,Mamba与S4在对不同类型的数据进行建模方面进行了权衡:S4 是一种连续时间模型,擅长对连续数据进行建模,例如音频波形和像素级视觉等感知信号。Mamba S6是一种离散时间模型,擅长对离散数据进行建模,例如语言等标记化数据。

线性注意力机制代表着在注意力运算时去掉了softmax。这点在线性RNN<要是忘记了,记得温习下!>已经讲过了。

张量收缩

张量收缩这个词一时之间很难解释清楚,后续开专题介绍。大白话的意思就是多个高维的矩阵按照某种方式转化(相乘)压缩到一定的维度,其实传统的矩阵乘法也是其中的一种。

假如用图标来表示,那么如下为各种维度的张量表示:

那么多个矩阵之间的相乘就可以用下面的图标进行简化表示:

张量收缩在高维张量中使用广泛,例如下面4维的矩阵AB之间要按照某个维度进行压缩,整个过程如下:

d = 10A = np.random.rand(d,d,d,d)  B = np.random.rand(d,d,d,d)Ap  = A.transpose(0,2,1,3);  Bp  = B.transpose(0,3,1,2)App = Ap.reshape(d**2,d**2); Bpp = Bp.reshape(d**2,d**2)Cpp = App @ Bpp;             C   = Cpp.reshape(d,d,d,d)

当然也可以使用numpy的函数einsum,

einsum("some string describing an operation", tensor_1, tensor_2, ...) 。

例如输入A_{iij},B_{kji},C_{l},不用这个函数的话,你只能这么写:

n = A.shape[0]out = (    A[t.arange(n), t.arange(n), :, None, None]  * B.permute(2, 1, 0)[:, :, :, None]  * C[None, None, None, :]).sum(1,3).T

若采用einsum函数,则:

out = t.einsum("iij,kji,l->ki", A, B, C)

SMA

Structured Masked Attention

结构化掩蔽注意力 (SMA)(或简称为结构化注意力)被定义为𝑄、𝐾、𝑉以及任何结构化矩阵𝐿的函数,通过4向张量收缩,

这里请读者注意每个矩阵的形状参数,

SMA有两种算法可以通过进行张量收缩:

一种为二次模态算法,例如的标准注意力机制,这个计算大家应该不陌生吧。要是陌生的话,请移步。

另外一种为线性模式算法:

众所周知,收缩顺序会对计算复杂度产生巨大影响。状态空间模型是一种可以通过多种方式计算,具有二次与线性对偶形式。线性注意力具有类似的二元(对偶)性。

到了这里说明选择不同的Mask L可以生成各种线性注意力的变种。而SMA也借助这L矩阵将各种线性注意力统一到一个框架之下。在这个框架下Mamba-2则是采用了1-半分离矩阵。

下面其实列出了SSM和SMA之间的紧密联系,他们都拥有二元模态和线性模态。SSM和SMA在矩阵A为标量的时候相交,产生了一大堆SSD的模型,而这些模型只是SSD中的特例。<此处请注意A和L!>

因此SSD层可以看成是SSM也可以看成是线性注意力:

Mamba-2架构

上图右为Mamba-2的块结构,Mamba-2块通过删除连续的线性投影简化了Mamba块;SSM参数𝐴、𝐵、𝐶在块的开头生成,而不是作为SSM输入𝑋 的函数。同时Mamba-2添加了一个额外的规范化层,就像在NormFormer中一样,以提高稳定性。𝐵 和 𝐶 投影在 𝑋 头部之间只存在一个单头进行共享,类似于多值注意力 (MVA)。

请注意不同头,ABC的维度

这里重点讨论的是Mamba-2的并行策略。使用张量并行对 Mamba-1进行大规模训练存在一个问题,它每层需要2个all-reduce,而Transformer中每个注意力或 MLP层只需要 1个all-reduce。这是因为SSM参数是内部激活函数,而不是层输入的函数。

在Mamba-2中使用平行投影,所有SSM参数都是层输入的函数,可以很容易地将TP应用于输入投影,即每个SSM head (𝐴, 𝐵,𝐶,𝑋) ↦ 𝑌都在单一的设备上。例如将输入投影和输出投影矩阵拆分为 2、4、8 个分片,以及每个GPU单独进行归一化。这些更改会导致每层1个 all-reduce。

当在非常长的序列上进行训练时,可以沿着序列长度进行拆分,并将不同的部分分配给不同的设备。序列并行性有两种主要形式:对于残差和归一化运算,将张量并行中的all-reduce 替换为reduce-scattter、残差+归一化,然后是all-gather。由于 Mamba-2 使用与 Transformer 相同的残差和归一化结构,因此这种形式的序列并行无需修改即可直接应用。

对于注意力,可以使用环形注意力沿序列维度将其拆分。对于 Mamba-2,SSD框架使用相同的块分解,可以让每个 GPU 计算其本地输出和最终状态,然后在 GPU 之间传递状态(使用发送/接收通信原语),然后再更新每个 GPU 的最终输出。

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

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

相关文章

312. 戳气球 Hard

有 n 个气球&#xff0c;编号为0 到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球&#xff0c;你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代表和 i 相邻…

JDK17 | Windows环境配置

众所周知&#xff0c; Jdk8做了很大的提升&#xff0c;网上的访谈&#xff0c;问到当下程序员要不要升级JDK版本的时候&#xff0c;得到异口同声的答案&#xff0c;不需要。这么多年过去了&#xff0c;数据是不会骗人的&#xff0c;现在Star最多的是JDK17&#xff0c;今天&…

STM32中ADC在cubemx基础配置界面介绍

ADCx的引脚,对应的不同I/O口&#xff0c;可以复用。 Temperature :温度传感器通道。 Vrefint :内部参照电压。 Conversion Trigger: 转换触发器。 IN0 至 IN15,是1ADC1的16个外部通道。本示例中输出连接的是ADC2的IN5通道&#xff0c;所以只勾选IN5.Temperature Sensor Cha…

搭建自己的组件库<2>dialog 组件

目录 设置title 插槽显示 控制宽高 关闭对话框 transition实现动画 引入深度选择器 同样创建组件dialogue.vue后全局注册 dialogue模版&#xff1a; <template><!-- 对话框的遮罩 --><div class"miao-dialog_wrapper"><!-- 真的对话框 …

python如何输入回车

Python默认遇到回车的时候&#xff0c;输入结束。所以我们需要更改这个提示符&#xff0c;在遇到空行的时候&#xff0c;输入才结束。 raw_input就是从标注输入读取输入&#xff0c;输入的是什么就是什么。 文档解释&#xff1a; The function then reads a line from input,…

debian系统apt 国内安装源

debian系统apt 国内安装源&#xff1a; 国内阿里镜像源&#xff1a; deb http://mirrors.aliyun.com/debian stable main non-free contrib deb-src http://mirrors.aliyun.com/debian stable main non-free contrib 打开源文件位置&#xff1a;/etc/apt/sources.list,原来的内…

《经典图论算法》广度优先搜索

摘要&#xff1a; 1&#xff0c;广度优先搜索介绍 2&#xff0c;广度优先搜索的解题步骤 3&#xff0c;广度优先搜索的代码实现 1&#xff0c;广度优先搜索介绍 广度优先搜索(Breadth-first search&#xff0c;BFS)&#xff0c;又称宽度优先搜索&#xff0c;简单的说&#xff0…

知识工作者如何在工作中使用大模型?

自 2022 年 11 月 OpenAI 发布 ChatGPT 以来&#xff0c;人们对生成式人工智能&#xff08;GenAI&#xff0c;以下简称“生成式AI”&#xff09;的兴趣激增&#xff0c;同时也对其安全性表示担忧。 &#xff08;译者注&#xff1a;生成式人工智能&#xff0c;即用 AI 生成文本…

大模型常用推理参数工作原理

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 do_sample do_sample 参数控制是否使用采样…

QQ号码采集软件

寅甲QQ号码采集软件, 一款采集QQ号、QQ邮件地址&#xff0c;采集QQ群成员、QQ好友的软件。可以按关键词采集&#xff0c;如可以按地区、年龄、血型、生日、职业等采集。采集速度非常快且操作很简单。

抽象的java入门1.3.2

前言&#xff1a; 全新版本的函数&#xff08;方法&#xff09;定义&#xff0c;更简单 1.优化了验证过程&#xff0c;直击本质 2.新增目前一图流 正片&#xff1a; 函数的结构可以分为三部分&#xff1a;函数名&#xff0c;参数&#xff0c;函数体 一生二&#xff0c;二生…

扩散模型Stable Diffusion

扩散模型构成 Text Encoder(CLIPText) Clip Text为文本编码器。以77 token为输入&#xff0c;输出为77 token 嵌入向量&#xff0c;每个向量有768维度。 Diffusion(UNetScheduler) 在潜在空间中逐步处理扩散信息。以文本嵌入向量和由噪声组成的起始多维数组为输入&#xff0c…

gcc源码分析 词法和语法分析

gcc源码分析 词法和语法分析 一、输入参数相关1、命令行到gcc二、词法与语法分析1、词法分析1.1 struct cpp_reader1.2 struct tokenrun/struct cpp_token/lookahead字段1.3 struct ht2.1 语法符号相关的结构体c_token定义如下:2.2在语法分析中实际上有多个API组成了其接口函数…

产品成功的关键:构建高效运作的系统

在如今竞争激烈的市场环境中&#xff0c;一个产品要想脱颖而出&#xff0c;不仅仅需要独特的创意和优质的功能&#xff0c;更需要建立一套高效运作的系统。这个系统包括结果的具体化、达成路径的明确以及持续执行迭代并形成习惯等多个环节。下面&#xff0c;我们将结合具体的案…

中国现在最厉害的书法家颜廷利:东方伟大思想家哲学家教育家

中国书法界名人颜廷利教授&#xff0c;一位在21世纪东方哲学、科学界及当代中国教育领域内具有深远影响力的泰斗级人物&#xff0c;不仅以其深厚的国学修为和对易经姓名学的独到见解著称&#xff0c;还因其选择在济南市历城区的龙泉大街以及天桥区的凤凰山庄与泉星小区等地设立…

副业赚钱:如何避开陷阱,实现真正的财务自由

嗨&#xff0c;我是兰若&#xff0c;在这个时代&#xff0c;副业已经成为许多人追求财务自由的途径。但是&#xff0c;你在网上看到的许多副业广告实际上可能让你陷入更糟糕的境地。今天&#xff0c;我们就来揭开这些副业的真相&#xff0c;并分享一些真正有潜力的副业选择&…

SpringBoot——整合WebSocket长连接

目录 WebSocket 项目总结 新建一个SpringBoot项目 pom.xml WebSocketConfig配置类 TestWebSocketEndpoint服务端点类 socket.html客户端 IndexController控制器 SpringbootWebsocketApplication启动类 测试客户端和服务端如何使用WebSocket进行连接和通信 WebSocket S…

Spark参数配置不合理的情况

1.1 内存设置 &#x1f4be; 常见的内存设置有两类&#xff1a;堆内和堆外 &#x1f4a1; 我们作业中大量的设置 driver 和 executor 的堆外内存为 4g&#xff0c;造成资源浪费 &#x1f4c9;。 通常 executor 堆外内存在 executor.cores1 的时候&#xff0c;1g 足够了&…

C语言 树与二叉树基础部分

树与二叉树基础部分 树的基础概念二叉树的性质二叉树的遍历前序遍历中序遍历后序遍历层序遍历根据遍历结果恢复二叉树 二叉树的创建第一种第二种 二叉树的其他典型操作查找指定元素&#xff08;一般二叉树&#xff09;二叉树的高度&#xff08;深度&#xff09;二叉树的拷贝二叉…

BFS实现图的点的层次-java

加强对广度优先搜索的理解&#xff0c;其实就是主要的3个步骤&#xff0c;外加数组模拟单链表是基础&#xff0c;要搞懂。 目录 前言 一、图中点的层次 二、算法思路 1.广度优先遍历 2.算法思路 三、代码如下 1.代码如下&#xff08;示例&#xff09;&#xff1a; 2.读入…