ziyan23/学习路径
Attention Is All You Need
Vaswani et al. · 2017 · NeurIPS
进度
0 / 10
● 给"数学忘得差不多了"的工程师

读懂《Attention Is All You Need》
——一份可以随时回来接着走的路径

先说最大的那个解锁:这篇论文不需要微积分,也不需要懂反向传播。它讲的是前向结构(数据怎么流过去),不是学习过程。这一下砍掉大半门槛——真正要补的数学只有三块,加起来大约 3 小时。

核心一行公式 = 80% 的论文
看懂这行,就算入门了
Scaled Dot-Product Attention · 论文 3.2.1
Attention(Q, K, V) = softmax( QKᵀ / √dk ) · V

注意力就是一次加权平均,而权重是用"相似度"算出来的。 就这么简单。剩下的全是把这件事重复、并行、堆叠起来。

Q — Query
在找什么
K — Key
有什么可以被找到
V — Value
你找到我,我给你什么
QKᵀ
每个 query 和每个 key 的点积 = 相似度矩阵
÷ √dk
缩放,防止 softmax 饱和(见卡点 ②)
softmax
相似度 → 权重(加起来 = 1)
· V
按权重把 value 加权平均
这块你其实已经会了:相关系数就是归一化之后的点积。你算 pairs 的 β、算因子暴露,做的都是"两个向量有多像"。注意力权重本质上就是一个没归一化的相关系数,再过一遍 softmax。
Step 0先定你要哪种"看懂"
路径不同,别选错
级别你能做到要走哪几步时间
A知道它在说什么、为什么是分水岭Step 1 ② + Step 2半天
B 推荐逐行读懂公式和两张图,能给别人讲清楚Step 1 → 48–12 小时
摊在 1–2 周
C从零手写一个能跑的Step 1 → 5B + 约 10 小时
你是工程师,直接奔 B。 下面的 5 步就是 B 的完整路径,Step 5 是 C 的加餐。
路径五步走
勾选会自动保存,随时回来接着走

1补三块数学 —— 就这么多

约 3 小时

① 向量 / 矩阵乘法 + 维度对齐。 整篇论文 90% 的操作就是"这个矩阵乘那个矩阵"。⭐ 看懂维度怎么对上,比会算重要。

② 点积的几何意义 —— 这是全篇的钥匙。 a·b 衡量两个向量有多对齐:方向一致 → 大;垂直 → 0;相反 → 负。

③ softmax。 把一串任意数字变成加起来等于 1 的权重:先 exp(),再各自除以总和。大的变得更大(指数放大),但总量守恒。

⚠️ 不需要:微积分、反向传播、概率论、信息论。第一遍全部跳过。它们是"模型怎么学"的工具,而这篇论文讲的是"模型长什么样"。

3读论文,但别按它的顺序读

2–3 小时

原文编排对初学者不友好——它先讲整体架构,可你还不知道零件是什么。按下面的顺序读,每一节都建立在上一节之上。

1
3.2.1 Scaled Dot-Product Attention — 核心公式,先看这个
2
Figure 2 — 两张结构图,对着公式看
3
3.2.2 Multi-Head Attention — 为什么要多头(见卡点 ③)
4
3.1 + Figure 1 — 现在才看整体架构,你已经认识每个零件了
5
3.5 Positional Encoding — ⭐ 全篇最深刻的一节(见卡点 ④)
6
3.3 Position-wise FFN — 很简单,两层全连接
7
Section 4 "Why Self-Attention" — 论证部分。看完你才知道它在跟谁比、赢在哪

4⭐ 手算一遍 —— 这步不能省

1 小时

d=4、序列长度 3 的玩具例子,把 softmax(QKᵀ/√d)V 从头算一次。你是工程师,用 numpy 十几行就行——不要用现成库,自己写矩阵乘法那几行。

# 最小骨架,把 ... 填完就懂了 Q = X @ Wq K = X @ Wk V = X @ Wv S = Q @ K.T / np.sqrt(d_k) # 相似度矩阵 (3×3) A = np.exp(S) / np.exp(S).sum(-1, keepdims=True) out = A @ V # 加权平均

然后做一件事:把输入的三行打乱顺序,再算一遍。 你会发现输出只是跟着换了行、值完全没变——这就是卡点 ④ 说的"置换不变",亲手撞见比读十遍都管用。

