直接回答
**Mamba 是一种以选择性状态空间模型为核心的神经序列架构:它把历史输入压缩进递推状态,并让写入、保留和读取行为随当前 Token 变化。**其核心序列混合器对序列长度采用线性工作量,自回归解码时保留固定形状的历史状态。但这不意味着 Mamba 必然更快、无损或全面优于 Transformer;真实质量和耗时由具体架构、状态大小、内核、负载与硬件共同决定。
因此,长期有效的工程问题不是「Mamba 会不会取代注意力」,而是:哪种信息路由机制能满足当前业务的质量、延迟、内存与运维约束?
架构比较必须拆开三条执行路径
把训练、Prompt 处理和逐 Token 解码混成一个基准,会让任何架构结论失真。
| 执行路径 | 稠密因果注意力 | 选择性 SSM |
|---|---|---|
| 训练或完整序列前向 | 常见实现并行计算 Token 交互;稠密注意力具有二次序列工作量 | 使用并行选择性扫描,序列工作量线性增长 |
| Prompt 处理(Prefill) | 处理全部 Prompt Token,并创建 KV Cache | 扫描 Prompt,生成解码所需递推状态 |
| 自回归解码 | 每个新 Token 读取历史 KV 状态,历史维度随保留 Token 增长 | 每个新 Token 更新固定形状的递推状态 |
对于长度为 (L) 的序列,稠密注意力在概念上涉及 (L \times L) 的成对交互。IO 感知内核可以避免把完整注意力矩阵写入高带宽显存,但不会把稠密注意力变成线性时间算法。解码阶段,每个新 Token 的注意力计算量与 KV 状态都受保留历史影响。
选择性 SSM 对 (L) 个位置执行递推。它不会为每个历史 Token 新增一个显式状态槽位,但总推理内存仍包括权重、逐层递推与卷积状态、批量副本、激活、工作区、图预留和分配器余量。
状态空间模型本质上是可学习递推
状态空间模型用隐状态表示随时间变化的系统。常见连续时间形式为:
dh(t) / dt = A h(t) + B x(t)
y(t) = C h(t) + D x(t)
输入 (x(t)) 改变隐状态 (h(t)),状态转移 (A) 负责把信息向后传递,(C) 负责读取输出。Token 序列是离散的,因此实现需要离散化规则:
h_t = A_bar h_(t-1) + B_bar x_t
y_t = C h_t + D x_t
例如,零阶保持会用矩阵指数,根据连续参数和步长推导 (\bar A) 与 (\bar B);也有模型直接学习离散动力学。离散化不是无关紧要的格式转换,它会改变稳定性、表达能力与数值行为。
高斯过程状态空间模型同样使用潜在状态动力学,但它为未知转移或观测函数设置 GP 先验,并执行概率系统辨识。这与把 Mamba 类神经 SSM 作为序列表征层训练是不同目标:GPSSM 关注轨迹推断、Filtering 或 Smoothing、过程噪声与经过校准的转移不确定性。处理序贯推断时,序贯蒙特卡洛可以随观测到达传播并重新加权粒子,但也必须处理权重退化、重采样方差与路径贫化。
粒子滤波是在线 Filtering 的特化形式,用截至当前的观测估计当前潜状态分布;当转移参数与潜轨迹需要联合推断时,粒子 MCMC会把粒子似然估计器或条件粒子 Kernel 嵌入 MCMC。它们是面向已声明状态空间模型的概率推断算法,并不替代 Mamba 学到的序列混合器。
对线性高斯动力学,卡尔曼滤波给出闭式在线递推,Rauch-Tung-Striebel 平滑器则通过后向过程和未来观测修正完整轨迹;集合卡尔曼滤波用样本协方差替代稠密协方差传播,面向高维资料同化。它们解决的是已指定潜在动态系统上的推断问题,不能证明神经 SSM 从 Token 中保留了什么。
并行训练不会消除递推关系
递推定义了因果依赖,但结合律扫描可以并行计算多个递推区间,再合并区间结果。更早的线性时不变 SSM 由于各位置参数固定,还能改写成卷积。Mamba 让参数随输入变化,因而采用硬件感知的选择性扫描,而不是依赖一个固定卷积核。
该算法会融合算子、尽量把扩展状态保留在更快的存储层,并在反向传播中重算部分中间量。它能否赢得真实耗时,仍取决于已安装内核、张量形状、数据类型、GPU 和对比的注意力实现。
Mamba 增加了内容相关的选择机制
传统线性时不变 SSM 在每个位置使用相同动力学。这样便于使用高效卷积形式,却限制了模型在离散、高信息密度序列上的内容相关路由能力。
原始 Mamba 论文让 (B)、(C) 和离散步长 (\Delta) 成为输入的函数。简化后可以写成:
B_t = projection_B(x_t)
C_t = projection_C(x_t)
delta_t = softplus(projection_delta(x_t))
h_t = exp(delta_t A) h_(t-1) + input_term(B_t, delta_t, x_t)
y_t = C_t h_t
这套机制可以随 Token 调整状态写入强度、历史衰减速度和状态读取方式。它具有内容相关性,但不是 Softmax Attention:查询不会直接索引由全部历史 Value 向量组成的显式列表。
一个可运行的标量模型
下面的无依赖 Go 示例不是 Mamba 实现,它只隔离选择性递推的核心:每个输入携带保留系数、写入系数和读取系数。示例还会证明非法动力学参数会在污染状态前被拒绝。
package main
import (
"fmt"
"math"
)
type SelectiveStep struct {
Value float64
Retain float64
Write float64
Read float64
}
func selectiveRecurrence(steps []SelectiveStep) ([]float64, error) {
if len(steps) == 0 {
return nil, fmt.Errorf("at least one step is required")
}
state := 0.0
outputs := make([]float64, 0, len(steps))
for index, step := range steps {
values := []float64{step.Value, step.Retain, step.Write, step.Read}
for _, value := range values {
if math.IsNaN(value) || math.IsInf(value, 0) {
return nil, fmt.Errorf("step %d contains a non-finite value", index)
}
}
if step.Retain < 0 || step.Retain > 1 {
return nil, fmt.Errorf("step %d retain must be in [0, 1]", index)
}
state = step.Retain*state + step.Write*step.Value
outputs = append(outputs, step.Read*state)
}
return outputs, nil
}
func main() {
sequence := []SelectiveStep{
{Value: 2.0, Retain: 0.10, Write: 1.00, Read: 1.0},
{Value: 9.0, Retain: 0.95, Write: 0.00, Read: 1.0},
{Value: 1.0, Retain: 0.50, Write: 1.00, Read: 1.0},
}
outputs, err := selectiveRecurrence(sequence)
if err != nil {
panic(err)
}
invalid := []SelectiveStep{{Value: 1, Retain: 1.2, Write: 1, Read: 1}}
_, invalidErr := selectiveRecurrence(invalid)
fmt.Printf(
"outputs=[%.2f %.2f %.2f] invalid_retention_rejected=%t\n",
outputs[0],
outputs[1],
outputs[2],
invalidErr != nil,
)
}
预期输出:outputs=[2.00 1.90 1.95] invalid_retention_rejected=true。
第二个输入的数值很大,但写入系数为零,因此它没有进入状态。真实 Mamba 层使用向量化、分通道的动力学,并将 SSM 与投影、局部卷积、门控、归一化和残差路径组合。
Mamba-1、Mamba-2 与 Mamba-3 解决不同瓶颈
三代架构不能被压缩成一个「Mamba 越来越快」的故事。
| 代际 | 主要机制 | 一手来源支持的结论 | 适用边界 |
|---|---|---|---|
| Mamba-1(2023) | 输入相关选择性 SSM 与硬件感知扫描 | 论文在其设置中报告线性序列扩展、选择性扫描相对对比方法最高 3 倍,以及相近规模 Transformer 的 5 倍生成吞吐 | 受论文检查点、内核、A100、任务和模型规模限制,不是通用服务倍率 |
| Mamba-2(2024) | 结构化状态空间对偶性(SSD)与标量单位阵转移结构 | 论文报告其核心层相对 Mamba-1 快 2 至 8 倍,并在论文语言建模实验中保持竞争力 | 核心层结果不等于端到端训练或服务固定加速 |
| Mamba-3(2026) | 指数梯形离散化、复数状态与 MIMO | 在 15 亿参数实验中,论文报告更强的检索与状态跟踪;Mamba-3 MIMO 的状态大小 64 在其实验中达到 Mamba-2 状态大小 128 的困惑度 | 这是限定模型和内核下的质量延迟前沿,不是所有部署都「内存减半」 |
SSD 到底证明了什么
Mamba-2把一类结构化 SSM 与半可分矩阵、结构化掩码注意力联系起来。当状态转移具有标量乘单位阵的结构时,递推可以表示成适合矩阵乘硬件的结构化矩阵运算。
准确结论是:
一类特定结构的 SSM 同时具有递推视角和结构化掩码矩阵视角。
错误泛化是:
任意 SSM 都与标准 Softmax Attention 数学等价。
标准注意力与 SSD 层在参数化、掩码结构、归一化、保留状态和信息路由行为上均不相同。对偶性的价值恰恰在于:它用明确假设揭示了高效算法成立的范围。
Mamba-3 为什么重新回到 SSM 原理
Mamba-3 论文从一个推理问题出发:线性算术复杂度仍可能因为解码受内存带宽限制而无法充分利用硬件。
它的三项核心变化是:
- 指数梯形离散化形成更有表达力的递推,并产生隐式局部卷积效果。
- 复数状态更新类似数据相关旋转,增强论文测试中的状态跟踪能力。
- 多输入多输出(MIMO)状态更新用矩阵乘替代外积式更新,在相近测试解码延迟下增加有效计算。
Mamba-3 于 2026 年 3 月提交。
固定状态意味着压缩,不等于随机访问
固定形状的递推状态是一种容量约束:除非任务所需的充分信息能够被学习到的状态与更新动力学承载,否则压缩会丢失信息。它避免为每个历史 Token 保留显式 KV 条目,但也没有注意力直接访问全部保留 Token 表示的内容寻址路径。
这里需要分开两个问题:
- 状态跟踪:递推能否在很多步内正确更新一个潜变量?
- 检索或精确回忆:模型能否在后续查询时恢复某个早期事实?
两者都不能由渐近复杂度推出。Mamba 系列论文之所以测试选择性复制、归纳、检索与状态跟踪,是因为普通困惑度可能掩盖这些失败。Mamba-3 用复数更新改善了论文测试中的状态跟踪;其检索实验也显示,加入少量注意力层可以继续提升检索质量。
不要根据 (O(L)) 复杂度直接推导「百万 Token 可准确回忆」。应使用目标检查点,在真实长度上加入干扰项、位置扫描、问题改写和业务质量指标进行验证。
Attention 与 SSM 混合是一种工程选项
混合架构可以用递推层处理固定状态序列,再用少量注意力层提供显式 Token 交互。层数比例与插入位置都是模型设计变量,不存在通用配方。
| 负载信号 | 纯注意力可能适合 | 纯 SSM 可能适合 | 值得测试混合架构 |
|---|---|---|---|
| 从任意历史位置精确检索 | 强候选 | 必须提供直接证据 | 强候选 |
| 有界历史状态的流式处理 | 需要管理 KV 策略 | 天然递推路径 | 强候选 |
| 必须使用成熟服务栈 | 生态广泛 | 核验引擎与内核支持 | 核验每类层执行路径 |
| 长 Prompt 主导成本 | 测优化后的 Prefill | 测选择性扫描 | 分开比较 Prefill 与 Decode |
| 状态跟踪具有安全影响 | 必须专项测试 | 必须专项测试 | 必须专项测试 |
混合模型仍会为注意力层保留 KV 状态。只有在明确层比例和实现下,其内存才可能比可比的全注意力架构增长得更慢;它不会自动变成常数内存。
基准必须比较完整模型,而不是架构标签
只有记录足以解释结果的变量,架构比较才可复现。
{
"model": {
"checkpoint": "immutable-model-revision",
"architecture": "attention|ssm|hybrid",
"parameters": 2700000000,
"stateSize": 128,
"attentionLayerCount": 0
},
"runtime": {
"engine": "name-and-version",
"kernelRevision": "immutable-revision",
"dtype": "bf16",
"quantization": "none",
"device": "exact-accelerator",
"deviceCount": 1
},
"workload": {
"promptLengthDistribution": [512, 4096, 16384],
"outputLength": 256,
"batchPolicy": "fixed-or-continuous",
"concurrency": 16
},
"metrics": [
"quality",
"timeToFirstToken",
"interTokenLatency",
"requestThroughput",
"peakAllocatedMemory",
"energyOrCost"
]
}
至少测量:
- 质量:困惑度、目标任务指标、精确回忆、状态跟踪与失败切片。
- Prefill:覆盖真实 Prompt 长度分布的延迟与吞吐。
- Decode:代表性并发下的 Token 间延迟与输出吞吐。
- 内存:权重、递推状态或 KV Cache、激活、工作区和碎片。
- 运维:内核可用性、编译、精度稳定性、取消、批处理、可观测与降级行为。
官方 Mamba 仓库提供 Mamba-1、Mamba-2、Mamba-3 模块和基准入口。当前安装方式明确区分核心包与需显式启用的 CUDA 选择性扫描扩展。只有固定仓库、PyTorch、CUDA、检查点与内核 Revision,结果才具备复现价值。
生产选型清单
评估 SSM 部署时按以下顺序执行:
- 定义信息契约:明确精确回忆、状态跟踪、上下文长度和允许质量损失。
- 拆开执行阶段:分别测量训练、Prefill 与 Decode,再组合端到端结果。
- 固定比较变量:对齐训练 Token、检查点质量、精度、硬件、批处理策略与服务能力。
- 测试长度泛化:覆盖训练长度之外的输入,但不要把「能运行」当作「能准确回忆」。
- 检查数值稳定性:递推动力学可能对精度敏感,应执行长时域与扰动测试。
- 验证引擎链路:目标运行时未支持内核、批处理、监控和故障恢复前,架构还不能算可部署。
- 保留回滚基线:在新检查点通过相同 SLO、质量和安全门禁前,保留已验证的注意力模型或旧版本路由。
常见问题
Mamba 会取代 Transformer 吗?
目前没有证据支持普遍替代。Mamba 建立了强有力的线性时间序列模型家族;注意力仍提供有价值的内容寻址交互与成熟生态。纯架构和混合架构都应在明确负载下竞争。
Mamba 的递推状态等于应用记忆吗?
它是模型状态,不是持久化应用记忆。它在一次前向或生成会话中携带学习到的序列信息,但本身不提供来源引用、跨会话持久化、访问控制或可靠事实检索。
Mamba 能处理一百万 Token 吗?
原始论文报告了音频、基因组数据在最长百万级序列上的改进,以及合成任务超过百万长度的外推。这不能证明任意语言检查点都具备百万 Token 上下文契约或该长度下的准确回忆能力。
能否直接用论文中的 5 倍或 2 至 8 倍做容量规划?
不能。这些是绑定论文对比模型与内核的实验结果。容量规划必须测量实际完整模型、运行时、设备、精度、Prompt/输出分布、批处理策略和质量阈值。