跳转到内容

03 Self-Attention:让每个 Token 看上下文

  • 理解 Q、K、V 的角色。
  • 会手算一次 scaled dot-product attention。
  • 知道 GPT 为什么需要 causal mask。

Self-Attention 像一次“上下文投票”。当前 token 会问:我应该关注前面哪些 token?每个 token 根据相关性分配权重,再把别人的信息按权重加权求和。

核心公式:

Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) V
  • Q 是 query,表示“我想找什么”。
  • K 是 key,表示“我有什么特征可以被匹配”。
  • V 是 value,表示“如果你关注我,可以拿走哪些信息”。
  • causal mask 会屏蔽未来 token,避免训练时偷看答案。

Harvard Annotated Transformer 逐行解释 attention。build-nanogpt 则从 GPT-2 角度实现 causal self-attention。

源码:labs/03-attention/index.mjs

这个实验手写 Q/K/V、缩放点积、softmax 和 causal mask。

运行:

Terminal window
npm run lab:03

观察第一行 attention 权重:因为 causal mask,第一个 token 不能看第二和第三个 token。

  • Attention 权重不是稳定可解释的“思维链”,只能说明一次前向计算里的加权关系。
  • Multi-head 不是重复做一样的事,而是让不同头学习不同关系。
  • GPT 的 attention 是 decoder-only 的 causal attention,不是完整 encoder-decoder Transformer。