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)) VQ是 query,表示“我想找什么”。K是 key,表示“我有什么特征可以被匹配”。V是 value,表示“如果你关注我,可以拿走哪些信息”。causal mask会屏蔽未来 token,避免训练时偷看答案。
参考项目里的对应实现思路
Section titled “参考项目里的对应实现思路”Harvard Annotated Transformer 逐行解释 attention。build-nanogpt 则从 GPT-2 角度实现 causal self-attention。
最小代码实验
Section titled “最小代码实验”源码:labs/03-attention/index.mjs
这个实验手写 Q/K/V、缩放点积、softmax 和 causal mask。
运行命令与预期输出
Section titled “运行命令与预期输出”运行:
npm run lab:03观察第一行 attention 权重:因为 causal mask,第一个 token 不能看第二和第三个 token。
- Attention 权重不是稳定可解释的“思维链”,只能说明一次前向计算里的加权关系。
- Multi-head 不是重复做一样的事,而是让不同头学习不同关系。
- GPT 的 attention 是 decoder-only 的 causal attention,不是完整 encoder-decoder Transformer。