当前位置: 首页 > news >正文

MAMBA介绍:一种新的可能超过Transformer的AI架构

有人说,“理解了人类的语言,就理解了世界”。一直以来,人工智能领域的学者和工程师们都试图让机器学习人类的语言和说话方式,但进展始终不大。因为人类的语言太复杂,太多样,而组成它背后的机制,往往又充满着不可名状的规律。

过去人们在自然语言处理中多采用 RNN 循环神经网络,它十分类似于人类逻辑上对语言的理解,即:强调上下文顺序、前后文逻辑关系。但是这种顺序方式让 RNN 无法实现并行计算,也就是说,它的速度十分缓慢,而规模也很难扩大。

直到 2017 年 6 月 12 日,一篇名为“Attention is All You Need”的论文被提交到预印论文平台 arXiv 上。一切从此改变。Transformer 的提出直接导致了现在的生成式 AI 风暴。机器好像在一瞬间就学会了如何与人类自如交流。Transformer点石成金的魔力,主要在于它彻底抛弃了前面提到的 RNN 循环神经网络这套逻辑,它完全由自注意力机制组成。大家都有过这样的经验,打乱一个句子中字词序顺,很多时候不并响影你对句子的解理。这是因为人脑在处理信息时会区分权重,也就是说,我们的注意力总是被最重要的东西吸引走,次要的细节则被忽略。Transformer 正是模仿了这一点,使它能够自动学习输入的序列中不同位置之间的依赖关系,并计算其相关性(而不是对整个输入进行编码)。这让针对序列的建模变得更加容易和精准。

尽管如此,随着模型规模的扩展和需要处理的序列不断变长,Transformer 的局限性也逐渐凸显。一个很明显的缺陷是:Transformer 模型中自注意力机制的计算量会随着上下文长度的增加呈平方级增长,比如上下文增加 32 倍时,计算量可能会增长 1000 倍,计算效率非常低。现在如日中天的ChatGPT大模型就有一大痛点:处理长文本算力消耗巨大。背后原因其实就是Transformer架构中注意力机制的二次复杂度。为了克服这些缺陷,研究者们开发出了很多注意力机制的高效变体,但这往往以牺牲其有效性特为代价。到目前为止,这些变体都还没有被证明能在不同领域发挥有效作用。

最近,卡内基梅隆大学机器学习系助理教授 Albert Gu和普林斯顿大学计算机科学系即将上任的助理教授Tri Dao,联合提出一项名为「MAMBA」的研究似乎打破了这一局面。这篇论文的预印本本月初分布在arXiv网站上:


图一: MAMBA预印本论文截图

论文的第一作者Albert Gu表示,这项研究的一个重要创新是引入了一个名为「选择性 SSM」的架构,该架构是 Albert Gu 此前主导研发的 S4 架构(Structured State Spaces for Sequence Modeling ,用于序列建模的结构化状态空间)的一个简单泛化,可以有选择地决定关注还是忽略传入的输入。一个「小小的改变」—— 让某些参数成为输入的函数,结果却非常有效。

值得一提的是,S4 是一个非常成功的架构。此前,它成功地对  Long Range Arena (LRA) 中的长程依赖进行了建模,并成为首个在 Path-X 上获得高于平均性能的模型。更具体地说,S4 是一类用于深度学习的序列模型,与 RNN、CNN 和经典的状态空间模型(State Space Model,SSM)广泛相关。SSM 是独立的序列转换,可被整合到端到端神经网络架构中( SSM 架构有时也称 SSNN,它与 SSM 层的关系就像 CNN 与线性卷积层的关系一样)。MAMBA论文也讨论了一些著名的 SSM 架构,比如 Linear attention、H3、Hyena、RetNet、RWKV,其中许多也将作为论文研究的基线。MAMBA 的成功让 Albert Gu 对 SSM 的未来充满了信心。

