Mamba v2诞生:3 SMA与Mamba-2

news2024/10/7 16:25:57

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者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 的最终输出。

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

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

相关文章

从品牌的角度看老字号五芳斋如何“粽”出年轻味?

端午划着龙舟的浆又来到了我们身边&#xff0c;咸鸭蛋和粽子已经裹上精美的包装在货架上等待着它们的“有缘人”&#xff0c;其实长期以来&#xff0c;说起吃粽子除了“甜咸口”的辩论赛&#xff0c;貌似在产品上却并没有太多的创新&#xff0c;但近几年随着消费市场的不断创新…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 6月9日,星期日

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年6月9日 星期日 农历五月初四 1、 人社部&#xff1a;个人养老金开户人数已超6000万&#xff0c;其中31岁至40岁的中高收入人群是开户、缴费和购买产品的主力军。 2、 医保局刊文&#xff1a;研究显示集采仿制药替代原研药…

网关API(SpringCloudGateway)如何自定义Filter

1.前言 SpringCloud 虽然给我们提供了很多过滤器&#xff0c;但是这些过滤器功能都是固定的&#xff0c;无法满足用户的各式各样的需求。因此SpringCloud提供了过滤器的扩展功能自定过滤器。 开发者可以根据自己的业务需求自定义过滤器。 2. 自定义 GatewayFilter(局部过滤器)…

LangChain4j实战

基础 LangChain4j模型适配: Provider Native Image Sync Completion Streaming Completion Embedding Image Generation Scoring Function Calling OpenAI ✅ ✅ ✅ ✅ ✅ ✅ Azure OpenAI ✅ ✅ ✅ ✅ ✅ Hugging Face ✅ ✅ Amazon Bedrock ✅ ✅…

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

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

【C++】:模板初阶和STL简介

目录 一&#xff0c;泛型编程二&#xff0c;函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三&#xff0c;类模板3.1 类模板的定义格式3.2 类模板的实例化 四&#xff0c;STL简介&#xff08;了解&#xff09;4.1 什…

将字符串str1复制为字符串str2

定义两个字符数组str1和str2&#xff0c;再设两个指针变量p1和p2&#xff0c;分别指向两个字符数组中的有关字符&#xff0c;通过改变指针变量的值使它们指向字符串中的不同的字符&#xff0c;以实现字符的复制。编写程序&#xff1a; 运行程序&#xff1a; 程序分析&#xff1…

STM32H750启动和内存优化(分散加载修改)

前些日子有个朋友一直给我推荐STM32H750这款芯片&#xff0c;说它的性价比&#xff0c;说它多么多么好。于是乎&#xff0c;这两天试了试&#xff0c;嚯&#xff0c;真香&#xff01;我们先看看基本配置 这里简单总结下&#xff0c;cortex-m7内核&#xff0c;128k片内flash …

【Java面试】十六、并发篇:线程基础

文章目录 1、进程和线程的区别2、并行和并发的区别3、创建线程的四种方式3.1 Runnable和Callable创建线程的区别3.2 线程的run和start 4、线程的所有状态与生命周期5、新建T1、T2、T3&#xff0c;如何保证线程的执行顺序6、notify和notifyAll方法有什么区别7、wait方法和sleep方…

Django Forbidden (CSRF cookie not set.)解决办法

解决办法就是在setting.py文件中注释&#xff1a; django.middleware.csrf.CsrfViewMiddleware, 这个中间件是为了防止跨站请求伪造的&#xff0c;平时用网页表单请求时&#xff0c;post提交是没有问题的&#xff0c;但是用api调用时就会被禁止&#xff0c;为了能使用接口调用…

文件怎么去重?5个技巧,教你删除重复文件!

一般来说&#xff0c;在处理大量文件时&#xff0c;你可能会遇到重复的类似文件。这些文件占据了电脑上不必要的磁盘空间&#xff0c;导致系统性能下降。而这些文件可以是不同类型的&#xff0c;如照片、视频、音频、存档、文档等。正因如此&#xff0c;您需要通过文件去重来删…

(四)React组件、useState

1. 组件 1.1 组件是什么 概念&#xff1a;一个组件就是用户界面的一部分&#xff0c;它可以有自己的逻辑和外观&#xff0c;组件之间可以相互嵌套&#xff0c;也可以复用多次。 组件化开发可以让开发者像搭积木一样构建一个完整的庞大应用 1.2 React组件 在React中&#xf…

项目-五子棋双人对战:游戏房间的管理(5)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 之前我们已经实现了玩家匹配的功能, 我们都知道, 匹配完过后就可以进入游戏房间进行对战了, 所以我们下一步关注的重点就是对于游戏房间的管理. 模块详细讲解 功能需求 通过匹配的方式, 自动给玩家加入到一个游戏房间…

312. 戳气球

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

vue 响应拦截器,针对某个接口的返回值做特殊处理

1、service.interceptors.response.use 接收两个参数&#xff1a; &#xff08;1&#xff09;参数一&#xff1a;接口成功的回调函数 &#xff08;2&#xff09;参数二&#xff1a;接口失败的回调函数 如要实现以下需求&#xff1a;匹配路径中包含 /api-special 的接口&…

Vue3【十四】watchEffect自动监视多个数据实现,不用明确指出监视哪个数据

Vue3【十四】watchEffect自动监视多个数据实现&#xff0c;不用明确指出监视哪个数据 Vue3【十四】watchEffect自动监视多个数据实现&#xff0c;不用明确指出监视哪个数据 进入立即执行一次&#xff0c;并监视数据变化 案例截图 目录结构 代码 Person.vue <template>&…

LabVIEW 与组态软件在自动化系统中的应用比较与选择

LabVIEW 确实在非标单机设备、测试和测量系统中有着广泛的应用&#xff0c;特别是在科研、教育、实验室和小型自动化设备中表现突出。然而&#xff0c;LabVIEW 也具备一定的扩展能力&#xff0c;可以用于更复杂和大型的自动化系统。以下是对 LabVIEW 与组态软件在不同应用场景中…

2002NOIP普及组真题 4. 过河卒

线上OJ 地址&#xff1a; 【02NOIP普及组】过河卒 核心思想&#xff1a; 对于此类棋盘问题&#xff0c;一般可以考虑 dp动态规划、dfs深搜 和 bfs广搜。 解法一&#xff1a;dp动态规划 方法&#xff1a;从起点开始逐步计算到达每个位置的路径数。对于每个位置&#xff0c;它…

7天搞定Python必背500单词

必备必记-你的Python就牛掰了 每天只背100个就足够了 老话说的好基础不扎实,地动山摇,在学习Python的时候前期基础很重要. 下面是大家常用遇到的Python基础单词,帮助你更好地掌握Python语言: 1.变量 在Python中用来存储数值,文本或其他信息的名称. 2. 函数 用于执行特定…

六、主存储器管理,计算机操作系统教程,第四版,左万利,王英

文章目录 [toc]一、存储管理的功能1.1 存储分配1.2 存储共享1.3 存储保护1.4 存储扩充1.5 地址映射 二、内存资源管理2.1 内存分区2.1.1 静态分区与动态分区2.1.2 等长分区与异长分区 2.2 内存分配2.2.1 静态等长分区的分配2.2.2 *动态异长分区的分配 2.3 碎片与紧凑 三、界地址…