← 课程库
语言模型与架构模块三 · 注意力机制计算18 分钟

手算一次注意力:小 N 逐格算

不写代码,把每个数字都算出来,再也不会搞混

学完这节你能:
  • 在 3 词、2 维的小例子上手算完整注意力
  • 算一次 softmax
  • 验证权重之和为 1、输出是 Value 的加权平均

抽象的公式,落到 3 个词、2 维向量上就一点也不玄。我们只算「第 1 个词」对全句的注意力输出。

设定(3 个词,dₖ=2)
q₁ = [1, 0]
k₁ = [1, 0], k₂ = [0, 1], k₃ = [1, 1]
v₁ = [2, 0], v₂ = [0, 2], v₃ = [1, 1]
  1. 打分 q₁·kⱼ:s₁=1, s₂=0, s₃=1。
  2. 缩放 /√2 ≈ /1.414:s ≈ [0.707, 0, 0.707]。
  3. softmax:exp≈[2.03, 1.00, 2.03],和≈5.06 → 权重≈[0.40, 0.20, 0.40](和为 1 ✓)。
  4. 加权求和:0.40·[2,0] + 0.20·[0,2] + 0.40·[1,1] = [0.8+0+0.4, 0+0.4+0.4] = [1.2, 0.8]。

🔑 读出直觉:q₁ 和 k₁、k₃ 更像(点积大),所以输出更偏向 v₁、v₃。输出 [1.2, 0.8] 就是三个 Value 按注意力权重的加权平均——注意力本质是「带权重的信息汇总」。

💡 自检两条铁律:① softmax 后权重必须全为正且和为 1;② 输出一定落在各 Value 的凸包内(不会超出最大/最小 Value 的范围)。哪条不满足,就是算错了。

自测softmax 之后,三个注意力权重满足:
自测变式(换数字再算):两个词打分 s=[3, 1](dₖ=1,忽略缩放),softmax 后第一个词的注意力权重约为:
// 带走一句话

手算三步:点积打分→√dₖ 缩放+softmax→加权求和;输出是 Value 的加权平均,权重恒正且和为 1。

独立练习

做到这些,才算完成本节

  1. 把正文例题中的全部数值替换后独立重算,并用每行概率和为 1 做检查。
  2. 分别对错误维度和正确维度执行 softmax,比较输出含义与形状。
  3. 替换例题中的数值,从头独立算一遍。
  4. 用数量级、边界值或反向计算检查结果是否合理。
学习记录

记录本节阅读进度

建议先独立回答自测。读完记录不等于已经掌握。

继续下一课
← 上一课
注意力机制:Query-Key-Value 与 softmax
下一课 →
自注意力 vs 交叉注意力

学完不要急着赶进度:去练习自测,或完成对应的阶段实验