Tri Dao 则是 FlashAttention、Flash Attention v2、Flash-Decoding的作者。FlashAttention 是一种对注意力计算进行重新排序并利用经典技术(平铺、重新计算)加快速度并将内存使用从序列长度的二次减少到线性的算法。Flash Attention v2、Flash-Decoding 都是建立在 Flash Attention 基础上的后续工作,把大模型的长文本推理效率不断推向极限。在 Mamba 之前,Tri Dao 和 Albert Gu 也有过合作。

另外,这项研究的模型代码和预训练的检查点是开源的,参见以下链接:https://github.com/state-spaces/mamba.

图二:MAMBA下载页面截图

方法创新

MAMBA论文的第 3.1 节介绍了如何利用合成任务的直觉来启发选择机制,第 3.2 节解释了如何将这一机制纳入状态空间模型。由此产生的时变 SSM (State Space Mode) 不能使用卷积,导致了高效计算的技术难题。研究者采用了一种硬件感知算法,利用当前硬件的内存层次结构来克服这一难题(第 3.3 节)。第 3.4 节描述了一个简单的 SSM 架构,不需要注意力,甚至不需要 MLP 块。第 3.5 节讨论了选择机制的一些其他特性。

(1) 选择机制

本文的研究者首先发现了此前模型的一个关键局限:以依赖输入的方式高效选择数据的能力(即关注或忽略特定输入)。

序列建模的一个基本方法是将上下文压缩到更小的状态,我们可以从这个角度来看待当下流行的序列模型。例如,注意力既高效又低效,因为它根本没有明确压缩上下文。这一点可以从自回归推理需要明确存储整个上下文(即 KV 缓存)这一事实中看出,这直接导致了 Transformer 缓慢的线性时间推理和二次时间训练。

递归模型的效率很高,因为它们的状态是有限的,这意味着恒定时间推理和线性时间训练。然而,它们的高效性受限于这种状态对上下文的压缩程度。

为了理解这一原理,图三展示了两个合成任务的运行示例:

图三: MAMBA中两个合成任务的运行示例。(左) 复制任务的标准版本涉及输入和输出元素之间的恒定间距,很容易通过线性递归和全局卷积等时不变模型来解决。(右上) 选择性复制任务在输入之间具有随机间隔,并且在需要时改变模型,该模型可以根据输入的内容选择性地记住或忽略输入。(右下) 联想回忆的一个例子,需要根据上下文检索答案,这是大语言模型的一项关键能力。

本文作者设计了一种简单的选择机制,根据输入对 SSM 参数进行参数化。这样,模型就能过滤掉无关信息,并无限期地记住相关信息。

例如将选择机制纳入模型的一种方法就是让影响序列交互的参数(如 RNN 的递归动力学或 CNN 的卷积核)与输入相关。下图中算法 1 和 2 展示了本文使用的主要选择机制。其主要区别在于,该方法只需将几个参数 ∆,B,C 设置为输入函数,并在整个过程中改变张量形状。这些参数现在都有一个长度维度 L ,意味着模型已经从时间不变变为时间可变。

图四:SSM和SSM+selection两种算法的流程图。

(2) 硬件感知算法

上述变化对模型的计算提出了技术挑战。所有先前的 SSM 模型都必须是时间和输入不变的,这样才能提高计算效率。为此,本文作者采用了一种硬件感知算法,通过扫描而不是卷积来计算模型,但不会将扩展状态具体化,以避免在 GPU 存储器层次结构的不同级别之间进行 IO 访问。由此产生的实现方法在理论上(与所有基于卷积的 SSM 的伪线性相比,在序列长度上呈线性缩放)和现有硬件上都比以前的方法更快(在 A100 GPU 上可快达 3 倍)。

图五: 结构化的SSM通过更高维度的潜在状态h(例如,二进制操作= 4)独立地映射输入变量的每个通道(例如𝐷= 5)到输出变量的每个通道(例如,二进制操作= 4)。先前的SSM通过需要时不变性的替代计算路径来避免实现这个大的有效状态(𝐷二进制操作,倍批大小的变量和序列长度的变量𝐿):(∆,a, B, C)参数在时间上是恒定的。我们的选择机制增加了依赖输入的动态,这也需要一个谨慎的硬件感知算法,只在更有效的GPU内存层次结构中实现扩展状态。

