注意力机制Attention
Attention 是 Transformer 的核心机制。它让模型在处理某个 Token 时,可以动态关注上下文中更相关的位置。
# 1. 直观理解
人在理解一句话时,不会平均关注每个词,而是会根据当前语义关注关键信息。
例如:
小明把书放进书包,因为它太重了。
理解“它”时,需要关注前面的“书”,而不是“书包”。Attention 的目标就是让模型学会这种上下文关联。
# 2. Q、K、V 模型
Attention 常用 Query、Key、Value 来解释:
| 概念 | 类比 | 作用 |
|---|---|---|
| Query | 我现在想找什么 | 当前 Token 的查询向量 |
| Key | 我能被什么匹配 | 每个 Token 的匹配向量 |
| Value | 我实际提供什么信息 | 每个 Token 的内容向量 |
Query 与所有 Key 计算相似度
-> 得到注意力权重
-> 按权重汇总 Value
-> 得到新的上下文表示
# 3. Self-Attention
Self-Attention 表示序列内部自己和自己做注意力计算。每个 Token 都可以从上下文中的其他 Token 获取信息。
Token1 ─┬─> Token1
Token2 ─┼─> Token2
Token3 ─┼─> Token3
Token4 ─┴─> Token4
每个位置都根据上下文重新计算表示
在语言模型生成中,通常会使用因果掩码,避免模型在预测当前 Token 时看到未来 Token。
# 4. Multi-Head Attention
多头注意力是把注意力分成多个头并行计算。不同头可以学习不同关系。
| 关注类型 | 示例 |
|---|---|
| 语法关系 | 主语和谓语 |
| 指代关系 | “它”指向哪个名词 |
| 主题关系 | 当前句子和前文主题 |
| 格式关系 | 列表、代码、JSON 结构 |
多头机制提升了模型同时捕捉多种关系的能力。
# 5. Attention 对应用的影响
| 应用问题 | Attention 相关原因 |
|---|---|
| 长上下文中漏掉信息 | 相关内容太远或被噪声干扰 |
| RAG 放入太多文档效果变差 | 注意力被不相关上下文分散 |
| Prompt 前后冲突导致输出异常 | 模型需要在多个指令之间权衡 |
| 结构化输出被破坏 | 格式约束没有在上下文中足够明确 |
# 6. 工程建议
- 把最重要的指令和资料放在更明确的位置。
- RAG 不要盲目塞入大量 Chunk,要做召回过滤和重排。
- 长文档任务要先分段处理,再汇总。
- 对高优先级约束使用清晰编号和固定输出格式。
# 7. Tips 快问快答
Q:Attention 是不是等于人类注意力?
A:不是。它是数学上的权重分配机制,只是直观上类似“关注重点”。
Q:为什么上下文越长不一定越好?
A:上下文越长,噪声越多,模型可能更难关注真正关键的信息,同时成本和延迟也会上升。
Q:RAG 为什么需要重排?
A:重排可以把更相关的内容放到上下文前面,减少不相关内容干扰模型注意力。
上次更新: 2026/06/25, 17:53:09