Attention 变体:从 Sliding Window 到 MLA
更新于 2026-04-04
标准的 Multi-Head Attention 面临三大瓶颈: 计算复杂度、KV cache 显存占用、长上下文处理。前面我们已经看过 GQA/MQA 如何通过共享 KV head 来减少缓存,这里进一步介绍其他重要的 attention 变体。
四个优化方向:
- 稀疏化:减少每个 token 需要 attend 的范围(Sliding Window Attention)
- 压缩 KV:减少每个位置存储的信息量(MLA)
- 线性化:去掉 softmax,将 降到 (Linear Attention → GDN)
- 混合架构:不同层用不同策略,取长补短(Hybrid Attention)
Sliding Window Attention
核心思想:每个 token 只 attend 前 个 token,而非整个序列。
这将复杂度从 降到 。看起来损失了全局信息?其实不然 — 多层堆叠后,第 层的有效感受野为 。例如 Mistral 7B 有 32 层、窗口 ,理论感受野覆盖 个 token。
采用者: Mistral 7B (), Mixtral 8x7B (), Gemma 2(交替层使用)。
Sliding Window 还能和 Flash Attention 完美结合 — 窗口内的计算用 Flash Attention 的 tiling 策略高效完成,窗口外的直接跳过。
Hybrid Attention
不是所有层都需要 full attention — 将不同类型的 attention 混合使用,让每种类型发挥特长。
常见做法:
- Gemma 2:偶数层 full attention + 奇数层 sliding window attention
- Jamba (AI21):Attention 层 + Mamba (SSM) 层交替,1:3 的比例
- Command-R (Cohere):部分层 full attention + 部分层 local attention
设计选择的关键问题:full attention 层放哪里?比例怎么定?经验表明:靠近输出的层更需要全局信息(全局层放上面),靠近输入的层局部模式就够了。
Cross Attention
前面的 attention 变体都是 self-attention(Q/K/V 来自同一序列)。Cross attention 的核心区别是 Q 来自一个序列,K/V 来自另一个序列。
典型场景
Encoder-Decoder 架构(翻译、摘要):
- Decoder 的 hidden state 作为 Q
- Encoder 的输出作为 K 和 V
- 每个 decoder token “查询” encoder 的完整输入,决定关注输入的哪些部分
- 采用者:T5, BART
多模态架构(图文理解):
- 文本 decoder 的 token 作为 Q
- Vision encoder 输出的图像 token 作为 K 和 V
- 文本 token “查询” 图像 token,融合视觉信息
- 采用者:Flamingo, LLaVA
和 self-attention 相比,cross attention 的 KV cache 行为不同:KV 来自 encoder 的固定输出,不会随着生成增长。
Multi-Latent Attention (MLA)
GQA 通过 共享 KV head 减少缓存,那能不能更激进?MLA 的思路是对 KV cache 做 低秩压缩,不存完整的 K 和 V,而是存一个低维的 compressed latent 。
压缩过程:
只需缓存 (维度远小于 K+V)。推理时再用 、 解压。更妙的是, 可以吸收进 的矩阵乘法中,避免显式解压。
下面的计算器可以对比不同配置下 MHA、GQA、MLA 的 KV cache 大小:
以 DeepSeek-V2 为例(, 128 heads, ):MLA 的 KV cache 只有标准 MHA 的约 5%。
采用者: DeepSeek-V2, DeepSeek-V3, DeepSeek-R1
Linear Attention 与 Gated Delta Net
前面的变体都保留了 softmax — 只是减少计算范围(SWA)或压缩缓存(MLA)。Linear Attention 走了更激进的路线:直接去掉 softmax,从根本上消除 复杂度。
核心思想:去掉 softmax,改变计算顺序
标准 Attention 的计算是:
必须先算 ( 矩阵),再 softmax,再乘 。softmax 是逐行归一化操作,它阻止了矩阵乘法的结合律 — 你不能先算 再乘 ,因为 softmax 卡在中间。
Linear Attention (Katharopoulos et al., 2020) 的关键洞察:用特征映射 替代 softmax,使得:
是 矩阵( 是 head dimension,通常 64-128),与序列长度 无关。当 时,这从 降到了 — 真正的线性复杂度。
为什么 φ 能解锁结合律
softmax 之所以阻止结合律,是因为它做了两件事:(1) exp() 保证非负,(2) 逐行归一化(除以行和)。归一化耦合了同一行的所有元素 — 计算 需要知道 。你不能独立算一个元素,必须先算完整行的 ()。
的策略:用独立的逐元素变换替代耦合的归一化。将 softmax 核 替换为核函数分解:
独立作用于每个 和 (不需要知道其他 key 的值),而内积天然满足结合律。展开第 个输出(含归一化):
分子和分母中的求和都与查询位置 无关,可以预先算好一次(),然后每个查询只做 的向量乘法。
φ 的选择需要满足两个条件:(1) 输出非负 — 确保注意力权重非负,(2) 逐元素独立 — 不能像 softmax 那样耦合同行其他元素。常见选择包括 (Katharopoulos 2020 原始选择)和 。理论上,Random Fourier Features 可以近似 softmax 的 exp 核,但计算较贵。
φ 效果不如 softmax 的根本原因:softmax 的 exp + 归一化天然产生尖锐、稀疏的注意力分布(大值指数放大,小值压到接近零),让模型能集中关注最相关的少数 token。简单的 φ 没有这种”赢者通吃”效果,所有 key 的贡献差异不大。这就是后续工作(RetNet/DeltaNet/GDN)加衰减、delta rule、门控的本质动机 — 弥补 φ 无法替代 softmax 选择性的缺陷。
RNN 形式:固定大小的状态
去掉 softmax 后,Linear Attention 可以写成 RNN 递推形式:
是一个 的状态矩阵,压缩了所有历史信息。推理时不需要 KV cache(随序列增长),只需维护这个固定大小的状态。
这个形式和 状态空间模型 (SSM) 惊人地相似:
| Linear Attention | SSM / Mamba | |
|---|---|---|
| 状态更新 | ||
| 输出 | ||
| 状态大小 | 矩阵(固定) | 维向量(固定) |
| 推理复杂度 | per token | per token |
两者本质相同:用固定大小的状态压缩历史,线性递推更新。Mamba-2 的 SSD 框架 从数学上严格证明了这个等价性 — 结构化 SSM 就是一种带衰减的 linear attention。
代价:softmax 不是白删的
softmax 提供了稀疏、尖锐的注意力分布 — 它让模型能够集中关注少数关键 token(比如在长文本中精确定位某个名字)。去掉 softmax 后,注意力分布变得”平坦”,所有 token 的贡献差异减小。
这导致纯 Linear Attention 在需要精确检索的任务上(如 copying、in-context learning)远弱于标准 Attention。这和 SSM/Mamba 面临的限制本质相同 — 固定大小的状态无法精确记住任意长度序列中的特定信息。详见 Hybrid 架构:为什么纯 SSM 不够。
从累加到纠错:状态更新的演进
基础 Linear Attention 的状态只做累加(),永远不遗忘。后续工作的核心改进就是让状态更新更智能:
演进脉络:
- Basic Linear Attention (2020):去掉 softmax,建立 RNN 形式。但状态只累加不遗忘,性能差距大
- RetNet (2023, MSR):加入指数衰减因子 ,旧信息每步自动淡化。但 是固定超参数
- DeltaNet (2024, Yang et al.):引入 delta rule — 不盲目累加,而是先查状态中”已有什么”(),只写入差值(“还缺什么”)。这是一种联想记忆的在线学习规则
- Gated Delta Net (GDN) (2024, ICLR 2025):结合两种互补机制 — 门控(来自 Mamba2)实现选择性遗忘 + delta rule 实现精准写入。论文证明 GDN 在语言建模、上下文检索、长序列理解上超越 Mamba2
与 Mamba 的关系
Linear Attention 和 SSM/Mamba 是同一思想的两种表述 — 前者从 Attention 出发(去掉 softmax),后者从控制论出发(状态空间递推),最终殊途同归。
GDN 直接体现了这种融合:它在论文标题中就写明 “Improving Mamba2 with Delta Rule” — 把 Mamba2 的门控机制和 linear attention 的 delta rule 组合在一起。GDN 的 Hybrid 架构(GDN 层 + sliding window attention 层交替)和 Jamba(Mamba 层 + attention 层交替)的思路完全一致。
Linear Attention 家族和 SSM/Mamba 家族正在快速融合。理解一方就理解了另一方的核心思想。详细的 SSM/Mamba 原理参见 状态空间模型与 Mamba,混合架构设计参见 Hybrid 架构。
对比总结
| 方法 | 计算复杂度 | KV Cache | 核心思想 |
|---|---|---|---|
| Full MHA | O(n²d) | 2 × n_heads × d_head × seq | 每个 head 独立 Q/K/V,完整注意力 |
| GQA | O(n²d) | 2 × n_kv_heads × d_head × seq | 多个 Q head 共享 KV head,减少 KV 缓存 |
| Sliding Window | O(nwd) | 2 × n_heads × d_head × w | 每个 token 只 attend 前 w 个,堆叠扩大感受野 |
| Cross Attention | O(n·m·d) | 2 × n_heads × d_head × m (encoder) | Q 来自 decoder,KV 来自 encoder/视觉 |
| MLA | O(n²d) | latent_dim × seq (极小) | 低秩压缩 KV cache,存 compressed latent |
| Hybrid | 混合 | 分层不同 | 混合不同 attention 类型(full + SWA / SSM) |
选型指南:
- 长上下文 + 低延迟 → Sliding Window(Mistral 方案)
- 极致 KV cache 压缩 → MLA(DeepSeek 方案)
- 跨模态 / Encoder-Decoder → Cross Attention
- 线性复杂度 + 固定状态 → Linear Attention / GDN(替代 KV cache)
- 平衡方案 → Hybrid(Gemma 2 方案,或 GDN + SWA 交替)
- 通用 KV 节省 → GQA(目前最主流的折中选择)