【LLM】从零开始学大语言模型 | SSM篇 | 6 | SSM 优化(下):Cauchy 核、FFT 加速与工程优化
SSM 优化(下):Cauchy 核、FFT 加速与工程优化 上一篇介绍了 S4 通过 DPLR 结构、双线性变换和 Z 变换将卷积核计算的复杂度从 $O(LN^2)$ 降到 $O(LN)$。但 $O(LN)$ 在超长序列($L = 16384$)和大状态维度($N = 256$)下仍然有约 $4 \times 10^6$ 的运算量。本文将介绍 S4 如何利用 Cauchy 矩阵的特殊结构和 FFT 进一步加速,以及训练时的反向传播策略和显存优化。最后讨论 S4 的根本局限性,以及它如何引向 Mamba 的诞生。 读者在阅读本篇时,可能会对一个结构细节有疑问:S4 中的状态到底是一个总的 $N$ 维向量,还是别的什么东西?这一点在跟 Transformer 对比时特别容易混淆,所以本文先把它澄清掉,避免后续关于“选择性机制”和 Mamba 的讨论建立在错误的前提上。 一、Cauchy 矩阵与快速求值 1. 一个先决问题:S4 真的只有一个 $N$ 维状态吗? 在很多地方,S4 被简略地说成是“一个 $N$ 维状态空间”。这其实是对整个模型结构的过度简化,容易让人误以为 S4 和 Transformer 的内部机制很像。 更准确的说法是: S4 层通常作用于 $d$ 个特征维度(例如 $d = 768$ 或更大)。 对每一个特征维度 $j$,都会独立地维护一个 $N$ 维状态空间。换句话说,每个特征维度有自己的 $\mathbf{A}_j$、$\mathbf{B}_j$、$\mathbf{C}_j$ 体系(实际参数化后可能会共享结构,但变量是独立可学的)。 所以总的状态规模大约是 $d \times N$,但在每一个特征维度内部,状态维度 $N$ 仍然很小,典型值大概是 $16 \sim 128$。 这意味着什么? ...