0%

长上下文技术:线性注意力与状态空间模型

长上下文是过去两年模型结构演进最集中的方向。标准注意力在序列长度上带有平方复杂度,序列翻倍、计算量变四倍,同时还需要一份随长度线性增长的 KV 缓存。围绕这个瓶颈出现了两条完全不同的技术路线:一条想办法把注意力本身线性化,用固定大小的状态替代全量键值;另一条把序列建模重新表述成状态空间递推,用可并行的扫描算法保住训练效率。本文将先给出能同时容纳这两条路线的统一框架,再分别推导线性注意力的核方法与状态空间模型的离散化,接着讨论 Mamba 的选择性机制与状态空间对偶,最后把长上下文的工程手段(位置外推、注意力汇、KV 压缩、序列并行)与选型判据一并收口。

前言

处理长序列的困难可以从三个层面看。计算层面,标准注意力的时间与空间复杂度分别是 O(n2d)\mathcal{O}(n^2 d) 与 O(n2)\mathcal{O}(n^2),打分矩阵本身就要占显存;推理层面,KV 缓存把每一步的历史键值都存下来,显存占用随长度线性增长;泛化层面,模型在训练长度上学到的位置表示能否外推到更长的序列,是一个独立于前两者的问题。

这三类困难对应三组不同的技术手段,本文会把它们分开讨论,避免把结构改进与工程技巧混在一起。结构改进包括线性注意力与状态空间模型,它们的共同目标是把"随长度增长的状态"换成"固定容量的状态";工程手段包括位置外推、KV 压缩、注意力汇与序列并行,它们不改变注意力算子本身,只改变它在长序列下的可用性。

一份完整的方案通常是两者的组合:用位置外推把窗口撑开,用 KV 压缩降低单位长度的缓存成本,用并行与分块把算力摊到多卡上。理解每条路线解决了哪一层的问题,比记住某个模型的名字更有用。

下面的总览图给出了本文要讨论的全部内容:

图1:长上下文技术总览(状态容量与代价的交换、两条结构路线与四类工程手段)

图1 可以按三层来读。最上层是统一框架,状态容量从左到右依次是向量状态、矩阵状态与全量 KV 缓存,容量与代价同步上升,两条结构路线就是在这一条谱上选择自己的位置。中间左侧是结构路线,线性注意力通过核函数重排计算顺序,状态空间模型则从 S4 的固定参数走到选择性状态更新,再到把两者统一起来的状态空间对偶。中间右侧是四类工程手段,它们不改变算子本身,只处理位置外推、缓存规模与并行度。最下层是选型结论,需要精确检索的场景保留注意力层,以长程聚合为主的场景交由线性层承担,混合两种层是当前的常见做法。

统一框架:状态容量与计算代价的交换

我们需要知道,序列建模的算子都可以写成"读状态、更新状态"的形式。设第 tt 步的输入为 xtx_t,算子维护一个状态 sts_t,输出为 yty_t,那么它的通用形式是

st=g(st−1,xt),yt=f(st,xt)s_t = g\left(s_{t-1}, x_t\right), \qquad y_t = f\left(s_t, x_t\right)

标准注意力与线性化方法在这个框架下的差别,只在于状态的容量。把 KV 缓存代入,注意力的状态就是历史全部的键与值:

stattn={(k1,v1),…,(kt,vt)}s_t^{\text{attn}} = \left\{\left(k_1, v_1\right), \ldots, \left(k_t, v_t\right)\right\}

这个状态的大小随序列长度线性增长,换来的是无损检索:任何历史位置都能被精确地按相似度取用。线性注意力与状态空间模型则把状态压缩成固定大小的矩阵或向量:

stlinear∈Rd×d,stssm∈Rd×Ns_t^{\text{linear}} \in \mathbb{R}^{d \times d}, \qquad s_t^{\text{ssm}} \in \mathbb{R}^{d \times N}

其中 dd 是模型维度、NN 是状态维度,两者的取值都与序列长度无关。于是每一步的代价变成了常数,但状态只能承载被压缩过的历史信息,无法精确还原任意位置的内容。这条取舍线是理解全部长上下文结构的起点。

统一视角:状态容量决定能力边界
注意力用无限状态换平方代价,线性化方法用固定状态换线性代价。前者在需要精确回忆某个具体 token 的任务上占优,后者在需要长程聚合与流式推理的场景上占优。这条边界不是工程细节,而是由状态的信息容量决定的,因此纯线性化的模型在检索型任务上通常需要通过混合结构来补足。

前置知识:注意力的代价来自哪里

回顾标准注意力的形式,查询与键的打分经过 Softmax 归一化后对值加权求和:

Attention(Q,K,V)=Softmax(QK⊤dk)V\text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right) V

它的计算顺序无法重排,原因就在 Softmax 这一项。如果去掉归一化,只留相似度与值的乘积,则可以改变结合次序:

(QK⊤)V=Q(K⊤V)\left(Q K^\top\right) V = Q \left(K^\top V\right)

等式左边先算 n×nn \times n 的打分矩阵,复杂度是 O(n2d)\mathcal{O}(n^2 d);右边先算 K⊤VK^\top V,得到的矩阵形状是 d×dd \times d,与序列长度无关,整体复杂度降为 O(nd2)\mathcal{O}(n d^2)。这一步重排就是线性注意力的全部秘密,而 Softmax 的存在恰恰阻止了它,因为 Softmax 是逐行的非线性归一化,不能提到乘法之外。

同时要注意 K⊤VK^\top V 的另一种读法:它是对历史键值与值的外积累加,也就是一个可以被增量维护的状态。这正是前面统一框架里的 stlinears_t^{\text{linear}}。由此得到一个直接的结论:线性注意力的关键是去掉逐行非线性并保持一个可累加的状态,而不是简单地把 Softmax 换成一个近似的线性函数。

KV 缓存在推理侧的开销同样值得单独写出。设层数为 LL、头数为 hh、每头维度为 dhd_h,序列长度为 nn,缓存张量的元素数量为

SizeKV=2⋅L⋅h⋅n⋅dh\text{Size}_{\text{KV}} = 2 \cdot L \cdot h \cdot n \cdot d_h

其中系数 2 来自键与值两份张量。这个量随长度线性增长,长上下文推理的显存压力主要来自它,这也是多头共享与低秩压缩这一类改动存在的原因。

线性注意力:把 Softmax 换成核函数

从 Softmax 到一般核形式