(3) 算法架构

MAMBA将先前的 SSM 架构设计与 Transformer 的 MLP 块合并为一个块,从而简化了深度序列模型架构,形成了一种包含选择性状态空间的简单、同质的架构设计(MAMBA)。

与结构化 SSM 一样,选择性 SSM 也是一种独立的序列变换,可以灵活地融入神经网络。H3 架构是著名的同质化架构设计的基础,通常由线性注意力启发的块和 MLP(多层感知器)块交错组成。

如图六所示,本文作者简化了这一架构,将这两个部分合二为一,均匀堆叠。他们受到门控注意力单元(GAU)的启发,该单元也对注意力做了类似的处理。

总而言之,选择性 SSM 以及 Mamba 架构的扩展是完全递归模型,几个关键特性使其适合作为在序列上运行的通用基础模型的骨干:

  1. 高质量:选择性为语言和基因组学等密集模型带来了强大的性能。
  2. 快速训练和推理:在训练过程中,计算量和内存与序列长度成线性关系,而在推理过程中,由于不需要缓存以前的元素,自回归展开模型每一步只需要恒定的时间。
  3. 长上下文:质量和效率共同提高了实际数据的性能,序列长度可达 100 万。

图六: 简化块设计结合了H3块与MLP块。与H3块相比,MAMBA用激活函数取代了第一个乘法门。与MLP块相比,MAMBA在主分支中添加了一个SSM。

实验评估

MAMBA论文对该架构进行了多方位测试。这些实证验证了 MAMBA 作为通用序列基础模型骨干的潜力。无论是在预训练质量还是特定领域的任务性能方面,MAMBA 都能在多种类型的模态和环境中发挥作用。

(1) 合成任务

在复制和感应头等重要的语言模型合成任务上,MAMBA 不仅能轻松解决,而且能推断出无限长的解决方案(>100 万 token)。

(2) 音频和基因组学

在音频波形和 DNA 序列建模方面,Mamba 在预训练质量和下游指标方面都优于 SaShiMi、Hyena、Transformer 等先前的 SOTA 模型(例如,在具有挑战性的语音生成数据集上将 FID 降低了一半以上)。在这两种情况下,它的性能随着上下文长度的增加而提高,最高可达百万长度的序列。

(3) 语言建模

Mamba 是首个线性时间序列模型,在预训练复杂度和下游评估方面都真正达到了 Transformer 质量的性能。通过多达 1B 参数的缩放规律,研究者发现 Mamba 的性能超过了大量基线模型,包括 LLaMa 这种非常强大的现代 Transformer 训练配方。

(4)速度和显存基准测试

下图展示了scan操作(状态扩展N = 16)速度,以及Mamba端到端推理吞吐量的基准测试。

测试结果显示,当序列长度超过2k时,高效的SSM scan比目前最优秀的注意力机制——FlashAttention-2还要快。而且,比起PyTorch标准的scan实现,速度提升更是高达20到40倍。由于没有键值(KV)缓存,因此Mamba可以支持更大的批处理大小,从而使推理吞吐量比同等规模Transformer高了4到5倍。

举个例子,一个未经训练的69亿参数的Mamba(Mamba-6.9B),在推理处理能力上可以超过仅有13亿参数、规模小5倍的Transformer模型。

与大多数深度序列模型一样,显存使用量与激活张量的大小成正比。表15显示,Mamba的显存需求与经过优化的Transformer相当。

表一: Mamba的内存占用可与最优化的Transformer相媲美(125M模型的结果)。

小结

Mamba是一种状态空间模型(SSM,State Space Model)。它建立在更现代的适用于深度学习的结构化SSM(S4, Structured SSM)基础上,与经典架构RNN有相似之处。

