21 . Mamba — Linear-Time Sequence Modeling with Selective State Spaces (S6)

SSM Selective Gu & Dao 2023
Albert Gu, Tri Dao · arXiv:2312.00752

上一代的问题:SSMs (S4) 是时不变的 — 对所有输入一视同仁,无法做基于内容的推理。在 Selective Copying、Induction Heads 等需要内容感知的任务上完全失败。

这代改了什么:Selective SSM (S6) — B、C、DELTA 都随当前输入变化,使模型能选择性地记住或遗忘。代价是不能再使用卷积加速,只能用 scan(前缀和扫描)。

效果:3B 模型匹配 6.9B Transformer 的 Perplexity,推理吞吐 5x 提升。在 Selective Copying 上实现完美准确率,可外推到超过 100 万 token 的序列长度。

一、核心背景

在长序列建模领域存在一条根本性的效率-质量分界线。Transformer 使用注意力机制在每对 token 之间建立直接路径,实现 O(1) 的最短路径长度,但这以 O(n2) 的训练计算复杂度和 O(n) 的推理 KV 缓存为代价。当序列长度 n 超过数万时,二次复杂度变得不可承受。

状态空间模型(SSM),特别是结构化状态空间序列模型(S4),将复杂度降低到 O(n) 训练和 O(1) 推理。S4 使用 HiPPO 初始化矩阵 A 和参数化的离散化步骤,将序列压缩到固定维度 N 的隐藏状态中。但 S4 有一个关键限制:线性时不变(LTI)。对每个 token,投影矩阵 A、B、C 完全相同,模型无法根据内容调节信息流动。所有输入被同等处理。

这个限制在合成任务上暴露得最明显:

这些任务对 Transformer 来说微不足道(注意机制直接按内容检索),但对所有时不变序列模型(包括线性注意力和 RWKV 等)都是重大挑战。核心矛盾是:高效的序列模型是时不变的,但时不变阻碍了内容感知推理

理解 LTI 的具体含义:在 S4 中,隐藏状态更新 h_t = A * h_{t-1} + B * x_t 对所有 t 共享相同的 A、B、C。这意味着如果两个 token 的向量值相同,它们对状态的贡献完全相同——模型无法区分"这个 token 需要记住"和"这个 token 可以忽略"。这就像一个不敲门就进门的人:对每个访客开同样的门缝。

二、核心洞察:压缩视角

Mamba 的作者提出一个统一视角来理解不同序列模型:序列模型本质上是在做上下文压缩

注意力机制不压缩任何信息——它存储完整的上下文(KV 缓存,O(n) 内存),在每一步直接"查阅"整个历史。这是高效的但也是昂贵的。它不费心去判断什么重要——它保留了一切。

RNN 和 SSM 则相反:它们将整个历史压缩到一个有限维度的状态中(O(1) 内存)。这就像写摘要而非存储原文。训练后,模型从每个输入中提取"重要信息"存入状态——但这个提取函数在训练后固定不变(时不变),对所有输入执行相同的压缩策略。

潜在的问题是:好的压缩应该是自适应的。一个参数固定的压缩器无法预知每个序列中哪些内容重要。"John 的生日是 3 月 14 日"和"3 月 14 日是 Pi Day"中,我们需要记住的内容截然不同——前者要记住日期是特殊属性,后者要记住日期是主题。时不变系统无法区分这些情况。

Mamba 的核心创新就是让压缩函数随输入变化:不是训练后固定 "A=0.99 记住大部分信息" 的步调,而是让 A、B、C 对每个 token 计算一个"重要性权重"——告诉模型此时该丢弃什么、保留什么。这就是选择性(Selectivity)的本质:让数据自己决定如何被压缩

类比:Attention 像照相——保留每个像素。SSM 像画速写——只捕捉轮廓。Mamba 是一个智能速写师——根据对象自动调整笔触的粗细和密度。

三、Selective SSM (S6) 算法详解

3.1 回顾 S4(时不变)

在经典 S4 中,连续系统的状态方程被离散化为:

h_t = exp(DELTA * A) * h_{t-1} + (DELTA * A)^{-1} * (exp(DELTA * A) - I) * (DELTA * B) * x_t
公式 1: S4 离散化(零阶保持, ZOH)

