Sliding Window Attention 是一种局部 attention 机制。它限制每个 token 只关注附近窗口内的 token,而不是完整历史上下文。它的目标是降低长序列训练和推理中的 attention 计算、显存和 KV Cache 压力。
基本形式
在标准 causal attention 中,第 个 token 可以关注所有历史 token:
Sliding window attention 只允许它关注最近 个 token:
其中 是 window size。
Mask 形式可以理解为:
这样每个 token 的可见范围从 降到 。
复杂度收益
标准 full attention 对序列长度 的 score matrix 是:
复杂度约为:
Sliding window attention 中,每个 token 只关注 个位置,复杂度变为:
当 时,长序列成本显著降低。训练时可以减少 attention activation;推理时也可以只保留或读取窗口内的 K/V。
信息传播
Sliding window 限制的是单层直接可见范围,但多层堆叠可以扩大有效感受野。假设每层窗口大小为 ,经过多层后,信息可以逐层向前传播。
不过这种传播不是免费的:
- 远距离信息需要经过多层传递;
- 精确检索远处 token 可能变难;
- 层数有限时,窗口外信息可能无法充分影响当前 token;
- 对需要全局证据的任务,纯局部窗口可能不足。
因此 sliding window 常与 global attention、稀疏 attention、压缩记忆、retrieval 或局部/全局混合策略结合。
与 Full Attention 的对比
| 机制 | 可见范围 | 成本 | 长距离能力 |
|---|---|---|---|
| Full causal attention | 全部历史 token | 高, | 直接访问远处 token |
| Sliding window attention | 最近 个 token | 低, | 依赖层间传播或额外机制 |
Sliding window 的优势是成本可控,代价是全局信息访问能力变弱。
与 KV Cache 的关系
在 decoder-only 推理中,如果模型的 attention pattern 只需要最近窗口,系统可以只保留或只读取窗口内 K/V,从而降低长上下文 decode 的显存和带宽压力。
但具体实现要看模型是否所有层都使用窗口注意力,以及是否有周期性 full attention / global attention 层。如果部分层仍需要全局 K/V,系统就不能简单丢弃全部窗口外缓存。
适用场景
Sliding window attention 适合:
- 局部依赖占主导的语言或代码模式;
- 长文本中主要需要邻近上下文的生成;
- 需要控制 attention 成本的长序列训练;
- 与全局/稀疏/压缩机制组合的 hybrid architecture。
它不适合单独承担所有长程依赖,尤其是需要跨文档检索、远距离多跳推理或精确引用远处证据的任务。
常见误解
- 误解:sliding window 就等于长上下文能力。 它降低成本,但纯局部窗口会限制直接访问远处信息。
- 误解:窗口外信息完全不可用。 多层堆叠可以传播窗口外信息,但传播效率和精度有限。
- 误解:可以随便缩小窗口。 窗口太小会损害局部语法、代码结构和长依赖建模。
- 误解:KV Cache 可以一定只保留窗口。 这取决于模型所有层的 attention pattern 和实现。