不训练模型的 FDE,也该从零写一遍 GPT
Karpathy 的免费课程从 150 行的自动求导引擎一路讲到分词器,直接跳到第七讲就失去了意义。
要点速览
- 课程共 8 讲:第一讲是 micrograd(2 小时 25 分钟),接着是 5 讲 makemore,然后是 GPT 和 GPT 分词器(2 小时 13 分钟)。课程大纲目前仍标注为“ongoing”。
- 第一讲只需要基础 Python 和一点高中微积分,但学完整门课需要扎实的 Python 编程能力。
- 对 FDE 来说,这门课的主要价值在于能向客户解释模型的行为,而不是自己去训练模型。
第一讲长 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,自己读代码,而不只是看视频。当客户问“为什么”时,你会有答案,因为给出错误答案的那个东西,你亲手写过。
这篇文章对你有帮助吗?
感谢你的反馈!