注意力机制(Attention Mechanism)入门
📅 主题:从直觉到公式,理解 Transformer 的核心
一、为什么需要注意力机制
在早期 NLP 模型(RNN/LSTM)里,模型需要按顺序处理文本,长距离依赖信息容易衰减。例如:
- 句首的人名,可能影响句尾代词指代;
- 一段很长的上下文里,真正关键的信息只占几处。
注意力机制的核心思路是:
在生成某个位置输出时,模型不平均看待所有输入,而是为不同位置分配不同权重,重点关注最相关的 token。
一句话:让模型“有重点地看上下文”。
二、直观理解:查询、键、值
注意力通常用三组向量表示:
- Q(Query):当前要解决的问题(“我现在在找什么”)
- K(Key):每个位置的索引标签(“我能提供什么”)
- V(Value):每个位置真正携带的信息(“我的内容是什么”)
流程可以理解为:
- 用 Query 去和所有 Key 做匹配,得到相关性分数;
- 对分数做归一化(softmax)得到权重;
- 用这些权重对所有 Value 加权求和,得到当前输出。
所以,注意力本质上是一个**可学习的软检索(soft retrieval)**过程。
三、核心公式(Scaled Dot-Product Attention)
Transformer 中最常用的是缩放点积注意力:
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V
逐项解释:
QK^T:计算 Query 与每个 Key 的相似度(打分矩阵)/ sqrt(d_k):缩放,避免维度高时点积过大导致 softmax 过于尖锐softmax(...):转为概率分布(权重和为 1)... V:对 Value 做加权求和得到输出
为什么要除以 sqrt(d_k)
当向量维度 d_k 变大时,点积数值方差增大,softmax 可能进入饱和区,梯度变小、训练不稳定。
缩放后数值更平稳,训练更容易。
四、自注意力(Self-Attention)
在 Self-Attention 中,Q、K、V 都来自同一序列(同一批 token 的线性变换)。
这意味着每个 token 都可以和序列中所有 token 交互,得到“上下文增强”的表示。
优势:
- 并行计算友好(相比 RNN 的时间步依赖)
- 能直接建模长距离依赖
- 每层都能重组上下文信息
这也是 Transformer 能在长文本理解上表现强的重要原因。
五、多头注意力(Multi-Head Attention)
单头注意力只能在一个子空间里建模关系。
多头注意力做法是:
- 把 Q/K/V 投影到多个子空间(多个 head);
- 每个 head 独立计算注意力;
- 拼接各 head 输出,再做线性变换。
好处:
- 不同 head 可以关注不同关系(语法、语义、位置、指代等)
- 表达能力更强
- 信息融合更丰富
可以把它理解为:让模型从多个视角同时“看句子”。
六、注意力与位置编码
注意力本身对输入顺序不敏感(集合操作)。
因此 Transformer 需要 Positional Encoding(位置编码) 提供顺序信息:
- 告诉模型“谁在前谁在后”
- 帮助区分同词不同位置的语义作用
没有位置编码,模型只能看到 token 集合,很难理解语序。
七、复杂度与工程挑战
标准自注意力对长度为 n 的序列,计算复杂度和显存开销大致是 O(n^2)。
序列越长,代价增长越快,这也是长上下文系统的核心瓶颈之一。
常见优化方向:
- 稀疏注意力(只关注局部或选定位置)
- 线性注意力(近似
O(n)) - KV Cache(推理阶段复用历史 K/V)
- 分块/滑窗策略
八、在 LLM 应用中的意义
注意力机制直接影响:
- 上下文理解能力:能否抓住关键证据
- 长文本表现:跨段引用、指代、总结能力
- 工具调用与 Agent 决策:是否能从复杂上下文中选对步骤
- RAG 效果:注入多个检索片段时,模型能否聚焦关键片段
因此,在 Prompt、RAG、Agent 场景中,理解注意力机制有助于解释模型“为什么答成这样”。
九、小结
- 注意力机制的本质是:按相关性对上下文做加权聚合。
- 核心公式是
softmax(QK^T / sqrt(d_k))V,缩放项用于稳定训练。 - Self-Attention 让每个 token 与全局交互,多头机制让模型多视角建模。
- 注意力本身不含位置信息,需配合位置编码。
- 标准注意力有
O(n^2)成本,长上下文场景需工程优化。
掌握注意力机制,是理解 Transformer 与现代大模型行为的第一步。