# 不训练模型的 FDE，也该从零写一遍 GPT

> Karpathy 的免费课程从 150 行的自动求导引擎一路讲到分词器，直接跳到第七讲就失去了意义。

原文: https://fdetimes.net/zh/books-courses/karpathy-neural-networks-zero-to-hero/

第一讲长 2 小时 25 分钟，学完时你手里会有一个约 100 行的自动求导（autograd）引擎，外加一个约 50 行的神经网络库。这就是 micrograd，也是“Neural Networks: Zero to Hero”的起点。Andrej Karpathy 对这门课的描述是：用代码从零构建神经网络。

这门课不教你调用现成的模型，而是教你自己写一个。官方 GitHub 仓库称，课程从最基础的部分讲起。

对于转型做前线部署工程师（FDE）的开发者，这种学法值得投入时间。设想客户问你，模型刚才为什么会做出奇怪的举动。即使你从不亲手训练模型，要给出正确的解释，也得明白 API 底下是什么。

## 八讲内容，按顺序学

karpathy.ai 上的官方页面按清晰的顺序列出了课程大纲。第一讲构建 micrograd，用来讲解反向传播。第二到第六讲是 makemore 系列：从字符级语言模型讲到 MLP，再到激活值、梯度和 BatchNorm，然后手写反向传播，最后是 WaveNet。

第七讲“Let's build GPT”最为知名。第八讲构建 GPT 分词器（tokenizer），时长 2 小时 13 分钟。大纲末尾写着“ongoing”，之后可能还会有新课。

建议不要直接跳到第七讲。大纲是从基础逐层往上搭的，跳着学很容易变成看别人敲代码。就连配套 GPT 课程的 nanoGPT 仓库也建议先看 Zero To Hero，了解 GPT 和语言模型的背景。

## 适合谁学？数学要很好吗？

两个官方来源给出的先修要求略有不同，这个差别很有参考价值。仓库说，第一讲只需要基础 Python，以及对高中微积分的模糊印象。官方页面对整门课的要求更高：扎实的 Python 编程能力，以及导数、高斯分布等入门数学知识。

如果你已经用 Python 做了两三年的正式工作，就够格了。数学可以边学边补。更难的是耐心：视频都很长，需要你一步步跟着敲代码。

每一讲都配有练习，列在 YouTube 视频的简介里。不要跳过。只看视频不做练习，就像只读部署文档却从不动手部署。

## 观点一：梯度不过是链式法则

第一个值得记住的观点来自 micrograd。不妨自己算个小例子：取 f = a·b + c，其中 a = 2，b = -3，c = 10，于是 f = 4。根据链式法则，f 对 a 的导数是 b，即 -3；对 b 的导数是 a，即 2；对 c 的导数是 1。

整个反向传播，就是把这种计算沿着计算图逐个节点反向执行一遍。亲手算出这三个数之后，你就不会再把训练当成魔法。

**要点:** 只有能从零写出一个模型，才算真正理解它。

## 观点二：学会读懂网络的健康状况

makemore 第三部分讲激活值、梯度和 BatchNorm，培养的习惯与 FDE 的工作非常接近：深入系统内部去诊断，而不是靠猜。在断定模型“学得不好”之前，先检查信号是否真的在各层之间流动。

用 tanh 算个小例子。如果某个神经元的输入是 5，输出就是 tanh(5) ≈ 0.9999，局部导数 1 − tanh² 只有约 0.0002。经过这个神经元反向传回的梯度要乘以一个接近零的数，因此即便损失还很高，它之前的权重也几乎不动。

处于这种状态的神经元称为饱和。如果它对数据中的每个样本都饱和，就几乎得不到有意义的梯度，实际上已经“死掉”了。检测方法很简单：画出每一层输出的直方图，统计绝对值大于 0.99 的数值所占比例。

如果某一层的大部分数值都堆在 −1 和 1 附近，先怀疑权重初始化或输入尺度，再去怀疑架构。BatchNorm 是把激活值分布拉回梯度仍能流动的区间的一种办法。

初学者常犯三个错误：只盯着损失曲线，不看每一层的激活值和梯度；权重初始化过大，网络从第一步就饱和；还没做任何测量，就急着改架构或调高学习率。

到了客户现场，这个习惯可以原样沿用。数据管道产出的结果不理想时，第一件事是逐层测量，然后才是改写提示词或更换模型。

## 观点三：分词器是独立的一层

第八讲专门讲分词器，代码以 minbpe 仓库的形式发布，课程的文字版放在 lecture.md 中。这一讲的要点是：模型看到的不是文本，而是 token；文本如何切分成 token，由神经网络之外的一个步骤决定。

设想越南的一位客户问：内容相同，为什么越南语提示词比英文提示词消耗更多 token？学完第八讲，你可以打开分词器，给客户看他们的文本被切成了哪些片段，并用他们自己的数据来解释。FDE 正是靠这样的回答赢得客户信任。

## 把课程变成简历上的证据

简历上写“看过 Zero to Hero”几乎没有价值。有价值的是一个仓库：里面有你自己重写的 micrograd、做完的 makemore 练习，以及一份用自己的话讲解每个部分的 README。

阅读 FDE 岗位描述时，留意有关理解模型原理或调试模型行为的要求：那正是展示这个仓库的地方。

学完八讲，顺理成章的下一步是打开配套课程的两个仓库 nanoGPT 和 minbpe，自己读代码，而不只是看视频。当客户问“为什么”时，你会有答案，因为给出错误答案的那个东西，你亲手写过。

**本周动手试试:**

- 看完第一讲，不复制粘贴，自己重新敲一遍 micrograd，再手算一个小表达式的梯度来核对
- 至少完成一道 YouTube 视频简介中的练习，把答案推送到 GitHub，并附上一份用自己的话讲解的 README
- 阅读 minbpe 仓库中的 lecture.md，挑几句工作中的真实数据试着分词，可以是越南语或其他非英语语言

## 信源

- [Neural Networks: Zero to Hero](https://karpathy.ai/zero-to-hero.html)

- [nn zero to hero (GitHub)](https://github.com/karpathy/nn-zero-to-hero)

- [karpathy/micrograd (GitHub)](https://github.com/karpathy/micrograd)

- [karpathy/nanoGPT (GitHub)](https://github.com/karpathy/nanoGPT)

- [karpathy/minbpe (GitHub)](https://github.com/karpathy/minbpe)