把注意力写得更一般一些。第 ii 个位置的输出可以写成对所有位置的加权平均:

yi=∑j=1nsim(qi,kj)vj∑j=1nsim(qi,kj)y_i = \frac{\sum_{j=1}^{n} \text{sim}\left(q_i, k_j\right) v_j}{\sum_{j=1}^{n} \text{sim}\left(q_i, k_j\right)}

在标准注意力里,相似度函数取指数形式 sim(q,k)=exp⁡(q⊤k/dk)\text{sim}(q, k) = \exp\left(q^\top k / \sqrt{d_k}\right)。线性注意力的做法是把这个相似度换成两个特征映射的内积:

sim(q,k)=ϕ(q)⊤ϕ(k)\text{sim}\left(q, k\right) = \phi\left(q\right)^\top \phi\left(k\right)

其中 ϕ(⋅)\phi(\cdot) 是一个逐位置的非线性映射,例如 ϕ(x)=elu(x)+1\phi(x) = \text{elu}(x) + 1 或高斯的随机特征展开。代入之后,分子可以重排成矩阵乘法:

∑j=1nϕ(qi)⊤ϕ(kj)vj=ϕ(qi)⊤∑j=1nϕ(kj)vj⊤\sum_{j=1}^{n} \phi\left(q_i\right)^\top \phi\left(k_j\right) v_j = \phi\left(q_i\right)^\top \sum_{j=1}^{n} \phi\left(k_j\right) v_j^\top

这里右侧的求和与 ii 无关,因此可以预先算好。把它写成矩阵形式就得到线性注意力:

LinearAttention(Q,K,V)=ϕ(Q)(ϕ(K)⊤V)ϕ(Q)(ϕ(K)⊤1)\text{LinearAttention}(Q, K, V) = \frac{\phi\left(Q\right) \left(\phi\left(K\right)^\top V\right)}{\phi\left(Q\right) \left(\phi\left(K\right)^\top \mathbf{1}\right)}

分母是对行和的归一化,保证权重之和为 1。令状态矩阵 S=ϕ(K)⊤V∈Rd×dS = \phi(K)^\top V \in \mathbb{R}^{d \times d},则推理时的递推形式为

St=St−1+ϕ(kt)vt⊤,yt=ϕ(qt)⊤Stϕ(qt)⊤∑j≤tϕ(kj)S_t = S_{t-1} + \phi\left(k_t\right) v_t^\top, \qquad y_t = \frac{\phi\left(q_t\right)^\top S_t}{\phi\left(q_t\right)^\top \sum_{j \le t} \phi\left(k_j\right)}

每一步只做一次外积累加与一次矩阵向量乘法,单步复杂度 O(d2)\mathcal{O}(d^2) 且与历史长度无关,显存占用是固定的。这就是线性注意力在推理侧的核心优势:把随长度增长的缓存换成了一个常数大小的状态。

特征映射的选择与近似误差

ϕ\phi 的选择决定了近似质量。一类做法用正随机特征展开来逼近指数核:

exp⁡(q⊤k)=Eω∼N(0,I)[exp⁡(ω⊤q)⋅exp⁡(ω⊤k)]≈1m∑i=1mexp⁡(ωi⊤q−∥q∥22)exp⁡(ωi⊤k−∥k∥22)\exp\left(q^\top k\right) = \mathbb{E}_{\omega \sim \mathcal{N}(0, I)} \left[\exp\left(\omega^\top q\right) \cdot \exp\left(\omega^\top k\right)\right] \approx \frac{1}{m} \sum_{i=1}^{m} \exp\left(\omega_i^\top q - \frac{\|q\|^2}{2}\right) \exp\left(\omega_i^\top k - \frac{\|k\|^2}{2}\right)

其中 mm 是随机特征的数量。用有限个采样去逼近指数核,方差随 mm 减小,效果与代价之间的权衡由 mm 控制。另一类做法不做逼近,直接选用简单的非线性函数(如 ELU 加一),承认相似度定义被替换,换取实现上的简洁与稳定,效果损失由后续的衰减项与门控机制补足。

位置信息在线性化后的处理

去掉 Softmax 之后,注意力在形式上也失去了绝对位置的痕迹,位置信息必须显式注入。可行的路径有三条:把位置编码加在查询与键上(要求该编码与核特征映射兼容)、引入按相对距离衰减的权重、以及在状态更新时对历史做指数衰减。三种做法都对应"状态在时间上被加权遗忘"的机制,这也是线性注意力与状态空间模型在形式上逐渐靠近的原因。

从核方法到门控递推

沿着这条线出现了一批在状态更新方式上做文章的结构。Performer 用随机特征把指数核线性化,解决的是"如何近似 Softmax";Linformer 从另一个角度出发,用低秩投影压缩键与值的长度维度:

