一句话定义
稀疏注意力不计算所有 token 对,而是只保留一部分连接:局部窗口、全局 token、跨步连接或块稀疏模式,从而减少计算和显存。
为什么需要它
标准 Attention 是 N×N 的全连接,长序列下 O(n²) 很快成为瓶颈。语言、图像、音频里很多关系是局部的,没必要让每个 token 都看所有 token。
怎么工作
- 局部窗口:每个 token 只看前后 w 个 token,复杂度 O(n·w)。
- 全局 token:少数特殊 token 看全序列,负责汇总长程信息。
- 跨步/膨胀:隔一段取一个连接,扩大感受野。
- 块稀疏:按块划分,只计算选中的块,对 GPU 更友好。
- 模式可以组合,例如局部窗口 + 全局 token + 少量随机连接。
Block Sparse
把序列按块划分,只计算预先选定的块对;块大小和模式要匹配 GPU,否则稀疏带来的收益会被索引开销吃掉。
关键取舍
- 计算和显存下降,但可能丢掉未被连接的长程关系。
- 稀疏模式要和任务匹配;长文档问答通常需要全局 token 或检索配合。
- 块稀疏对硬件友好,非规则稀疏未必真的更快。
- 局部窗口负责邻近关系,全局 token 负责汇总;块大小要匹配 GPU。
- 评测时要比较同预算下的质量和吞吐,而不是只看复杂度。
- 模式越规则,越容易在 GPU 上高效实现。
常见误区
- FlashAttention 不是稀疏注意力:它优化 IO,但仍计算完整注意力。
- 稀疏注意力不是“无损压缩”,它改变了模型能看到的连接。
- 稀疏不等于一定更快;模式、块大小和算子实现决定收益。
用在哪里
- 长文档、长音频、高分辨率图像、基因组等超长序列。
- 需要控制显存/延迟,同时保留局部结构的场景。
- 与全局 token、检索或混合架构配合,弥补长程信息。
相关概念
- Attention:被稀疏化的计算。
- FlashAttention:另一条优化路线,不改变全连接语义。
- 上下文窗口:长上下文需求的来源。