FDE Times 数据在招 FDE 职位 863▼55 近 7 天在招职位数的变化(同口径比较):不计入本周新开始追踪的公司的职位近 7 天新增 71在招公司 181支持远程 24%美国薪资中位数 $200k招聘最多 Palantir 95
ENVI

前线部署工程师(FDE)的专业媒体

书籍与课程

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

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

分享微博

要点速览

  • 课程共 8 讲:第一讲是 micrograd(2 小时 25 分钟),接着是 5 讲 makemore,然后是 GPT 和 GPT 分词器(2 小时 13 分钟)。课程大纲目前仍标注为“ongoing”。
  • 第一讲只需要基础 Python 和一点高中微积分,但学完整门课需要扎实的 Python 编程能力。
  • 对 FDE 来说,这门课的主要价值在于能向客户解释模型的行为,而不是自己去训练模型。
阶梯图由八根逐级升高的柱子组成:从第 1 讲(micrograd,反向传播,橙色)经过 makemore 系列(第 2 至 6 讲),一直到第 7 讲“Let's build GPT”和第 8 讲“GPT 分词器”,第 8 讲上方标注“持续更新中”。一条从第 1 讲直接跳到第 7 讲的虚线箭头打了 ✕,旁注“不要跳到第 7 讲,否则可能只是在看别人写代码”。第 1、4、8 讲带有编号 1、2、3,下方三张卡片对应同样的编号:梯度就是链式法则、读懂网络的健康状况、分词器独立成层。
“Neural Networks: Zero to Hero”的八讲从基础逐级往上排列。直接跳到 GPT 那一讲,很可能只是在看别人写代码。

第一讲长 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,自己读代码,而不只是看视频。当客户问“为什么”时,你会有答案,因为给出错误答案的那个东西,你亲手写过。

这篇文章对你有帮助吗?

5 个信源
路线图上的下一篇 · 阶段 3: AI 应用这门免费深度学习课,先跑模型再讲数学Jeremy Howard 只要求一年编程经验:第一课在 Kaggle 上做鸟类分类器,九节课都不用自备 GPU。