Attention 热力图:模型的"视野"长什么样
现代大模型的核心计算是 Self-Attention:
Attention(Q, K, V) = softmax( (Q K^T) / sqrt(d_k) ) V
直观理解就是:当前 token 回头看所有历史 token,挑出最相关的几个,综合它们的信息来决定输出。
如果把 attention 权重画成热力图,横轴是历史 token,纵轴是当前 token,你会看到一个非常稳定的结构:左侧(开头)很亮,中间几乎全暗,右侧(结尾)又很亮。 说白了,模型的注意力天然就是一个 U 型分布——头和尾看得清楚,中间基本是盲区。
开头为什么吸走注意力:Attention Sink
前几个 token 持续霸占注意力,这个现象叫 Attention Sink(注意力沉没)。
根本原因在于 softmax 的竞争机制。softmax 本质上是"赢家通吃"——只要某些 token 的 attention score 稍微高一点,经过指数运算后就会拿走大部分权重。而在训练过程中,开头 token 被所有后续 token 反复引用,逐渐变成了一种稳定的"全局上下文锚点"。模型学会了一个习惯:不管问什么,先看看开头说了啥。
结尾为什么容易被看到:Recency Bias
另一端的优势来自位置编码。很多模型使用 RoPE(Rotary Position Embedding),它有一个关键性质:token 之间距离越远,attention 相似度越低。
这直接导致了近期偏见(Recency Bias)——刚出现的 token attention 很高,远处的 token attention 很低。这跟人类的记忆其实挺像:刚说的话记得清楚,前天说了啥早忘了。
两头夹击,中间遭殃
把这两个机制叠在一起:
- 开头 token 是 attention anchor,权重高
- 结尾 token 有 recency bias,权重也高
- 中间 token:既不靠前也不靠后,两边都不沾
如果画一条准确率曲线,横轴是信息在上下文中的位置,纵轴是模型回答正确率,你会得到一个标准的 U 型:头尾高,中间塌。这就是 Lost in the Middle。
长上下文 ≠ 长记忆,别被参数骗了
现在动不动就是 128K、256K、甚至 1M context window,听起来好像模型能"记住"一百万个 token。但真实情况是:attention 非常稀疏。
假设上下文有 100,000 个 token,某个 token 的 attention 分布可能是:
token_3 0.41
token_15 0.33
token_22 0.18
其余99997个 ~0
十万个 token 里,真正被用到的可能就几十个。所以说,context 大小 ≠ 可用信息量。那些宣传"百万上下文"的,说白了就是给你一个巨大的书架,但模型每次只会翻其中两三本。
KV Cache:Transformer 的真实"内存"
模型推理时,每生成一个 token 都会保存 Key 和 Value 向量,形成 KV Cache:
K cache = [K1, K2, K3, ..., Kn]
V cache = [V1, V2, V3, ..., Vn]
每个新 token 只追加不修改,本质上是一个 append-only 的内存系统。vLLM 等推理框架的核心工作,其实就是在解决如何高效管理和读取这块内存。
Transformer 本质上是一个记忆路由器
换个角度看 attention 的三要素:
- Q(Query)= 查询请求
- K(Key)= 记忆索引
- V(Value)= 记忆内容
整个 attention 过程就是:发起查询 → 检索索引 → 取回内容。 Transformer 与其说是一个序列模型,不如说是一个"学习出来的记忆路由系统"。
这个视角也解释了为什么 MoE(混合专家模型)和 Transformer 天然契合——既然本质是路由,那不仅可以路由到不同的 token,还可以路由到不同的计算模块。
真正的瓶颈是带宽,不是容量
理解了这些机制,核心结论就一句话:大模型的问题不是 memory size,而是 memory bandwidth。 每个 token 每一步只能访问几十个 memory slot,即使你有一百万 token 的上下文窗口也没用。Long context ≠ long reasoning。
对实际使用的启示
搞清楚这些原理,能直接指导你的 AI 应用设计:
- 构建 RAG 时,检索出来的关键信息尽量放在 prompt 的开头或结尾,别埋在中间
- 设计 Agent prompt 时,系统指令和关键约束放最前面,用户最新输入放最后面,中间塞参考资料
- 别迷信超长上下文窗口,与其一股脑塞十万字进去,不如做好信息筛选和分段处理,让每一段都在模型的"有效视野"内
- 多轮对话场景下,重要信息需要定期"复述"回 prompt,否则几轮之后它就忘了
Transformer 的注意力机制决定了它天生就有"头尾清晰、中间模糊"的特性。接受这个限制,围绕它来设计你的系统,比指望模型自己变聪明靠谱得多。