Appearance
Attention
Attention 的核心不是“给词算相关度”,而是完成动态信息路由:
对当前 token,决定从哪些可访问位置获取多少信息,并把这些位置承载的内容聚合成新的上下文化表示。
核心公式:
其中 M 表示可选的 Mask;普通双向 Self-Attention 可以没有 Causal Mask,自回归 Decoder 需要 Causal Mask。
整条链可以先压缩成:
text
Q / K
→ 从哪里取、取多少
V
→ 真正被取走和聚合的内容
Attention Output
→ 聚合上下文后的新 token representation1. 从 Hidden Representation 到 Q / K / V
设当前层输入:
n:token 数量;d_model:每个 token 当前 hidden representation 的维度。
单个 Head 中:
若:
则:
经典 Multi-Head Attention 中通常有:
2. 参数和 Activation 必须分开
text
模型长期学习和保存:
W_Q, W_K, W_V
一次 Forward 根据输入动态产生:
Q, K, V同一 Head 中,各 token 共享同一组投影参数:
虽然参数相同,但由于:
所以不同 token 会得到不同的 q/k/v。
下一 Transformer Layer 也不会“更新上一层的 V”,而是根据上一层得到的新 hidden representation,用这一层自己的投影参数重新计算新的 Q/K/V。
3. Q / K / V 的职责
对于第
与第
做点积:
得到匹配分数。
经 Scaling、Mask、Softmax 后:
最终:
所以:
text
Q/K
→ routing weights
V
→ routed content为什么 K 与 V 分开?
用于判断:
“这个位置是否值得关注?”
的特征,不一定等于:
“关注以后应该传递什么内容?”
的特征。
因此模型可以分别学习:
text
如何判断相关性
≠
相关以后传递什么表示这也是不要把 Key 当成“返回内容”的原因。
4. Attention Score Matrix 的维度
如果:
则:
所以:
矩阵乘法可以记成:
text
Q: token × feature
K^T: feature × token
feature 维被点积消掉
↓
Attention Score: token × token第
表示第 i 个 Query 与第 j 个 Key 的 raw compatibility score。
未经 Softmax 前更准确地称为:
- attention score;
- attention logit;
- compatibility score。
Softmax 后才是归一化的 attention weight。
5. 为什么使用点积
对于:
点积:
将两个向量压缩成一个标量匹配分数。
这里的“匹配”不是人工固定的语义相似度。因为
6. 为什么除以
Scaling 的目的不是形式上的“归一化”,而是控制点积 logits 的数值尺度。
为了理解尺度,采用经典简化假设:各维近似独立,均值为 0、方差为 1。
若每个乘积项方差约为 1,则:
因此标准差约为:
例如:
text
d_k = 64
→ score 标准差量级约 8
d_k = 1024
→ score 标准差量级约 32维度越高,未经缩放的 logits 越容易被拉开。
除以:
后:
从而使输入 Softmax 的尺度更稳定。
为什么这会影响 Softmax?
Softmax:
例如:
text
[1, 2]
→ Softmax ≈ [0.27, 0.73]
[10, 20]
→ Softmax ≈ [0, 1]指数函数会放大 logit 差异。若 logits 过大,分布容易过度尖锐,进入饱和区域,使优化更加困难。
因此:
text
d_k 增大
→ 点积方差增大
→ logits 尺度增大
→ Softmax 更容易过度尖锐
÷ sqrt(d_k)
→ 稳定 score 尺度上述独立同分布假设只是解释设计动机的简化模型,不代表训练后的真实 Q/K 必须满足精确分布假设。
7. Softmax:把 Score 变成路由权重
定义:
按每个 Query 对应的一行做 Softmax:
对第 i 行:
因此一行可以理解为:
当前 token 把自己的信息获取权重如何分配给所有可访问位置。
例如:
最终会聚合:
8. Causal Mask
Decoder-only 自回归模型需要保证当前 token 不能访问未来 token。
3 个 token 的允许访问关系:
text
T1 → T1
T2 → T1, T2
T3 → T1, T2, T3可以使用:
实际计算:
因为:
被 Mask 的位置经 Softmax 后权重为 0。
注意:
Mask 表示“是否允许访问”,不是“数学上是否相关”。
即使一个未来 Key 与当前 Query 的原始匹配分数很高,也必须被因果规则屏蔽。
训练阶段完整真实序列已经存在,如果没有 Causal Mask,当前位置就可能读取未来真实 token,造成未来信息泄漏;实际生成时这些未来 token 尚未产生。
9. 最小手算:完整走一遍 Attention
设 3 个 token,
Step 1:Score
Step 2:Scaling
Step 3:Causal Mask
Step 4:Softmax
近似得到:
Step 5:聚合 V
因此:
最终:
这里
10. Self-Attention 与 Cross-Attention
Self-Attention
Q/K/V 来自同一序列表示:
用于序列内部 token 间的信息交互。
Cross-Attention
Q 与 K/V 来自不同表示来源。
经典 Encoder-Decoder 中可以理解为:
text
Q ← Decoder representation
K/V ← Encoder outputDecoder 根据自己的 Query,从 Encoder 表示中选择和聚合相关信息。
11. Multi-Head Attention
每个 Head 拥有不同的投影子空间:
不同 Head 通常拥有不同的:
- Q/K/V 表示;
- Attention Score;
- Attention Weight;
- 上下文聚合结果。
因此 Multi-Head 不是“同一个 Attention 重复算多遍再平均”。
更准确的理解是:
多个 Head 在不同可学习表示子空间中并行执行信息路由与内容聚合。
不要过度解释成“某个 Head 固定负责语法、另一个固定负责实体”,这种职责并非人工预先指定。
12. Multi-Head 的维度
若:
则单个 Head:
单 Head Attention Score:
单 Head 输出:
8 个 Head 拼接:
之后进入 Output Projection
工程实现中通常会将多个 Head 的投影合并成较大的矩阵乘法,再 reshape 成多个 Head,而不是逐 Head 执行大量小矩阵乘法。
13. 高频误区
text
错误:W_Q / W_K / W_V 与 Q/K/V 是同一类对象
正确:W 是参数,Q/K/V 是当前 Forward 的 activationtext
错误:QK^T 的尺寸仍是 n × d_k
正确:(n × d_k)(d_k × n) = n × ntext
错误:K 是实际被返回的内容
正确:K 参与匹配,V 承载被加权聚合的内容text
错误:Attention Output 用来更新原来的 V
正确:O 是新产生的 contextualized representationtext
错误:Multi-Head 是重复计算相同 Attention
正确:不同 Head 使用不同可学习投影子空间14. 一句话闭环
下一步:
03_transformer-block.md
Mistakes:
05_Mistakes/AI.md
Interview QA:
06_Interview/AI_QA/Transformer.md