与以前的研究相比,MAMBA主要有三点创新:(1)对输入信息有选择性处理;(1) 硬件感知的算法;(3) 更简单的架构。

实验结果显示,无论是在预训练困惑度还是下游任务评估方面,MAMBA是第一个真正实现匹配Transformer性能的线性时间序列模型。并且在音频和DNA序列建模上也优于之前的SOTA模型,表现出一定的通用性。

正如作者在结论中提出的,MAMBA是通用序列模型骨干的有力候选者。

关于作者

论文两位作者Albert Gu和Tri Dao,博士都毕业于斯坦福大学,导师为Christopher Ré。

其中,Albert Gu现在是CMU助理教授,多年来一直推动SSM架构发展。他曾在DeepMind 工作,目前是Cartesia AI的联合创始人及首席科学家。

Tri Dao,以FlashAttention、FlashDecoding系列工作闻名,现在是普林斯顿助理教授,和Together AI首席科学家,也在Cartesia AI担任顾问。

参考文献:

https://arxiv.org/abs/2312.00752

相关文章:

MAMBA介绍:一种新的可能超过Transformer的AI架构

有人说,“理解了人类的语言,就理解了世界”。一直以来,人工智能领域的学者和工程师们都试图让机器学习人类的语言和说话方式,但进展始终不大。因为人类的语言太复杂,太多样,而组成它背后的机制,…...

win系统一台电脑安装两个不同版本的mysql教程

文章目录 1.mysql下载zip包(地址)2.解压在你的电脑上(不要再C盘和带中文的路径)3.创建my.ini文件4.更改环境变量(方便使用, 可选)5.打包mysql服务6.初始化mysql的data7.启动刚刚打包的服务8.更改密码 1.mys…...

esp32-s3部署yolox_nano进行目标检测

ESP32-S3部署yolox_nano进行目标检测 一、生成模型部署项目01 环境02 配置TVM包03 模型量化3.1预处理3.2 量化 04 生成项目 二、烧录程序 手上的是ESP32-S3-WROOM-1 N8R8芯片,整个链路跑通了,但是识别速度太慢了,20秒一张图,所以暂…...

TCP传输数据的确认机制

实际的TCP收发数据的过程是双向的。 TCP采用这样的方式确认对方是否收到了数据,在得到对方确认之前,发送过的包都会保存在发送缓冲区中。如果对方没有返回某些包对应的ACK号,那么就重新发送这些包。 这一机制非常强大。通过这一机制&#xf…...

使用Ansible Expect模块实现自动化交互式任务

Ansible是一种功能强大的自动化工具,可用于自动化配置管理、部署和任务执行。其中的Expect模块是Ansible的一个重要组件,它允许我们自动化处理需要与交互式命令行进行交互的任务。本文将介绍如何使用Ansible的Expect模块,并提供一些示例来说明…...

51单片机独立按键以及矩阵按键的使用以及其原理--独立按键 K1 控制 D1 指示灯亮灭以及数码管显示矩阵按键 S1-S16 按下后键值 0-F

IO 的使用–按键 本文主要涉及8051单片机按键的使用,包括独立按键以及矩阵按键的使用以及其原理,其中代码实例包括: 1.独立按键 K1 控制 D1 指示灯亮灭 2.通过数码管显示矩阵按键 S1-S16 按下后键值 0-F 文章目录 IO 的使用--按键一、按键消抖二、独立按…...

chrome安装jsonview

写在前面 通过jsonview可以实现,当http响应时application/json时直接在浏览器格式化显示,增加可读性。本文看下如何安装该插件到chrome中。 1:安装 首先在这里 下载插件包,然后解压备用。接着在chrome按照如下步骤操作&#xf…...

使用TouchSocket适配一个c++的自定义协议

这里写目录标题 说明一、新建项目二、创建适配器三、创建服务器和客户端3.1 服务器3.2 客户端3.3 客户端发送3.4 客户端接收3.5 服务器接收与发送 四、关于同步Send 说明 今天有小伙伴咨询我,他和同事(c端)协商了一个协议,如果使…...