K′=EK,V′=FV,E,F∈Rn′×n, n′≪nK' = E K, \qquad V' = F V, \qquad E, F \in \mathbb{R}^{n' \times n},\ n' \ll n

Reformer 则用局部敏感哈希把相似的查询与键分到同一个桶里,只在桶内做注意力,把参与计算的配对数从 n2n^2 降到与桶数量相关的量级。这几类方法的共同点是把配对数量压下来,状态本身仍然是长度的函数。

真正的形态转变发生在引入衰减与门控之后。RetNet 在状态更新时对历史施加按位置的指数衰减:

St=γSt−1+ktvt⊤,0<γ<1S_t = \gamma S_{t-1} + k_t v_t^\top, \qquad 0 < \gamma < 1

其中 γ\gamma 是衰减因子。这个改动让状态具有了"近期优先"的归纳偏置,同时保留了递推与分块并行两种计算形式。DeltaNet 走得更远,把状态更新写成带误差修正的形式,类似在线学习里的增量规则:

St=St−1+βt(vt−St−1ϕ(kt))ϕ(kt)⊤S_t = S_{t-1} + \beta_t \left(v_t - S_{t-1} \phi\left(k_t\right)\right) \phi\left(k_t\right)^\top

括号内的项是新值与该键查询当前状态的预测之差,模型只写入"预测之外的新信息",这让有限容量的状态可以更高效地利用。这类设计把线性注意力从一个近似注意力的技巧,变成了有明确记忆机制的递推模型。

四种线性化路线在状态形态与位置处理上并不相同,可以对照下表:

线性化路线的形态差异
路线 压缩对象 状态形态 位置处理
核方法相似度函数外积累加矩阵需显式注入
低秩投影键与值的长度随长度变化的压缩缓存保留原编码
衰减递推历史权重衰减累加矩阵内生于衰减因子
门控与误差修正写入的信息量带门控的状态矩阵内生于更新规则

线性注意力的能力代价

固定状态带来一个无法回避的能力上限。状态矩阵只有 d×dd \times d 个元素,能同时承载的历史信息量有限,当任务要求精确回忆很久以前的某个具体内容时,压缩状态会丢弃细节。这正是这类模型在检索型任务(例如从长文档中定位某个精确片段)上通常弱于标准注意力的原因,也是后续引入选择性机制与混合结构的动机。

压缩状态的双面性
固定状态把推理成本降到常数,代价是状态里只能留存被聚合过的信息。判断某个线性化方案是否够用,可以问它的状态容量是多少($d \times d$ 还是 $d \times N$)、更新规则是否输入相关(固定衰减还是按内容选择写入)、以及能否与少量精确注意力混合。这三个问题比"是否线性"更能区分方案的实际能力。
## 状态空间模型:从连续系统到离散递推

连续时间系统

状态空间模型最初来自控制论,它用一组线性微分方程描述系统在时间上的演化:

x′(t)=Ax(t)+Bu(t),y(t)=Cx(t)+Du(t)x'(t) = A x(t) + B u(t), \qquad y(t) = C x(t) + D u(t)

其中 u(t)u(t) 是输入信号,x(t)∈RNx(t) \in \mathbb{R}^N 是状态向量,y(t)y(t) 是输出,A∈RN×NA \in \mathbb{R}^{N \times N} 描述状态之间的耦合方式,BB 与 CC 分别是输入映射与输出映射,DD 是直通项,通常在最简形式里省略。这套方程的直观含义是:系统的记忆完全存放在 x(t)x(t) 里,输入通过 BB 影响状态,状态通过 CC 影响输出。

把它当作序列模型的第一个好处是状态维度 NN 与序列长度无关,第二个好处是线性结构带来了可解析的处理手段。代价也随之而来:AA 的取值决定了历史的衰减方式,随机初始化会让系统很快遗忘输入,无法维持长程记忆。

离散化

序列是离散的,因此需要把连续系统转成按 token 步进的递推。最常用的是零阶保持,也就是假设每个时间步内输入保持不变,对系统矩阵积分一个步长 Δ\Delta:

Aˉ=exp⁡(ΔA),Bˉ=(∫0ΔeτAdτ)B=A−1(exp⁡(ΔA)−I)B\bar{A} = \exp\left(\Delta A\right), \qquad \bar{B} = \left(\int_{0}^{\Delta} e^{\tau A} d\tau\right) B = A^{-1}\left(\exp\left(\Delta A\right) - I\right) B

得到离散参数后,模型按如下递推更新状态并产生输出:

ht=Aˉht−1+Bˉxt,yt=Chth_t = \bar{A} h_{t-1} + \bar{B} x_t, \qquad y_t = C h_t

其中 ht∈RNh_t \in \mathbb{R}^N 是第 tt 步的状态。步长 Δ\Delta 在这里是一个有物理含义的量:它决定了系统在当前输入上"前进多少",取值大则更依赖当前输入、更快遗忘历史,取值小则状态变化缓慢、历史保留更久。这一点在后面讨论选择性机制时会被重新利用。

实际实现中常把 Bˉ\bar{B} 近似为 ΔB\Delta B,这在 AA 经过特殊初始化(例如对角化后的负实部结构)时成立,并且省掉一次矩阵求逆,是工程上的常见简化。

卷积形式的等价性

递推形式适合逐步推理,但训练时无法并行,这是循环结构的固有代价。状态空间模型的巧妙之处在于,把递推展开之后可以得到一个卷积形式。设初始状态为零,逐步展开得到

yt=CAˉtBˉx0+CAˉt−1Bˉx1+⋯+CBˉxty_t = C \bar{A}^t \bar{B} x_0 + C \bar{A}^{t-1} \bar{B} x_1 + \cdots + C \bar{B} x_t

把它写成卷积,输出等于输入与一个由模型参数决定的核的卷积:

y=x∗Kˉ,Kˉ=(CBˉ, CAˉBˉ, CAˉ2Bˉ, …)y = x * \bar{K}, \qquad \bar{K} = \left(C \bar{B},\ C \bar{A} \bar{B},\ C \bar{A}^2 \bar{B},\ \ldots\right)

这个核的长度与序列长度相同,但它是由参数解析给出的,不需要从数据里学习,因此可以用快速傅里叶变换在 O(nlog⁡n)\mathcal{O}(n \log n) 内完成整条序列的计算。于是状态空间模型同时具备两种计算形态:训练时用卷积形式在长度方向并行,推理时用递推形式保持常数级状态。这个双形式结构是它相对循环网络的本质优势,也是后续所有改进的基础。

长记忆的初始化问题

Aˉ\bar{A} 的谱决定了记忆长度。如果 AA 的特征值实部过负,Aˉt\bar{A}^t 会迅速趋零,历史信息在几步之后就被抹平;如果过于接近零,状态又会饱和并丢失区分度。随机初始化很难落在合适的范围里,这是早期状态空间模型表现不佳的主要原因。

HiPPO 给出的解法是把"记住历史"变成一个函数逼近问题:把历史信号 u(τ)u(\tau) 投影到一组正交多项式基上,状态 h(t)h(t) 就是这些投影系数:

hn(t)=∫0tu(τ)pn(τ)w(τ)dτh_n(t) = \int_{0}^{t} u\left(\tau\right) p_n\left(\tau\right) w\left(\tau\right) d\tau

其中 pnp_n 是第 nn 个正交多项式,ww 是权重函数。这样定义的状态是对历史的最优多项式压缩,能保留的重要信息最多。由多项式的递推关系可以反推出对应的 AA 与 BB,于是初始化不再靠试,而是由逼近论给出。这一构造让状态空间模型第一次在长程依赖任务上具备了竞争力,S4 正是在此基础上解决计算效率问题。

S4 的结构化参数化

即使有了好的初始化,朴素实现仍然受制于计算量:卷积核需要 nn 项,每项都涉及 N×NN \times N 矩阵的幂,状态维度一大就无法承受。

S4 的做法是把 AA 限制在一个既保留表达能力又便于计算的矩阵族里,也就是对角加低秩的结构:

A=Λ−PQ⊤A = \Lambda - P Q^\top

其中 Λ\Lambda 是对角矩阵,P,Q∈RN×rP, Q \in \mathbb{R}^{N \times r} 是低秩因子,r≪Nr \ll N。这种结构下的核序列 CAˉkBˉC \bar{A}^k \bar{B} 可以通过一个与柯西矩阵相关的形式解析求出,在频域上做一次求值就能得到全部频率分量,整体复杂度降到 O(Nlog⁡N)\mathcal{O}(N \log N),与序列长度无关。这一步把状态空间模型从理论可行推进到了工程可用:模型可以在长度方向并行训练,又能在推理时以常数状态运行。

Mamba:选择性机制

时不变假设的限制

前面所有推导都依赖一个前提:AA、BB、CC、Δ\Delta 与输入无关,也就是线性时不变。这个假设带来了卷积形式的便利,却限制了一类重要的能力:模型无法根据当前内容决定记住什么、忽略什么。

自然语言里的例子很直接:遇到一个分隔符或从句结束时,理想的行为是把前面已经处理完的片段从状态里清掉,为后面的内容腾出容量;而时不变系统的衰减速率是固定的,无论当前看到什么内容,状态都按同一节奏衰减。这正是纯状态空间模型在需要内容选择性记忆的任务上弱于注意力的原因。

选择性参数化

Mamba 的改动是把参数换成输入的函数:

Δt=softplus(WΔxt),Bt=WBxt,Ct=WCxt\Delta_t = \text{softplus}\left(W_\Delta x_t\right), \qquad B_t = W_B x_t, \qquad C_t = W_C x_t

其中 WΔ,WB,WCW_\Delta, W_B, W_C 是可学习的投影。AA 保持与输入无关(这是稳定性与效率的要求),其余三项随时步变化。离散化随之变成时变形式:

Aˉt=exp⁡(ΔtA),Bˉt=ΔtBt\bar{A}_t = \exp\left(\Delta_t A\right), \qquad \bar{B}_t = \Delta_t B_t

递推更新为

ht=Aˉtht−1+Bˉtxt,yt=Cthth_t = \bar{A}_t h_{t-1} + \bar{B}_t x_t, \qquad y_t = C_t h_t

这里需要注意 Δt\Delta_t 的双重作用。它既是离散化的步长,也是状态更新强度的门控:取值大时 Aˉt\bar{A}_t 接近零,状态主要写入当前输入,相当于丢掉历史重新开始;取值小时 Aˉt\bar{A}_t 接近单位阵,状态基本保留,相当于忽略当前输入。因此 Δt\Delta_t 的可学习投影让模型获得了按内容决定记忆时长的能力,这正好补上了时不变假设缺失的那一环。

选择性扫描

改成时变之后,卷积形式失效了,因为核不再是固定的序列。若退回逐步递推,训练又无法并行。Mamba 的解决方法是利用递推的代数结构做并行扫描。

把递推写成仿射变换,其中 at=Aˉta_t = \bar{A}_t、bt=Bˉtxtb_t = \bar{B}_t x_t:

ht=atht−1+bth_t = a_t h_{t-1} + b_t

两个相邻的变换可以合并成一个新的仿射变换:

(a2,b2)∘(a1,b1)=(a2a1, a2b1+b2)\left(a_2, b_2\right) \circ \left(a_1, b_1\right) = \left(a_2 a_1,\ a_2 b_1 + b_2\right)

这个合并运算是结合的,因此可以用树形归约的方式并行计算全部前缀状态,也就是并行扫描算法:总工作量与序列长度成正比,而计算深度与长度的对数成正比。对长度为 nn 的序列,扫描可以在 O(n)\mathcal{O}(n) 的总工作量内并行完成,训练效率不再受递推的顺序依赖拖累。

工程实现上还有两处关键设计。第一是把离散化、扫描与输出计算融合进同一个内核,避免中间状态在显存与计算单元之间反复搬运。第二是反向传播时不保存全部的中间状态,而是在需要时重新计算,用少量重复计算换取显存占用的大幅下降。这两点合起来构成了 Mamba 在长序列上可用性的基础。

与注意力在结构上的对照

把标准注意力与选择性状态空间放在同一张表里,两者的差异集中在状态与检索方式上:

注意力与选择性状态空间的对照
维度 标准注意力 选择性状态空间
状态内容全部历史键值固定维度矩阵,按内容选择性写入
训练复杂度与长度平方成正比与长度线性相关,扫描并行
推理状态随长度增长的缓存常数状态,每步固定开销
信息取舍相似度决定权重,无容量上限容量有限,依赖写入策略

状态空间对偶:把两条路线统一起来

矩阵形式的重写

前面把状态空间模型写成递推与卷积两种形式,实际上它还有第三种形式,这种形式直接与注意力对应。

把整个序列的输出一次性写出来。对长度为 nn 的序列,令 LL 为下三角矩阵,其元素是衰减系数的累积乘积:

Lij=∏k=j+1iak(i≥j),Lij=0(i<j)L_{ij} = \prod_{k=j+1}^{i} a_k \quad \left(i \ge j\right), \qquad L_{ij} = 0 \quad \left(i < j\right)

再定义由输入相关的投影构成的矩阵 C∈Rn×NC \in \mathbb{R}^{n \times N} 与 B∈Rn×NB \in \mathbb{R}^{n \times N},则整条序列的输出可以写成

Y=((CB⊤)∘L)XY = \left(\left(C B^\top\right) \circ L\right) X

其中 ∘\circ 表示逐元素相乘。这个式子的结构与注意力非常接近:CB⊤C B^\top 部分相当于查询与键的内积打分,LL 相当于因果掩码,XX 相当于被加权的值。差别只有两点:少了 Softmax 归一化,掩码不再是 0 与 1 而是衰减系数。

如果把状态维度写成 NN、把 CC 与 BB 视为查询与键,那么状态空间模型就等于一个带衰减掩码的线性注意力:

Y=(L∘QK⊤)VY = \left(L \circ Q K^\top\right) V

这就是状态空间对偶的核心结论:两条路线在数学上是同一个算子的不同参数化。注意力的打分矩阵是它的特例,区别在于注意力允许打分矩阵的秩随序列增长,而状态空间模型通过 NN 维状态把它限制在半可分结构内。

半可分矩阵

上面的结论可以用矩阵性质表述得更精确。一个下三角矩阵如果所有落在对角线以下的子矩阵的秩都不超过 NN,就称为 NN-半可分矩阵。状态空间模型的转移矩阵 (CB⊤)∘L(C B^\top) \circ L 正是这样的矩阵:状态维度 NN 决定了任一子块的秩上界。

这个刻画解释了两件事。第一,它说明了状态空间模型的能力边界:NN 越大,可表达的秩越高,能承载的历史结构越复杂,代价是计算与显存随 NN 增长。第二,它给出了高效算法的入口:半可分矩阵可以做分块分解,把整体计算拆成两类操作处理。

M=Mdiag+Mlow-rankM = M_{\text{diag}} + M_{\text{low-rank}}

对角块内部用二次形式计算(与注意力的做法一致),块与块之间通过状态传递连接,低秩部分只需传输 NN 维状态。这种分块策略把长序列切成若干块,块内并行、块间递推,兼顾了并行度与常数级状态。

分块算法与工程收益

按上述分解,分块计算分成三步:先把每个块内的输出用块内的二次形式算出,再把各块的状态按顺序合并(这一步是块间的前缀扫描),最后用合并后的状态修正块内输出。第二步之所以可行,仍然依赖前面那条仿射合并律。

这套算法带来的工程收益有几处。状态维度可以放大而不必显式物化 n×nn \times n 的打分矩阵,因此表达能力上限提高;块内计算是标准的矩阵乘法,张量并行与硬件利用率都更好;实现上只需要两个内核,一个处理块内、一个处理块间,代码复杂度低于普通状态空间模型的卷积核实现。Mamba-2 相对前代的主要变化就来自这里,它把结构改进的重点从"如何扫描"转向了"如何分块"。

统一之后的意义
既然状态空间模型是带衰减掩码的线性注意力,那么两者之间的选择就不再是理论之争,而变成三个可调的旋钮:状态维度 $N$ 决定容量,衰减结构 $L$ 决定记忆长度分布,是否保留少量精确注意力决定检索能力。理解了这三点,混合架构(大部分层用线性化结构、少数层用标准注意力)就是自然的工程结论,而不是权宜之计。
## 隐式卷积与其它线性化路线

隐式长卷积

线性注意力与状态空间模型都在压缩状态,还有一类方法从另一个角度切入:既然卷积在长度方向可以并行、可以用快速傅里叶变换加速,那就把注意力的全局交互能力交给一个足够长的卷积核,把核直接从位置生成出来。

隐式长卷积形式的做法是用一个小的网络从位置索引生成卷积核的取值:

hi=MLP(i),yt=∑i=0tht−i⊙xih_i = \text{MLP}\left(i\right), \qquad y_t = \sum_{i=0}^{t} h_{t-i} \odot x_i

其中 hih_i 是由位置索引生成的长卷积核。核不再是固定参数表,而是被参数化成一个连续函数,因此可以在任意长度上取值,不会像固定长度的卷积核那样受训练长度限制。像 Hyena 这样的结构把这种长卷积与短卷积、门控交替堆叠,用几次全局卷积替代注意力,计算复杂度控制在 O(nlog⁡n)\mathcal{O}(n \log n)。

与状态空间模型的差别在于核的来源。状态空间模型的核是由 A,B,CA, B, C 解析给出的指数衰减组合,结构受限但参数极少;隐式卷积的核由一个网络生成,表达能力更强,但需要更多参数并且没有递推形式,推理时无法退化成常数状态。

通道衰减与加权键值

另一条路线保留了注意力的加权求和形式,但把归一化与位置处理都换成可递推的形式。以时间混合模块为例,它维护一个与通道数同维的状态,并让每个通道有独立的衰减率:

wkvt=∑i<texp⁡(−(t−1−i)w+ki)vi+exp⁡(u+kt)vt∑i<texp⁡(−(t−1−i)w+ki)+exp⁡(u+kt)\text{wkv}_t = \frac{\sum_{i < t} \exp\left(-\left(t-1-i\right) w + k_i\right) v_i + \exp\left(u + k_t\right) v_t}{\sum_{i < t} \exp\left(-\left(t-1-i\right) w + k_i\right) + \exp\left(u + k_t\right)}

其中 ww 是逐通道的衰减向量,uu 是当前 token 的额外权重。这个式子的巧妙之处在于分子与分母都可以增量维护:每步只需乘上衰减因子再累加当前项,因此推理时状态大小是 dd 维向量,而不是 d×dd \times d 的矩阵或长度方向的缓存。

它的取舍也很清楚:状态更小、每步计算更便宜,但由于每个通道只有一个标量状态,容量比矩阵状态更低。作为对照,这正好说明状态容量的三级区分:向量状态、矩阵状态、全量键值缓存,三者的能力与代价依次递增。

结构化矩阵混合

还有一类做法干脆放弃"与注意力对应"的思路,用结构化矩阵乘法直接承担混合操作。取块对角矩阵与置换矩阵交替相乘:

M=P1B1P2B2,Bi=diag(Bi1,…,Bik)M = P_1 B_1 P_2 B_2, \qquad B_i = \text{diag}\left(B_{i1}, \ldots, B_{ik}\right)

块对角矩阵的计算量随块数量线性下降,置换矩阵不消耗计算,两者交替相乘可以在较低复杂度下实现接近稠密的混合效果。这类结构把长序列的混合操作从"注意力或卷积"扩展成了"任意结构化矩阵",代价是理论刻画更复杂、与预训练权重的兼容性更差。

三条路线的形态差别可以对照下表:

三条线性化路线的形态差异
路线 核的来源 推理形态 主要代价
状态空间模型参数解析给出常数状态递推状态容量有限
隐式长卷积网络从位置生成需保留序列才能卷积无常数状态,参数量更大
通道衰减递推衰减因子与当前输入向量状态递推容量低于矩阵状态
结构化矩阵不涉及核,直接做矩阵混合按矩阵结构分块计算理论刻画与迁移成本高

长上下文的位置工程

结构层面的线性化解决的是计算与显存,另一类问题与结构无关:模型在训练长度上学会的位置表示,能否继续在更长的序列上工作。这一节讨论四类工程手段,它们都不改变注意力或状态空间算子的形式。

位置外推为什么会失效

以旋转位置编码为例,每一维对应一个固定的旋转频率,维度越低频率越高。当推理长度超出训练长度时,高频率维度的旋转角会进入训练中从未出现过的区间,相邻位置之间的相位差发生错乱,模型对相对距离的感知随之失真。表现为超出训练长度后困惑度快速上升,且不同频率维度上的失真程度并不一致。

位置插值

最直接的处理方式是压缩位置索引,让新位置落回训练范围内:

pos′=pos⋅LtrainLtarget\text{pos}' = \text{pos} \cdot \frac{L_{\text{train}}}{L_{\text{target}}}

其中 LtrainL_{\text{train}} 与 LtargetL_{\text{target}} 分别是训练长度与目标长度。压缩之后所有位置的取值都在训练分布之内,因此只需少量微调即可恢复性能。代价是位置分辨率下降:原本相邻的两个位置在压缩后变得更接近,模型区分近距离位置的能力被削弱,短距离依赖会受到影响。

频率分段处理

改进方向是按维度区别对待,让不同频率承担不同任务。按维度缩放基频是一种常见做法,它压缩低频维度而基本保留高频维度:

θi′=θi⋅(LtargetLtrain)dd−2 (按维度调整的基频缩放)\theta_i' = \theta_i \cdot \left(\frac{L_{\text{target}}}{L_{\text{train}}}\right)^{\frac{d}{d - 2}} \ \text{(按维度调整的基频缩放)}

低频维度对应远距离的结构,压缩它们相当于把长距离映射到训练区间;高频维度对应近距离的细节,保持它们可以避免分辨率损失。更精细的方案会在频率轴上分段:高频段保持原样以维持局部区分度,中频段做插值,低频段做外推,同时对注意力打分施加一个与扩展比相关的温度缩放:

softmax(logitst),t=1+λln⁡LtargetLtrain\text{softmax}\left(\frac{\text{logits}}{t}\right), \qquad t = \sqrt{1 + \lambda \ln\frac{L_{\text{target}}}{L_{\text{train}}}}

其中 λ\lambda 是控制缩放强度的系数。温度缩放的作用是补偿长序列下注意力分布的熵增,避免分布过于平坦导致区分度下降。

注意力汇与滑窗推理

另一个与结构无关的观察来自流式推理:当序列远长于训练长度时,滑动窗口推理会出现困惑度异常升高。原因是模型在训练中学到了一种把部分注意力集中到序列开头几个 token 上的模式,这些位置承担了"承接无处安放的注意力"的角色。一旦它们被滑出窗口,注意力分布的归一化基准就发生了偏移。

因此可行的推理策略是保留开头若干个位置加上最近的滑动窗口:

Wt={1,2,…,k}∪{t−w+1,…,t}\mathcal{W}_t = \left\{1, 2, \ldots, k\right\} \cup \left\{t - w + 1, \ldots, t\right\}

其中 kk 是被保留的开头位置数量、ww 是窗口大小。参与计算的配对数量只与 k+wk + w 相关,与总长度无关,因此可以在理论上无限长的流式输入上保持稳定的开销。这个结果有一个重要的实践含义:开头位置的信息价值并不均等,保留少量锚点在长上下文推理里是必要而非可选的。

缓存压缩与序列并行

前两类手段处理位置,后两类处理资源。缓存压缩的思路是减少单位长度需要保存的键值数量,多头共享与低秩投影都属于这一类,例如把每个头的键值映射到低维潜空间之后再缓存:

ct=WDKVxt,Kt=WUKct,Vt=WUVctc_t = W^{DKV} x_t, \qquad K_t = W^{UK} c_t, \qquad V_t = W^{UV} c_t

缓存只保留 ctc_t,容量由潜维度而非完整键值维度决定。另一种思路是分层驱逐,按历史位置的注意力累积量排序,只保留被持续关注的部分:

keep=TopK(∑tαt,j)\text{keep} = \text{TopK}\left(\sum_{t} \alpha_{t, j}\right)

其中 αt,j\alpha_{t,j} 是第 tt 步对第 jj 个位置的注意力权重,累积权重低的位置说明长期不被使用,可以安全驱逐出缓存。

序列并行处理的是单卡放不下的问题。把长序列切成若干块分布到多张卡上,每张卡持有一块的查询并依次接收其它卡的键值块,用在线 Softmax 逐步累积:

mnew=max⁡(mold,max⁡jzj),ℓnew=emold−mnewℓold+∑jezj−mnewm^{\text{new}} = \max\left(m^{\text{old}}, \max_j z_j\right), \qquad \ell^{\text{new}} = e^{m^{\text{old}} - m^{\text{new}}} \ell^{\text{old}} + \sum_j e^{z_j - m^{\text{new}}}

其中 mm 与 ℓ\ell 分别是当前块的最大打分与指数和。键值块在各卡之间环形传递,每张卡都能在不复制全部键值的前提下完成完整注意力。配合分块预填充的调度策略,长上下文的预填充阶段可以在多卡上并行,而解码阶段仍按批处理执行。

混合架构与选型

纯线性化的短板

前面已经指出固定状态的容量边界,这里把它落到具体的任务类型上。需要精确回忆的任务(从长文档里定位某个具体数值、在长对话里记住某个用户提到的专有名词)依赖的是"按内容检索单个位置",而线性化状态会把历史聚合成一个固定尺寸的摘要,细节在写入时就被平均掉了。因此纯线性化模型在这类任务上普遍需要更强的写入策略、更大的状态维度,或直接引入少量精确注意力。

层间混合

最实用的折中方案是按比例混合两种层。设模型共 LL 层,其中一部分使用标准注意力、其余使用状态空间或线性层:

Ltypes=[attn, linear,…,linear, attn, linear,… ]\mathcal{L}_{\text{types}} = \left[\text{attn},\ \text{linear}, \dots, \text{linear},\ \text{attn},\ \text{linear}, \dots\right]

注意力层的间隔与数量是可调超参:间隔越小,长距离检索能力越强、缓存开销越大;间隔越大则相反。实践中常见的配置是每若干层放一层标准注意力,其余用线性化结构承接长程聚合。这种混合结构还有一个额外好处:少量注意力层仍然能利用成熟的 KV 缓存优化手段,而线性层则贡献常数级的推理开销。

状态复用与缓存复用

对推理性模型而言,一个容易被忽略的性质是状态可以像 KV 缓存一样复用。由于状态只与已处理的前缀有关,相同前缀的状态可以直接保存下来供后续请求使用,不需要重新计算整段前缀。这与注意力模型的缓存复用目标一致,但复用的对象更小:一个请求要保存的不是长度成百上千的键值张量,而是固定大小的状态。对高并发的对话类应用来说,这直接决定了前缀复用能带来的收益上限。

选型判据

把前面的讨论收成三个问题,可以用来判断一个具体场景应该走哪条路线:

  • 任务是否需要精确回忆具体位置的内容。需要则保留标准注意力,或者采用混合结构,用少量注意力层承担检索;
  • 序列是一次性输入还是流式增长。一次性输入(长文档理解、代码仓库分析)更看重预填充阶段的并行度与显存;流式增长(长对话、agent 运行轨迹)更看重常数状态的复用能力;
  • 显存瓶颈在缓存还是在计算。瓶颈在缓存时优先做 KV 压缩与状态复用,瓶颈在计算时优先做分块与序列并行。
选型的落点在任务而不是结构
线性注意力与状态空间模型提供的是更便宜的状态维护方式,它们不承诺更强的记忆。判断一个长上下文方案是否合适,先看任务对记忆的要求属于"精确检索"还是"长程聚合",再看序列是流式还是整段,最后才决定用哪种结构。把结构选择放在任务判据之后,能避免为了追新而引入不必要的复杂度。
## 训练与实现要点

数值稳定性

离散化里出现了指数运算,稳定性的第一道关口在 AA 的特征值上。若特征值实部为正,Aˉ\bar{A} 的范数会随步数增长,状态发散;因此实现中通常把 AA 参数化为负指数形式:

A=−exp⁡(Alog⁡)A = -\exp\left(A_{\log}\right)

其中 Alog⁡A_{\log} 是可学习参数。这样无论训练如何更新,特征值始终为负,状态更新天然是收缩的。这一处理与衰减因子必须落在 00 到 11 之间是同一件事的两种写法。

第二道关口在扫描的数值范围上。累积衰减系数是许多小于 1 的因子连乘,直接计算会下溢。稳定的做法是先在对数域上求前缀和,再取指数:

Lij=exp⁡(∑k=j+1ilog⁡ak)L_{ij} = \exp\left(\sum_{k=j+1}^{i} \log a_k\right)

对数域累加把连乘转成了加法,前缀和可以用一次扫描求得,既避免了下溢,也让分块算法可以复用同一套前缀结果。状态更新本身建议在更高精度下累积,混合精度训练时把状态相关的计算保留在单精度,可以避免长序列上的误差累积。

显存与重计算

结构上的显存差别需要单独强调。注意力需要保存 O(n2)\mathcal{O}(n^2) 的打分矩阵(或在分块实现里保存块级中间量),而线性化结构的状态是固定维度,激活占用随长度线性增长:

Memattn=O(n2),Memlinear=O(n)\text{Mem}_{\text{attn}} = \mathcal{O}\left(n^2\right), \qquad \text{Mem}_{\text{linear}} = \mathcal{O}\left(n\right)

这也是少量注意力层的混合架构在工程上很实用的原因:大部分层用线性化结构压低激活,少数注意力层承担检索能力,整体显存处于可控范围。配合梯度检查点(正向只保存少量检查点、反向重算中间状态)可以进一步压低占用,代价是少量重复计算。

并行策略

扫描的并行化按分块组织:块内保持串行递推,块与块之间的状态用前缀扫描合并。块大小的选择是一个工程权衡,块太大并行度不足,块太小则块的启动开销与中间量搬运变多。

在张量并行下,状态矩阵沿特征维度被切分,每一步更新都需要一次通信把局部状态汇总,通信量与状态维度相关。这一点与注意力不同:注意力的张量并行切分的是头,各头之间无需通信。因此状态维度的选择除了影响表达能力,也影响分布式训练的通信开销,这是实际配置时常见的取舍点。

与推理系统的配合

推理侧有两处衔接值得注意。第一是分块预填充与连续批处理的组合:长提示的预填充按块调度,与解码阶段的其他请求混批执行,避免单个长请求独占算力。第二是状态快照:线性化结构的前缀状态可以直接保存并在后续请求中恢复,复用粒度比 KV 缓存更粗(一个状态而非逐位置张量),因此更适合高并发的短请求场景。

工程落地:三个场景的映射

Agent 运行轨迹与上下文工程

Agent 的运行方式决定了它的上下文如何增长:每一轮都要把新的工具返回、执行结果与观察追加进请求,轮次越多、工具返回越长,历史部分占比越高。我在另一篇文章里讨论过这个问题的治理思路,核心是把上下文当作一个需要策展的对象,按预算分配系统提示词、工具定义、历史、检索结果与中间轨迹各自的份额。

把上下文工程与线性化状态放在一起看,两者的分工是清晰的。上下文工程处理的是显式外置的信息:哪些历史该保留原文、哪些该压缩成摘要、哪些该换成指针,它保证了需要精确回忆的内容可以按原文取回。线性化状态处理的是隐式内部的聚合:模型自身对历史做的固定容量压缩,用于维持语感与长程连贯。Agent 场景的特殊性在于它大量依赖精确回忆(工具返回的结构化结果不能模糊),因此更适合以外置记忆与精确注意力为主,把线性化结构放在长对话历史的平滑聚合位置上。此外,前缀稳定与缓存复用的收益在这个场景里被放大,因为 Agent 的系统提示词与工具定义在多数轮次里是不变的前缀。

记忆系统的内部状态与外部状态

记忆系统的工作方式与状态空间模型其实面对同一个问题:用什么形式保存历史。记忆库把历史保存为可检索的条目,用向量索引与元数据过滤保证精确性,代价是索引维护、容量管理与一致性开销;状态空间模型把历史压缩成一个固定维度的矩阵,用常数成本保证吞吐,代价是细节丢失。

两者的取舍规则相同,都是容量换成本,差别在于状态是否可寻址。记忆库的状态是可寻址的:可以按查询定位到具体条目,也可以删除某一条。线性化状态不可寻址:无法从状态矩阵里取出某一句原文。因此在实际系统里它们通常是互补的:需要精确与可治理的部分交给外置记忆,需要流畅与低成本的部分交给内部状态。我在设计记忆系统时把召回排序的角色理解成替调用方做上下文换页,这里的"页"就是可寻址的外置状态,而模型内部的状态则是不可寻址的那一层。

视觉长序列与多目标跟踪

视觉侧的序列长度增长更快。以多摄像头多目标跟踪为例,序列的元素数量大致是帧数、目标数与摄像头数的乘积,一条长时序轨迹的特征如果逐帧缓存,代价会迅速超过预算。

多目标跟踪的主流做法是用递推模型维护轨迹状态。跟踪器为每条轨迹维护一个运动状态(位置、速度及其协方差),逐帧用观测更新,这是卡尔曼滤波的形式;轨迹的外观特征则常用循环网络或滑动窗口聚合,例如用门控循环单元维护一条轨迹的历史外观表示,其形式与状态空间模型的递推更新同源:

zt=σ(Wz[ht−1,xt]),ht=(1−zt)ht−1+zth~tz_t = \sigma\left(W_z \left[h_{t-1}, x_t\right]\right), \qquad h_t = \left(1 - z_t\right) h_{t-1} + z_t \tilde{h}_t

其中 ztz_t 是更新门,决定历史与当前观测的混合比例。可以看到它与前面状态空间模型的门控更新在结构上一致,都是用一个输入相关的系数在状态保留与状态写入之间做插值。

我在这一方向的研究里把跨摄像头关联建模成图上的匹配问题:把摄像头与轨迹构造成二分异质图,用图注意力计算匹配分数,再用双随机约束求解整体一致的分配。这种建模不需要长期保存逐帧特征,因为图的节点表示本身已经是轨迹级的聚合结果。把两者放在一起看,处理长时序的路数有三条:递推状态(卡尔曼、门控循环)、可寻址缓存(逐帧特征与检索)、以及图或集合级别的聚合。前两条对应本文讨论的两种状态观,第三条则把问题从序列建模换成了匹配问题,这也是视觉侧处理长时序时最常用的降维手段。

决定走哪条路,可以从一个问题开始:这个任务需要的记忆,是"能够精确取回某个具体时刻的信息",还是"维持对整段过程的连贯理解"。前者要求状态可寻址,后者允许状态被压缩。

判断记忆需求:精确检索还是长程聚合
→
选结构:注意力 / 线性化 / 混合
→
位置外推与窗口策略
→
缓存压缩与并行调度

参考

[1] Katharopoulos A, Vyas A, Pappas N, Fleuret F, Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention. ICML, 2020.
[2] Choromanski K, Likhosherstov V, Dohan D, et al., Rethinking Attention with Performers. ICLR, 2021.
[3] Wang S, Li B Z, Khabsa M, et al., Linformer: Self-Attention with Linear Complexity. arXiv, 2020.
[4] Kitaev N, Kaiser L, Levskaya A, Reformer: The Efficient Transformer. ICLR, 2020.
[5] Zhai S, Talbott W, Srivastava N, et al., An Attention Free Transformer. arXiv, 2021.
[6] Sun Y, Dong L, Huang S, et al., Retentive Network: A Successor to Transformer for Large Language Models. arXiv, 2023.
[7] Yang S, Wang B, Shen Y, et al., Gated Linear Attention Transformers with Hardware-Efficient Training. ICML, 2024.
[8] Yang S, Wang B, Zhang Y, et al., Parallelizing Linear Transformers with the Delta Rule over Sequence Length. NeurIPS, 2024.
[9] Gu A, Dao T, Mamba: Linear-Time Sequence Modeling with Selective State Spaces. COLM, 2024.
[10] Gu A, Goel K, Re C, Efficiently Modeling Long Sequences with Structured State Spaces. ICLR, 2022.
[11] Gu A, Dao T, Ermon S, et al., HiPPO: Recurrent Memory with Optimal Polynomial Projections. NeurIPS, 2020.
[12] Dao T, Gu A, Transformers are SSMs: Generalized Models and Efficient Algorithms Through Structured State Space Duality. ICML, 2024.
[13] Smith J T H, Warrington A, Linderman S W, Simplified State Space Layers for Sequence Modeling. ICLR, 2023.
[14] Fu D Y, Dao T, Lu K, et al., Hungry Hungry Hippos: Towards Language Modeling with State Space Models. ICLR, 2023.
[15] Poli M, Massaroli S, Nguyen E, et al., Hyena Hierarchy: Towards Larger Convolutional Language Models. ICML, 2023.
[16] Peng B, Alcaide E, Anthony Q, et al., RWKV: Reinventing RNNs for the Transformer Era. EMNLP Findings, 2023.
[17] Fu D Y, Arora S, Grogan J, et al., Monarch Mixer: A Simple Sub-Quadratic GEMM-Based Architecture. NeurIPS, 2023.
[18] Chen S, Wong S, Chen L, Tian Y, Extending Context Window of Large Language Models via Positional Interpolation. arXiv, 2023.
[19] Peng B, Quesnelle J, Fan H, YaRN: Efficient Context Window Extension of Large Language Models. ICLR, 2024.
[20] Xiao G, Tian Y, Chen B, et al., Efficient Streaming Language Models with Attention Sinks. ICLR, 2024.
[21] Zhang Z, Sheng Y, Zhou T, et al., H2O: Heavy-Hitter Oracle for Efficient Generative Inference of Large Language Models. NeurIPS, 2023.
[22] Liu H, Zaharia M, Abbeel P, Ring Attention with Blockwise Transformers for Near-Infinite Context. ICLR, 2024.
[23] Shazeer N, Fast Transformer Decoding: One Write-Head is All You Need. arXiv, 2019.
[24] Ainslie J, Lee J, de Jong Z, et al., GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints. EMNLP, 2023.
[25] DeepSeek-AI, DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model. arXiv, 2024.
[26] Dao T, Fu D Y, Ermon S, et al., FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. NeurIPS, 2022.
[27] Lieber O, Lenz B, Bata H, et al., Jamba: A Hybrid Transformer-Mamba Language Model. arXiv, 2024.
[28] De S, Smith S L, Fernando A, et al., Griffin: Mixing Gated Linear Recurrences with Local Attention for Efficient Language Models. arXiv, 2024.
[29] Arora S, Eyuboglu S, Timalsina A, et al., Zoology: Measuring and Improving Recall in Efficient Language Models. ICLR, 2024.
[30] Behrouz A, Razaviyayn M, Zhong P, Mirrokni V, Titans: Learning to Memorize at Test Time. arXiv, 2024.
[31] Rush A, The Annotated S4. 博客, 2022.
[32] Rush A, Mamba: The Hard Way. 博客, 2024.
[33] Dao T, State Space Duality (Mamba-2) Part I 至 Part III. 博客, 2024.
[34] Grootendorst M, A Visual Guide to Mamba and State Space Models. 博客, 2024.

🌙