技术博客

RWKV 与 Mamba:无注意力路线的递归推理

第 69 / 147 篇 · 2025-08-12 · ai · 线性注意力状态空间模型长序列

前面算过注意力的账:训练和推理都要为 $O(n^2)$ 或 $O(n)$ 增长的状态付费。一个自然的追问:序列处理能不能像 RNN 那样,只维护一个固定大小的状态 $h_t$,每来一个 token 做一次 $O(1)$ 更新?RWKV 和 Mamba 给出了两个都可行、但机制不同的答案。

RWKV:线性注意力的衰减版

RWKV 的根基是 AFT(Attention Free Transformer)式的重写。标准线性注意力用特征映射 $\phi$ 把 softmax 核换成内积(本系列有专篇),递推式是

$$ S_t = S_{t-1} + \phi(k_t)v_t^\top,\qquad o_t = \frac{\phi(q_t)^\top S_t}{\phi(q_t)^\top z_t}, $$

其中 $z_t$ 是同样的递推累积的分母(归一化项)。问题:这个状态对历史等权累积,早期 token 的残影永不消退,长序列上会失稳。RWKV 的解法是给累积加指数衰减:

$$ S_t = \mathrm{diag}(e^{-w_t})\,S_{t-1} + k_t v_t^\top, $$

$w_t > 0$ 是可学习的逐通道衰减率。这等价于把注意力的打分改成 $q_t^\top k_s \cdot e^{-(w_{t+1}+\cdots+w_t)}$——相对距离越远贡献越小,softmax 的锐度由数据决定,而不是由 $1/\sqrt d$ 的固定缩放决定。RWKV 把这个递推包装成"时间混合"(time-mixing,替代注意力)和"通道混合"(channel-mixing,替代 FFN)两种模块,状态大小固定为 $d \times d$ 量级,推理时无需 KV cache,理论上无限长上下文显存不变。代价也明显:状态是有损压缩,精确检索远处个别 token 的能力显著弱于全量注意力,所以它更像"平滑衰减的记忆",不是"精确寻址的内存"。

Mamba:让 SSM 选择性读写

Mamba(Gu & Dao, 2023)来自连续状态空间模型。连续形式是线性时不变系统 $\dot h(t) = Ah(t) + Bx(t)$,$y(t) = Ch(t)$,离散化(零阶保持)后:

$$ h_t = \bar A h_{t-1} + \bar B x_t,\qquad y_t = C h_t, $$

$\bar A = e^{\Delta A}$,$\bar B = (\Delta A)^{-1}(e^{\Delta A} - I)\cdot\Delta B$。经典 SSM(S4)的问题和 RWKV 相反:$A, B, C$ 固定意味着线性时不变——每个 token 以同样的方式写入状态,无法做到"这个词重要,记住它;这个词是填充,跳过它"。注意力能做到的选择性,线性时不变系统结构上做不到。

Mamba 的突破是把选择性引进来:让 $B, C, \Delta$ 由输入决定($B_t = W_B x_t$ 等),状态更新变成输入自适应的非线性系统。但这破坏了卷积形式——时变系统不能用固定卷积核在频域并行训练。配套的第二招是硬件感知的并行 scan:在 GPU 的 SRAM 里按块做结合律扫描(associative scan,用 $\oplus$ 算子的结合性做树形归并),避免反复读写 HBM。实际吞吐做到了接近 FlashAttention 的 5 倍,且推理状态恒定。

选择性带来的代价是两头不讨好:它不再是卷积,所以长序列上失去精确的远程拷贝能力;它又失去了注意力的精确寻址,所以"大海捞针"类任务弱。Mamba 系列(及之后的线性注意力变体)的真实定位是:中远程依赖平滑建模的密度-速度甜点。

共同的账

两条路线的共同点是训练/推理的对称拆解:训练时用并行形式(chunk-wise scan 或块对角化)把递归摊成矩阵运算,推理时退回逐步递推只持有一个状态。与注意力的对比账:显存 $O(d^2)$ 固定 vs $O(n d)$ 线性;解码每步成本恒定 vs 随上下文增长;代价是单步状态写入不可寻址、历史是有损混合。混合架构(Mamba-2、Jamba 在层间穿插注意力层)正是为了用少量注意力补精确寻址的短板。

固定大小状态递归:显存 O(1),历史是有损混合 RWKV S(t−1) ×衰减 + k(t)·v(t)ᵀ S(t) 逐 token 递推,解码不依赖历史长度 输出 o(t)=q(t)ᵀS(t)/归一化 Mamba h(t) = Āₜ·h(t−1) + B̄ₜ·x(t),y(t) = Cₜ·h(t) Ā、B̄、C 由输入决定(选择性):可跳过填充、锁定关键 token 代价:失去卷积形式 → 用 SRAM 内结合律 scan 恢复训练并行

小结

RWKV 和 Mamba 都把序列压进固定状态:前者是线性注意力的指数衰减化,状态是带遗忘的键值累积;后者是输入自适应的离散 SSM,用选择性补线性时不变系统的短板,再用硬件感知 scan 把训练并行救回来。两者的推理显存都是 $O(1)$,这是对 KV cache 的根本性替代;共同的软肋是状态写入不可寻址,精确检索长程个别信息的能力靠混合架构里的稀疏注意力层补。下一条路线更激进:连递归状态也不要,直接问"卷积能不能替代注意力"。