Files
myWiki/concepts/attention-sinks.md

59 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "注意力汇 (Attention Sinks)"
created: 2025-04-15
updated: 2026-05-14
type: concept
tags: [attention, llm, streaming, softmax, kv-cache]
sources: ["https://arxiv.org/abs/2309.17453"]
---
# 注意力汇 (Attention Sinks)
## 定义
**注意力汇**是 Xiao et al. (2024) 在 ICLR 论文 [[streaming-llm|StreamingLLM]] 中发现的现象:自回归 LLM 中,**初始 Token 在所有层和注意力头上吸引不成比例的高注意力分数**,即使它们与当前预测任务语义无关。
## 数学解释
SoftMax 函数的性质导致注意力汇的出现:
$$\text{SoftMax}(x)_i = \frac{e^{x_i}}{\sum_{j=1}^N e^{x_j}}$$
关键约束:所有 token 的注意力分数之和必须为 1$\sum_i \text{SoftMax}(x)_i = 1$)。
当当前 query 与大多数上下文 token 没有强语义匹配时,模型仍然需要把这些"多余"的注意力值分配到某处。**初始 Token 因自回归建模中对所有后续 token 都可见,被自然训练为注意力的"汇" (sink)**。
Xiao et al. 的公式表述:
$$\text{SoftMax}(x)_i = \frac{e^{x_i}}{e^{x_1} + \sum_{j=2}^N e^{x_j}}, \quad x_1 \gg x_j, \, j \in 2, \ldots, N$$
其中 $x_1$(初始 token 的注意力 logit远大于其他 token。
## 实验证据
1. **注意力可视化**Llama-2-7B 除底部两层外,几乎所有层和注意力头都严重关注初始 token
2. **替换实验**:将前 4 个 Token 替换为换行符 `\n`,模型仍大量关注它们,恢复它们后 PPL 恢复——证明是**绝对位置**而非语义在起作用
3. **数量研究**4 个初始 Token 即可完全恢复性能1-2 个不够,更多边际递减
## 根因分析
为什么是**初始 Token** 而不是其他 Token
→ 自回归语言建模中,初始 Token 对**所有后续 Token 都可见**,而后面的 Token 只对有限集合可见。这使得初始 Token 更容易被训练为注意力的通用"倾倒目标"。
## 应用
- **[[streaming-llm|StreamingLLM]]**:保留 4 个初始 Token 的 KV + 最近 Token 的滑动窗口 → 无限长流式推理
- **H2O**:基于累积注意力分数选择性地保留 "Heavy Hitter" Token
- **SinkRouter**:汇感知的路由优化策略
- **预训练改进**:在训练样本前添加专用 [[sink-token|可学习汇 Token]],消除对多个初始 Token 的依赖
## 相关概念
- [[streaming-llm|StreamingLLM]] — 基于注意力汇的流式推理框架
- [[window-attention|窗口注意力]] — 驱逐初始 Token 导致崩溃的基线
- [[sink-token|汇 Token]] — 预训练中的专用注意力汇
- [[softmax-off-by-one|SoftMax-off-by-One]] — 替代方案
- [[kv-cache-bottleneck|KV 缓存瓶颈]] — 相关优化问题
- [[length-extrapolation|长度外推]] — 问题域