章节 01
导读 / 主楼:从零构建 Mini-GPT:用 PyTorch 手写 Transformer 理解大语言模型本质
一个仅 158K 参数的极简 GPT 实现,完全从零用 PyTorch 构建,通过 Tiny Shakespeare 数据集训练,包含完整的多头注意力、位置编码和前馈网络实现,并配有实时注意力热力图可视化工具。
正文
一个仅 158K 参数的极简 GPT 实现,完全从零用 PyTorch 构建,通过 Tiny Shakespeare 数据集训练,包含完整的多头注意力、位置编码和前馈网络实现,并配有实时注意力热力图可视化工具。
章节 01
一个仅 158K 参数的极简 GPT 实现,完全从零用 PyTorch 构建,通过 Tiny Shakespeare 数据集训练,包含完整的多头注意力、位置编码和前馈网络实现,并配有实时注意力热力图可视化工具。
章节 02
章节 03
在 ChatGPT、Claude 等大语言模型席卷全球的今天,大多数人只是这些黑盒系统的使用者。但真正的理解来自于亲手构建。Mini-GPT 项目展示了一个仅 158K 参数的极简 GPT 实现——它足够小,可以在个人电脑上训练;又足够完整,包含了 Transformer 架构的所有核心组件。
这个项目使用 Tiny Shakespeare 数据集(约 110 万字符)进行训练,目标是让学习者真正理解注意力机制、位置编码、残差连接等关键概念的数学本质,而非仅仅调用 PyTorch 的 nn.Transformer API。
章节 04
Mini-GPT 的架构遵循标准的 Transformer Decoder-only 设计,但进行了极度精简:
输入文本
│
▼
Token Embedding (词表=65, d_model=64)
+
位置编码 (正弦编码, max_len=128)
│
▼
┌─────────────────────────────────┐
│ Transformer Block × 3 │
│ ┌──────────────────────────┐ │
│ │ 多头注意力机制 │ │
│ │ (8 头, d_k=8 每头) │ │
│ └──────────┬───────────────┘ │
│ │ + 残差连接 │
│ Layer Norm │ │
│ │ │
│ ┌──────────▼───────────────┐ │
│ │ 前馈神经网络 │ │
│ │ Linear(64→256)→GELU │ │
│ │ Linear(256→64) │ │
│ └──────────┬───────────────┘ │
│ │ + 残差连接 │
│ Layer Norm │ │
└────────────┼───────────────────┘
│
▼
线性输出头
(d_model=64 → 词表=65)
│
▼
下一字符预测
章节 05
| 参数 | 数值 | 说明 |
|---|---|---|
| d_model | 64 | 嵌入/隐藏层维度 |
| num_heads | 8 | 注意力头数,每头 d_k=8 |
| num_layers | 3 | Transformer 块堆叠数 |
| d_ff | 256 | FFN 中间层维度(标准 4× 扩展) |
| max_len | 128 | 上下文窗口 / 因果掩码长度 |
| vocab_size | 65 | Tiny Shakespeare 中的唯一字符数 |
| 总参数量 | ~158K | 故意设计得很小——可解释性强 |
章节 06
项目从零实现了 Scaled Dot-Product Attention,核心洞察在于:除以 √d_k 可以防止点积值过大导致 softmax 饱和到接近零梯度区域。这个看似简单的缩放因子是注意力机制稳定训练的关键。
章节 07
注意力机制本身对输入顺序是置换不变的。为了注入位置信息而不增加可学习参数,Mini-GPT 采用了正弦位置编码。不同频率的正弦波为模型提供了相对位置的数学表达。
章节 08
残差连接让梯度能够干净地绕过各层,避免梯度消失;层归一化则在每个 Transformer 块前后重新中心化激活值,确保 3 个堆叠块的训练稳定性。