其中 A 是 N x N 矩阵(HiPPO 初始化),B 是 N x 1 向量,C 是 1 x N 向量,DELTA 是标量步长。A、B、C、DELTA 都是可学习但输入无关的参数——对所有 token 相同。训练后可以用卷积等价形式并行计算。

y = Conv(x)  (K_bar = (C * B_bar, C * A_bar * B_bar, C * A_bar^2 * B_bar, ...))
公式 2: S4 的卷积等价形式(训练时使用)

3.2 S6 的选择性扩展

Mamba 的关键修改是让 B、C、DELTA 成为输入的函数:

S4 (time-invariant):
  A: (D, N) ← Parameter (learned, shared across tokens)
  B: (D, N) ← Parameter
  C: (D, N) ← Parameter
  DELTA: (D) ← tau_DELTA(Parameter)
  y = SSM(A,B,C)(x)  # 可用卷积或循环计算

S6 (time-varying):
  A: (D, N) ← Parameter (仍然时不变)
  B: (B, L, N) ← s_B(x)  # 输入相关!
  C: (B, L, N) ← s_C(x)  # 输入相关!
  DELTA: (B, L, D) ← tau_DELTA(Parameter + s_DELTA(x))  # 输入相关!
  y = SSM(A,B,C)(x)  # 只能用循环(scan),不能卷积

具体实现中的选择:

3.3 背后的直觉

DELTA 是选择性机制的核心。从离散化公式可以看出,DELTA 控制着 A_bar = exp(DELTA * A) 的大小:

让 DELTA 随输入变化,意味着模型可以学习在遇到重要 token 时"重置窗口"专注当前;遇到无关 token 时"保持状态"不被稀释。B 和 C 的选择性则进一步调节状态读写:B 控制当前输入以什么强度写入状态,C 控制状态中什么内容被读出。

A_bar_t = exp(DELTA_t * A)  (每个 token 有自己的 A_bar)
h_t = A_bar_t * h_{t-1} + B_bar_t * x_t
y_t = C_t * h_t
公式 3: S6 的离散化(每个 token 的 B、C、DELTA 各自不同)

3.4 为什么卷积等价不再成立

S4 训练时使用卷积等价将 O(L) 步串行扫描转变为 O(1) 的 FFT 或卷积。这个等价依赖 A_bar 和 B_bar 对所有 token 恒定。当 A_bar_t 随 token 变化时,展开公式为:

y_t = C_t * A_bar_t * ... * A_bar_1 * B_bar_0 * x_0 + C_t * A_bar_t * ... * B_bar_1 * x_1 + ... + C_t * B_bar_t * x_t

每个路径上的 A_bar 乘积随路径变化,不是固定的卷积核——不能复用卷积计算路径。这一变化是 Mamba 创新的代价:选择性带来更强的表现力,但失去了计算加速路径。

四、SSM 与门控 RNN 的内在联系

论文做了一个重要的理论连接:将 N=1,A=-1,B=1 代入 S6 公式,选择性 SSM 退化为一个经典门控 RNN。

代入条件:N=1(状态广度 1),A=-1(固定的遗忘因子),B=1(输入投影恒等)

初始:h_{t} = A_bar_t * h_{t-1} + B_bar_t * x_t
代入:A_bar_t = exp(DELTA_t * (-1)) ≈ 1 - DELTA_t(泰勒展开)
     B_bar_t = (A_bar_t - I) * A^{-1} * B ≈ DELTA_t
得: h_t ≈ (1 - DELTA_t) * h_{t-1} + DELTA_t * x_t

定义 g_t = sigma(Linear(x_t)),得:
  h_t = (1 - g_t) * h_{t-1} + g_t * x_t

这正是 GRU 的更新门(update gate)的简化形式!

这个联系不是简单的巧合,而是揭示了更深层的结构:门控 RNN 的选择性遗忘/更新机制和 SSM 的选择性状态更新共享相同的信息过滤原理。两者都是在做"多少保留旧状态,多少采纳新输入"的权衡——只是门控 RNN 用门值做离散选择,SSM 用连续 DELTA 调节。Mamba 在这个泛化空间中找到了高效、可并行、且表现力强的操作点。

为什么这个发现重要:它表明 SSM 并不是一个完全异于 RNN/Transformer 的"第三种架构"——而是存在于一个统一的序列模型谱系中。RNN 在谱系的一端(串行、门控),Transformer 在另一端(并行、全连接),SSM 在中间(并行训练 + 串行推理 + 连续状态)。