这是"读过"和"懂了"的分界线。 跳过这步的人,三周后会发现自己只记得几个名词。

5从零手写一个(C 级加餐,可选)

约 10 小时

Karpathy 的《Let's build GPT: from scratch, in code, spelled out》——约 2 小时视频,从 bigram 基线一路搭到多头注意力 + 残差 + LayerNorm,终点就是 nanoGPT 的内核。跟着敲,别只看。

⭐ 顺带一提:Karpathy 现在在 Anthropic,也在你的 x-feed watchlist 里。

预警五个最容易卡住的地方
读之前先看一眼,能省几小时

Q / K / V 为什么要三个?

如果一个向量既当"我在找什么"又当"我是什么",模型就没法区分「搜索者」和「被搜索者」两个角色。三个投影矩阵(Wq / Wk / Wv)让它能把这两件事分开学。

√dk 为什么要除?

维度越高,点积的方差越大 → 数值变得很大 → softmax 饱和成 one-hot → 梯度接近 0,训不动。除以 √dk 把方差拉回 1。

⚠️ 论文只用一个脚注提这件事,但工程上非常实在——很多"为什么训不动"的坑都在这类缩放上。

Multi-Head 是干嘛的?

一次注意力只能表达一种关注模式。多头 = 并行跑多组,各自学不同的关系(有的学句法、有的学指代)。

不是让它更强,是让它能同时表达多种关系。 这个区分很关键——很多人把多头理解成"堆算力",那是误读。

⭐ Positional Encoding 为什么必须有 —— 全篇最深刻的一点

注意力是置换不变的:把输入顺序打乱,输出集合完全一样。它根本不知道"顺序"这回事。 所以位置必须手动注入进去。

"attention 天生没有顺序概念"这件事本身,才是理解这个架构的关键。 Step 4 手算时打乱输入试一次,你会亲眼看到。

Decoder 的 mask 在挡什么?

不让它看到未来的词,否则训练时等于抄答案。实现上就是把相似度矩阵的右上三角设成 −∞,softmax 之后自动变 0。

⚠️一个必须知道的时效提醒
论文 2017,今天已经不完全长这样
论文里的做法(2017)今天的主流
Encoder–Decoder 双塔(为翻译任务设计)Decoder-only(GPT 系)。所以你会发现论文左半边跟现在的 LLM 关系不大
正弦位置编码RoPE(旋转位置编码)为主
Post-LayerNormPre-LayerNorm(更稳定)
那一行核心注意力公式没变。所有后来的东西都建在它上面
所以这篇论文仍然值得读——不是因为它描述了今天的模型,而是因为它是所有后续的地基。读懂它,后面所有变体你都能顺着看。
⭐⭐最后:这对你不只是"学个知识"
从公式直接推到你的持仓
从 3.2.1 节到 HBM 需求,中间只有两步
注意力矩阵是 n × n 的(n = 上下文长度)

上下文翻倍 → 计算量和显存占用变四倍。 再加上推理时要缓存每一层的 K 和 V(KV cache),长上下文 = 线性增长的高带宽显存需求

所以
"为什么长上下文推动 HBM 需求"不是叙事,是那一行公式的直接后果
对照
memory-supercycle 里跟的那条链,源头就在论文 3.2.1 节
⭐ 顺带一条判别力:读懂之后,再看到"某模型跑分多少"这类主张,你会自然问出"这是模型的分还是 harness 的分"——因为你知道架构本身能做什么、不能做什么。
资料总表
全部链接集中在这里
资料类型时长用在哪一步
3Blue1Brown 线性代数的本质视频系列~1.5hStep 1 · 第 1–4 集(矩阵乘法)+ 第 9 集(点积)
The Illustrated Transformer图解长文~1hStep 2 · 建立骨架,有中译
3b1b Ch.5 · 什么是 GPT视频27minStep 2 · 可视化直觉
3b1b Ch.6 · 注意力机制视频26minStep 2 · Q/K/V 的最佳可视化
Attention Is All You Need论文15 页Step 3 · 按页内给的顺序读
The Annotated Transformer代码笔记~2hStep 4 · Harvard NLP,逐行代码对照论文
Neural Networks: Zero to Hero课程~10hStep 5 · 其中「Let's build GPT」是本篇的直接实现
nanoGPT代码库Step 5 · Step 5 视频的终点