56 lines
2.3 KiB
Markdown
56 lines
2.3 KiB
Markdown
---
|
||
title: "窗口注意力 (Window Attention)"
|
||
created: 2026-05-14
|
||
updated: 2026-05-14
|
||
type: concept
|
||
tags: [attention, llm, streaming, kv-cache]
|
||
sources: ["https://arxiv.org/abs/2309.17453", "https://arxiv.org/abs/2004.05150"]
|
||
---
|
||
|
||
# 窗口注意力 (Window Attention)
|
||
|
||
## 定义
|
||
|
||
窗口注意力(Window Attention / Sliding Window Attention)是一种注意力机制的变体,模型**只缓存和关注最近的 $L$ 个 Token 的 KV 状态**,而非所有历史 Token。最早由 Beltagy et al. (2020) 在 Longformer 中提出,后被广泛应用于 LLM 的高效推理。
|
||
|
||
## 动机
|
||
|
||
- **O(T²) 计算不可行**:Dense Attention 对长序列的计算和内存开销过大
|
||
- **恒定内存**:窗口注意力将 KV 缓存大小固定为 $L$,无论序列多长
|
||
- **直观且自然**:最近的上下文通常最有信息量
|
||
|
||
## 致命缺陷:Attention Sink 崩溃
|
||
|
||
Xiao et al. (2024) 在 [[streaming-llm|StreamingLLM]] 论文中揭示了窗口注意力的关键失败模式:
|
||
|
||
**当序列长度超过缓存大小 $L$,初始 Token 的 KV 被逐出时,模型困惑度急剧飙升(从 ~5 跳至 5000+)。**
|
||
|
||
### 原因
|
||
|
||
初始 Token 在所有层和注意力头中扮演 [[attention-sinks|注意力汇]] 的角色——它们承载了大量本应分散的注意力分数。一旦被逐出,SoftMax 的分母结构被破坏,注意力分布发生剧烈偏移,模型崩溃。
|
||
|
||
### 实验数据
|
||
|
||
| Cache Config | Llama-2-13B PPL |
|
||
|-------------|-----------------|
|
||
| 0 + 1024 (Window) | 5158.07 |
|
||
| 4 + 1020 (StreamingLLM) | 5.40 |
|
||
|
||
窗口注意力在序列长度超出缓存后彻底失效。
|
||
|
||
## 与其他方法的对比
|
||
|
||
| 方法 | 复杂度 | 长文本性能 | 问题 |
|
||
|------|--------|-----------|------|
|
||
| Dense Attention | O(T²) | 超出预训练窗口后崩溃 | 内存无限增长 |
|
||
| **Window Attention** | O(TL) | 初始 Token 被逐出后崩溃 | Attention Sink 效应 |
|
||
| Sliding Window + Recompute | O(TL²) | 优秀 | 太慢(每个 token 重建 KV) |
|
||
| StreamingLLM | O(TL) | 优秀 | 需保留 4 个初始 Token |
|
||
|
||
## 相关概念
|
||
|
||
- [[attention-sinks|注意力汇]] — 解释窗口注意力失败的根本原因
|
||
- [[streaming-llm|StreamingLLM]] — 修复窗口注意力的方案
|
||
- [[length-extrapolation|长度外推]] — 更广泛的问题背景
|
||
- [[kv-cache-bottleneck|KV 缓存瓶颈]] — 相关效率问题
|