Appearance
3.2 Attention 机制的直觉
上一节介绍了 Attention 的基本思路。这一节把它讲得更直观一点。
用图书馆来理解
想象你是一个图书管理员,有人进来问:"苹果公司最新的手机是什么?"
你脑子里在做什么:
- 识别关键词:苹果公司、最新、手机
- "苹果"这个词同时可以指水果,但结合"公司"和"手机",你知道它指的是 Apple Inc.
- 根据这个理解,你去找相关资料
这个过程——根据上下文来理解每个词的意思——就是 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 机制内部的两个中间计算结果——你不需要理解它们的数学含义,只需要知道:缓存了这两个东西,新消息来了就不需要重新处理所有历史,只算新来的这部分。
这大幅提升了对话的响应速度,也降低了成本。
📌 关键结论
- Attention 让每个词根据上下文动态调整理解,这是 LLM 能"理解"语义的核心
- Multi-Head Attention 同时从多个角度捕捉关系(语法、语义、指代等)
- 上下文越长,注意力越稀薄,重要信息要放在开头或结尾
- KV Cache 避免重复计算历史,让对话响应更快
下一节:3.3 模型是怎么训练出来的