五、工程实现

Mamba 的核心工程贡献是实现了一个高效的并行扫描(parallel scan)kernel,使 S6 的选择性循环可以在 GPU 上以 O(n) 时间训练。

5.1 并行扫描算法

朴素的前缀和(prefix sum)是 O(n) 串行的:sum[i] = sum[i-1] + arr[i]。但通过分治方法可以用 O(log n) 的并行步骤完成:

SSM 的 scan 是前缀和的推广,需要结合(associative)操作的结合律。核心的"结合"操作为:

(h_t, y_t) = F((h_{t-1}, x_t), (A_bar_t, B_bar_t))

其中 F 满足结合律,使得 (A_bar, B_bar) 对可以像数一样"合并"——这是并行扫描的数学基础。Mamba 的自定义 CUDA kernel 在 SRAM 中执行整个扫描,避免了 HBM 的带宽瓶颈。

5.2 IO-Aware Kernel 设计

组件角色优化策略
SRAM(~192KB per SM)存储状态 h_t 和局部 A_bar/B_bar一次 kernel 调用完成整条序列的 scan,避免多次 load/store
HBM(~80GB)存储输入 x 和输出 y只读写一次,kernel 内做完整计算,不产生中间结果
Fused 算子离散化 + scan + 输出投影三个操作合并为单个 kernel,减少全局内存访问次数

5.3 架构简化

Transformer 层的核心是 Attention + MLP 两个子块。Mamba 将二者合并为一个:

# Simplified Mamba Block Pseudocode
def mamba_block(x):
    # x: (B, L, D)
    residual = x
    x = norm(x)

    # Split into two streams
    x1 = conv1d(silu(linear_in(x)))   # "gate" stream
    x2 = conv1d(linear_in(x))          # "SSM" stream

    # SSM scan (S6)
    B = linear_B(x2)     # (B, L, N)
    C = linear_C(x2)     # (B, L, N)
    delta = softplus(linear_delta(x2) + param_delta)  # (B, L, D)
    y = ssm_scan(A, delta, B, C, x2)  # Fused CUDA kernel

    y = y * x1           # Hadamard product with gate
    y = linear_out(y)
    return y + residual
为何不需要位置编码:Mamba 论文通过实验发现选择性 SSM 本身能编码位置信息。直觉上,由于每个 token 的 A_bar_t 不同,状态更新的步长本身携带了"位置"信号(DELTA_t 对不同位置的 token 呈现不同模式)。这类似于 RNN 天然编码位置(时间步信息嵌入在状态中)——Mamba 恢复了 RNN 的这一特性,同时保留了并行训练能力。

六、优劣势分析

维度Mamba (S6)Transformer
训练复杂度O(n),parallel scanO(n2),矩阵乘法
推理复杂度O(1) per step,常数的状态更新O(n) per step,需重算全部注意力或加载完整 KV 缓存
推理吞吐5x 更高(同规模模型对比)基线
状态维度N=16-64(严重受限)全上下文(无压缩)
硬件适配需要自定义 fused scan kernel原生适配 Tensor Core(矩阵乘)
训练速度比等 FLOPs Transformer 更慢更快(cuBLAS 高度优化)
长序列外推优秀(已被验证 >100 万 token)差(O(n2) 不可承受)
内容推理优秀(Selective Copying 完美)优秀(注意力原生支持)

主要优势:

主要劣势:

七、架构设计

Mamba 构建了一个同质化(homogeneous)的架构:所有层都是相同的 Mamba 块,没有 Transformer 中 attention 层和 MLP 层的交替。每个 Mamba 块内部结构一致,参数通过选择性和门控机制实现不同层级的抽象。

Transformer 层:layer_i = [Attention, MLP] (交替)
Mamba 层: layer_i = [Mamba Block] (同质)

同质架构的优势:

Mamba 的具体模型配置:

模型参数量层数d_model状态维度 N
Mamba-130M130M2476816
Mamba-370M370M48102416
Mamba-790M790M48153616
Mamba-1.4B1.4B48204816
Mamba-2.8B2.8B64256016
Mamba-3B3B48307264
关于状态维度 N 的观察:更大的模型(3B)将 N 提升到 64,说明缩放过程中宽的状态是有帮助的。但 N=64 仍然是 Transformer 隐状态维度(3072)的 1/48——信息压缩比极高。这也是后续 Mamba 2(N=256+)和 Mamba 3(复值状态)的改进方向。

