Skip to content

3.2 Attention 机制的直觉

上一节介绍了 Attention 的基本思路。这一节把它讲得更直观一点。

用图书馆来理解

想象你是一个图书管理员,有人进来问:"苹果公司最新的手机是什么?"

你脑子里在做什么:

  1. 识别关键词:苹果公司、最新、手机
  2. "苹果"这个词同时可以指水果,但结合"公司"和"手机",你知道它指的是 Apple Inc.
  3. 根据这个理解,你去找相关资料

这个过程——根据上下文来理解每个词的意思——就是 Attention 在做的事。


Self-Attention:每个词问所有词"你对我有多重要?"

处理一段文字时,Attention 让每个词都"问"其他所有词:你对理解我有多重要?

"苹果公司发布了新手机"

处理"苹果"时:
  问"公司":  你重要吗? → 非常重要(0.7)→ 意思变成了 Apple
  问"发布":   你重要吗? → 有点重要(0.3)
  问"手机":   你重要吗? → 有点重要(0.2)
  问"了":     你重要吗? → 不重要(0.02)

处理"苹果"时的注意力分布:公司 > 发布 > 手机 >> 其他
→ "苹果" 被理解为科技公司,而不是水果

Multi-Head Attention:从多个角度同时看

一个 Attention 头只能捕捉一种关系。实际的 Transformer 用多个"头"(Multi-Head)同时处理:

  • 第一个头可能在关注语法关系(主语、谓语、宾语)
  • 第二个头可能在关注语义关系(什么是什么)
  • 第三个头可能在关注指代关系(it/they 指的是什么)

所有头的结果最后合并,得到综合的理解。

💡 类比:就像一个团队一起分析一份文件,每个人关注不同的角度——法务关注合规,财务关注数字,技术关注实现——最后综合各人的意见。


为什么长上下文会让注意力"变稀"

当你处理一段话时,注意力需要分配给所有词。假设总注意力是 100%:

短文本(10个词):每个词平均能得到 10% 的注意力
长文本(1000个词):每个词平均只能得到 0.1% 的注意力

当然 Attention 不是均匀分配的,重要的词会得到更多注意力。但文本越长,"重要"的词和"不重要"的词之间的竞争就越激烈,早期内容里的重要信息可能被后期的内容稀释。

这就是为什么:

  • 超长文档里中间部分的信息容易被忽略
  • 重要指令应该放在开头和结尾,不要只放中间

KV Cache:为什么不重复计算

在对话场景里,每次你发新消息,历史消息的 Attention 计算结果其实没变——你说的第一句话的处理结果还是一样的,没必要重算。

KV Cache(键值缓存) 就是把这些历史计算结果缓存起来。名字里的 K(Key)和 V(Value)是 Attention 机制内部的两个中间计算结果——你不需要理解它们的数学含义,只需要知道:缓存了这两个东西,新消息来了就不需要重新处理所有历史,只算新来的这部分。

这大幅提升了对话的响应速度,也降低了成本。


📌 关键结论

  1. Attention 让每个词根据上下文动态调整理解,这是 LLM 能"理解"语义的核心
  2. Multi-Head Attention 同时从多个角度捕捉关系(语法、语义、指代等)
  3. 上下文越长,注意力越稀薄,重要信息要放在开头或结尾
  4. KV Cache 避免重复计算历史,让对话响应更快

下一节:3.3 模型是怎么训练出来的

写给自己的 AI 学习地图