核心要点

  • 标准注意力先算 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 矩阵。

面试里可以补一句:线性注意力如何把注意力复杂度降到 On 在大模型场景下通常要同时权衡效果、延迟、成本和安全边界。回答时最好带一个例子,比如上下文过长、幻觉、缓存命中或工具调用失败时,系统应该如何降级和观测。

四、代价与定位

牺牲了 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 把计算复杂度降到线性,二者一个治标存内访存、一个改变复杂度量级。

🔗 相似问题

同一考点的不同问法,换着练更稳

延伸学习

按主题分类的相关资源,便于系统复习