状态空间模型
一种替代注意力的方案:开销线性、内存恒定。它在哪里赢、在哪里输,以及为什么混合架构正在胜出。
注意力(attention)的开销是平方级的,还得存一份不断增长的 cache。这两个麻烦出自同一个设计决定:每个 token 都能直接看到其他所有 token。
状态空间模型(state space model)走的是相反的路子。它维护一个固定大小的隐藏状态,随着 token 一个个流过不断更新。每个 token 的开销恒定,内存恒定,总开销随序列长度线性增长。
核心区别
SSM 用循环的方式处理序列:读一个 token,更新状态,继续下一个。这个状态是它见过的一切的一份压缩摘要。
这听起来像 transformer 取代掉的那种循环网络,确实很像。有两点变化让它成立了。
状态更新的形式被设计成可以在训练时并行计算。 朴素的循环做不到——第 t 步依赖第 t−1 步,训练只能串行,很慢。SSM 把更新限制成一种特定的形式,可以用一次 scan 操作同时算出所有位置。训练并行,推理仍然循环。
更新变成了依赖输入的。 早期的 SSM 不管内容是什么都用一套固定的更新规则,这严重限制了它。Mamba 的贡献是让状态转移取决于当前 token——模型根据自己正在读的内容,学会什么该留、什么该丢。正是这种选择性,补上了它与注意力之间的大部分质量差距。
取舍
注意力把所有东西都留着,然后去搜。SSM 留一份摘要,不断更新它。
SSM 赢在哪: 生成过程中内存恒定,与序列长度无关,所以没有 KV cache,也没有每个请求不断增长的内存占用。总开销线性。超长序列变得可行——音频、DNA、高分辨率信号,这些地方的 token 数能到百万级。
输在哪: 状态是有限的,信息必须被丢掉。要从很远的地方精确回忆起某个细节,确实更难。注意力能精确取回第 50 万位上的第 3 个 token,正是因为从头到尾没压缩过它。
这不是个可以轻描淡写的保留项。需要从长上下文里做精确检索的任务——在一份文档里找某个具体事实、原样复制一个字符串——正是纯 SSM 表现不佳的地方,而这类任务在实践中很常见。
混合架构
整个领域最终收敛到的结果:把两者结合起来。 大部分层用 SSM 换效率,中间穿插几层注意力负责精确召回。
直觉是,大部分处理并不需要精确的远距离查找,而那少数真正需要的层可以承担这件事。混合模型报告的质量达到注意力水平,成本增长却好得多,现在已有若干生产模型采用这种形态。
这和长上下文注意力那边发生的事情如出一辙:最后胜出的模式也是混合——大部分是便宜的窗口层,少数是完整的注意力层。机制不同,结论相同:只为真正需要的地方付全局视野的钱。
SSM 最重要的用武之地
超长序列。 基因组学、音频、传感器数据流、视频。这些地方的 token 数让平方级的注意力根本不可能。
内存受限的服务化。 没有 KV cache,意味着每单位内存能支撑的并发请求多得多——这可能是个很大的运营优势。
边缘与端上。 内存固定且很小时,恒定内存是个很强的性质。
流式处理。 循环式的形式天然是增量的,没有缓存要管理。
对你意味着什么
对大多数应用开发来说,暂时什么都不意味着。如果你调的是托管 API,架构不归你操心,而主流模型仍然是基于注意力的或混合的。
但如果你在内存压力下自托管、要处理极长的序列,或者在受限硬件上部署,它就有关系了。它也值得一懂,因为它是「一个真实的架构取舍」最清楚的例证:把所有东西都记住然后搜,还是做摘要然后更新。 注意力选了前者,SSM 选了后者,而混合架构承认:并非每一层都适合同一个答案。
要点回顾
- SSM 维护一个固定大小的状态,每个 token 更新一次:内存恒定、总开销线性、没有 KV cache。
- 让它变得可行的两项进展:可并行化的训练形式,以及依赖输入的状态更新(Mamba 的选择性)。
- 代价是压缩——对远处细节的精确回忆确实比注意力弱。
- 混合的 SSM 加注意力模型是领域的落点:只在少数几层里为精确召回付费。
- 最相关的场景:超长序列、内存受限的服务化,以及端上部署。
下一篇: 投机解码