From Karpathy · Let’s build GPT
GPT 结构精讲
目标不是背名词,而是能手画整条数据流,并说出每个方块的 shape、参数和算力角色。
1. 整模型长什么样
GPT 类语言模型 = 词嵌入 + 位置信息 + N 层 Decoder + LM Head。训练目标:根据前文预测下一个 token(交叉熵)。推理时把预测出的 token 再喂回去,这叫自回归。
形状习惯(务必记住)
tokens: (B, T) # batch, 序列长度
emb: (B, T, C) # C = n_embd / hidden_size
logits: (B, T, vocab) # 训练时常只取最后位置或全序列 CE
| 符号 | 含义 | 量级直觉 |
|---|---|---|
vocab | 词表大小 | 几万(BPE) |
T / block_size | 上下文长度 | 1k–128k+ |
C | 隐层宽度 | 768(小)→ 12288(GPT-3 175B) |
N | Decoder 层数 | 12 → 96+ |
2. 一层 Decoder 内部
现代主流是 Pre-Norm:先 Norm,再子层,再残差相加。Karpathy 原课 GPT-2 风格也是这条路。
为什么要残差? 提供梯度直通路径,深度才堆得动。没有残差,上百层几乎训不动。
3. 训练 vs 推理(同一套权重,两条路径)
4. MLP(FFN)要细到什么程度
GPT-2 风格:
Linear(C → 4C) → GELU → Linear(4C → C)
Llama2 风格(本仓库代码):
gate = SiLU(W1 x)
up = W3 x
out = W2 (gate * up) # SwiGLU;中间宽约 8/3 C
参数与 FLOPs:短序列时 MLP 往往是大头(通道 4×);长序列 Prefill 时 Attention 的 T² 会追上来甚至反超。
5. Norm 与位置编码
- LayerNorm / RMSNorm:稳定激活尺度。Llama 用 RMSNorm(无均值项,更省一点)。
- 绝对位置嵌入(Karpathy 课):可学习
pos_emb[T, C],与 token emb 相加。 - RoPE(Llama):旋转 Q/K,不另加一套大参数表;shape 不变。
6. 一个 Decoder 有几个带参 matmul?
GPT-2/3 口径(飞书自测常用):
- Wq
- Wk
- Wv
- Wo
- MLP 升维
- MLP 降维
合计 6。Llama SwiGLU 是 gate/up/down 三个线性 → Attention 4 + MLP 3 = 7(答之前先说清口径)。
7. 建议怎么学透
- 对照图 1、图 2 默画一遍(不看屏幕)。
- 打开 Attention 精讲,把 Attn 子层抠透。
- 跑
code/01_llama2_decoder.py,打印每个 Linear 的 weight shape。 - 录音 3 分钟:整模型数据流 + 一层里 6/7 个 matmul + 训练/推理差别。
网页是精读版;仓库里
notes/01_*.md 是提纲索引。对外发布请看 发布与变现。