核心要点

  • 标准注意力先算 QKᵀ 得 n×n 矩阵,复杂度 O(n²d),长序列成本爆炸

  • 用核函数 φ 近似 softmax,把相似度写成 φ(Q)·φ(K) 的内积

  • 借结合律先算 φ(K)ᵀV(d×d),再乘 φ(Q),避免显式 n×n 矩阵,降到 O(n)

  • 代价:丢失 softmax 的精确归一化,表达力/精度有损,长程精确检索变弱

标准回答

瓶颈来源

标准自注意力计算 softmax(QKᵀ)V。先算 QKᵀ 会得到一个 n×n 的注意力矩阵,复杂度和显存都是 O(n²),序列一长就成为瓶颈。

核函数近似

softmax 本质是衡量 query 与 key 的相似度。线性注意力用一个特征映射 φ(核函数,如 elu+1)把相似度近似为 φ(Q) 与 φ(K) 的内积,即去掉了 softmax 中不可分解的指数归一化。

结合律重排

去掉 softmax 后,输出 ≈ φ(Q)·(φ(K)ᵀV)。利用矩阵乘法结合律,先计算 φ(K)ᵀV 得到一个 d×d 的小矩阵,再左乘 φ(Q),整体复杂度变为 O(n·d²),对序列长度 n 是线性的,也无需存储 n×n 矩阵。

代价与定位

牺牲了 softmax 的精确归一化和尖锐注意力分布,表达力与精度有损,在需要精确长程检索的任务上往往不及标准注意力;常与门控、衰减等机制结合(如 RetNet、GLA)改善。详见 线性注意力架构演进。

常见误区

⚠️ 常见踩坑

线性是「对序列长度 n 线性」,不是「整体免算力」;d²/d 项仍在。另外它是近似 softmax 而非等价,精度通常有损,不要宣称无损替代。

追问

追问 1线性注意力在自回归生成时还能保持 O(1) 每步吗?

可以。把 φ(K)ᵀV 视作一个可累加的状态(类似 RNN 隐状态),每生成一个 token 只需用新 token 更新这个固定大小的状态,再与 φ(q) 相乘得到输出,每步 O(1)、无需缓存全部 KV。这也是它与 SSM/RNN 思路相通之处。

追问 2它和 Flash Attention 解决的是同一个问题吗?

不是。Flash Attention 仍是精确 softmax 注意力,O(n²) 计算不变,只是通过分块和不落地 n×n 矩阵来省显存、提访存效率;线性注意力是改变算法本身、近似 softmax 把计算复杂度降到线性,二者一个治标存内访存、一个改变复杂度量级。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。