VSC改造MD编辑器及图床方案分享

VSC改造MD编辑器及图床方案分享 用了那么多md编辑器,到头来还是觉得VSC最好用。这次就来分享一下我的blog文件编辑流吧。 这篇文章包括:VSC下md功能扩展插件推荐、图床方案、blog文章管理方案 VSC插件 Markdown All in One Markdown Image - 粘粘图片…...

SpringBoot的依赖管理和自动配置

与其明天开始,不如现在行动! 文章目录 1 依赖管理机制2 自动配置机制2.1 初步理解2.2 完整流程 💎总结 1 依赖管理机制 为什么导入starter-web后所有相关依赖都会导入进来? 开发什么场景,导入什么场景启动器-spring-bo…...

linux 定时任务

使用 crontab Usage: crontab [-u user] [-e|-l|-r] Crontab 的格式说明如下: * 逗号(‘,’) 指定列表值。如: “1,3,4,7,8″ * 中横线(‘-’) 指定范围值 如 “1-6″, 代表 “1,2,3,4,5,6″ * 星号 (‘*’) 代表所有可能的值 */15 表示每 15 分钟执行一次 # Use the ha…...

增强现实中的真实人/机/环与虚拟人/机/环

在增强现实中,真实人与虚拟人、真实机器与虚拟机器、真实环境与虚拟环境之间有着密切的关系。增强现实技术通过将真实与虚拟相结合,打破了传统的现实世界与虚拟世界的界限,创造出了一种新的体验方式。真实人、真实机器和真实环境与其对应的虚…...

Python网络爬虫环境的安装指南

网络爬虫是一种自动化的网页数据抓取技术,广泛用于数据挖掘、信息搜集和互联网研究等领域。Python作为一种强大的编程语言,拥有丰富的库支持网络爬虫的开发。本文将为你详细介绍如何在你的计算机上安装Python网络爬虫环境。 一、安装python开发环境 进…...

【MyBatis系列】MyBatis字符串问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【Java】构建表达式二叉树和表达式二叉树求值

问题背景 1. 实现一个简单的计算器。通过键盘输入一个包含圆括号、加减乘除等符号组成的算术表达式字符串,输出该算术表达式的值。要求: (1)系统至少能实现加、减、乘、除等运算; (2)利用二叉…...

采用Python 将PDF文件按照页码进行切分并保存

工作中经常会遇到 需要将一个大的PDF文件 进行切分,比如仅需要大PDF文件的某几页 或者连续几页,一开始都是用会员版本的WPS,但是对于程序员,就是要采用技术白嫖 这里就介绍一个 python的PDF 包 PyPDF2 其安装方式也很简单 p…...

H264视频编码原理

说到视频,我们首先想到的可能就是占内存。我们知道一个视频是由一连串图像序列组成的,视频中图像一般是 YUV 格式。假设有一个电影视频,分辨率是 1080P,帧率是 25fps,并且时长是 2 小时,如果不做视频压缩的…...

UDP实现群聊

代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String;public class liaotian extends JFrame{private static final int DEFAULT_PORT8899;private JLabel stateLB…...

服务器部署网易开源TTS | EmotiVoice部署教程

一、环境 ubuntu 20.04 python 3.8 cuda 11.8二、部署 1、docker方式部署 1.1、安装docker 如何安装docker,可以参考这篇文章 1.2、拉取镜像 docker run -dp 127.0.0.1:8501:8501 syq163/emoti-voice:latest2、完整安装 安装python依赖 conda create -n Emo…...

贪心算法和动态规划

目录 一、简介 二、贪心算法案例:活动选择问题 1.原理介绍 三、动态规划案例:背包问题 1.原理介绍 四、贪心算法与动态规划的区别 五、总结 作者其他文章链接 正则表达式-CSDN博客 深入理解HashMap:Java中的键值对存储利器-CSDN博客…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

Kafka主题运维全指南:从基础配置到故障处理

#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...