八、实验结果

8.1 语言建模

在 Pile 数据集上训练后的评估:

模型参数量Perplexity (Pile, lower is better)推理吞吐
Pythia2.9B11.05(对照基线)1x
Mamba2.8B10.565x
Mamba3B10.385x
Pythia6.9B10.411x
RWKV3B10.92<5x
Hyena3.5B11.88<3x

关键发现:Mamba-3B 在 Perplexity 上匹配 Pythia-6.9B——一半的参数量达到同等质量。而且推理吞吐高出 5x(因为无需 KV 缓存)。

8.2 合成任务

8.3 Long-Range Arena (LRA)

LRA 是长序列理解的标准基准(序列长度通常为 4096):

模型ListOpsTextRetrievalImagePathfinderPath-X平均
Mamba60.386.583.177.986.998.682.2
S459.686.890.988.686.396.484.8
Transformer36.464.357.542.471.2N/A54.3

Mamba 平均 82.2,接近 S4 的 84.8(S4 在 Retrieval 和 Image 上特别强,因为它为类别数据优化了卷积路径,而 Mamba 更泛化)。Transformer 全部低于 71。在最难的任务 Path-X(1616 像素序列)上,Mamba 以 98.6% 刷新 SOTA——这里 Transformer 因 O(n2) 根本无法运行。

8.4 音频和基因组学

九、上下游关联

9.1 前驱工作

Mamba 站在一系列结构化状态空间模型的肩膀上:

9.2 后续影响

关于名字的趣闻:"Mamba"不是缩写,而是致敬世界上最快的蛇——黑曼巴(Black Mamba)。这个命名呼应了论文的核心目标:在序列建模中实现线性的时间复杂度(快如蛇击)。同样,Mamba 2(SSD = State Space Dual)和 Mamba 3(CSM = Complex State Space)延续了这个传统。

十、个人思考

Mamba 的重要贡献不仅仅是提出了一个新的模型——它是一次对"高效序列建模到底需要什么"这一根本问题的重新审视。

时不变的限制被低估了。 在 Mamba 之前,社区更关注 SSM 的计算效率(O(n) vs O(n2))。Mamba 指出:效率不是全部——时不变输入处理导致了内容感知推理的根本缺失。这一洞察迁移到 RNN 上同样成立:LSTM/GRU 的门控机制本质上就是在做"选择性"——只不过它们的实现方式(门值在 [0,1] 区间)比 SSM 的连续状态更不灵活。

自定义 kernel 是创新的代价。 Mamba 需要自定义 CUDA fused scan kernel。这既是它的工程亮点,也是它普及的最大障碍。Transformer 的矩阵乘法是所有 GPU 的原生操作(cuBLAS、Tensor Core),有几十年的深度优化。Mamba 的 scan kernel 必须从零开始优化,而且它的计算模式(前缀和扫描)不像矩阵乘法那样有成熟的硬件加速。直到 Mamba 2 用 SSD 把问题转化回矩阵乘,这个瓶颈才被缓解。这揭示了一个现实:一个理论上优秀的算法,如果没有高效的硬件映射,很难被广泛采用

简化的架构范式。 Mamba 表明 Transformer 的 attention + MLP 双块设计可能不是必要的——将所有功能整合到单个同质块中同样有效(甚至更高效)。这提示我们,深度学习架构可能正在经历一次"文艺复兴"式的简化:从 VGG 的简单堆叠到 ResNet 的残差连接,从 Transformer 的复杂交替到 Mamba 的同质块——进步往往意味着更少的必要设计。

统一的视角形成中。 从宏观看,SSM、Attention、RNN 不是一个三角竞争关系,而是一个连续谱系。Mamba(以及后续的 Mamba 2)逐渐揭示了三者在数学上的深层联系。现在的问题是:这个谱系中最好的"操作点"在哪里? 不同任务需要不同的效率-容量权衡——完全线性的 Mamba 在 Long Range Arena 上超越了 Transformer,但在细粒度的精确检索中可能还不如一个小 Transformer layer。未来的模型可能不是单纯的选择一边,而是在架构的不同部分灵活地使用谱系上的不同点。