跳到正文

第 L1 层

ML / DL 基础

这一层

这一层解决什么

亲手训过一个网络,并且能解释它为什么学会了、为什么会过拟合、指标为什么这样选。L2 的一切——预训练的 loss、微调的划分、评测的指标——都在用本层的词汇;没有它,LLM 的训练代码读起来只是 API 调用。完成标准三条:从零训一个小网络、讲清过拟合与泛化、说出评估指标为什么这样选。

各节点怎么连成一条线

本层是一条「训练循环」展开成的线:

  • 经典机器学习:从样本里学:词汇表。训练 / 验证 / 测试划分、损失、模型族、指标。Google 的速成课把这些用交互模块讲一遍。
  • 损失与反向传播:循环的中间两步。损失函数为什么是交叉熵或 MSE,反向传播为什么只是链式法则在计算图上的反向模式。跟着 micrograd 自己写一个 autograd,这一层就通了。
  • PyTorch:自己训一个网络:把上一步换成框架。张量、autograd、训练循环,之后读任何训练代码都不陌生。
  • 泛化:解释曲线。训练和验证 loss 为什么会分叉、偏差–方差怎么权衡、正则化在做什么,以及深度网络特有的双下降。
  • 经典结构:CNN、RNN / LSTM、残差:Transformer 之前的三个发明各解决了什么——CNN 的权重共享、LSTM 的门控、残差的梯度通路——为的是看懂 Transformer 保留了什么、扔掉了什么。

先修关系:classical-ml → backprop-and-loss → pytorch → generalization / classic-architectures。backprop-and-loss 直接接 L0 的 优化 和 信息论。

给资深工程师的减法

  • 经典机器学习不用学全:SVM、朴素贝叶斯、聚类可以跳过,留下线性模型、树和集成、指标。
  • 不用把 PyTorch 当框架学,把它当「会自动求导的 numpy」,训练循环手写一次就够。
  • CNN 和 LSTM 不需要会调,只需要会讲它们各自的归纳偏置是什么;视觉任务的细节留到真用的时候。
  • Goodfellow 的书只翻 ch. 5,当词典用。
  • 跳过 Keras、TensorFlow 和任何高层训练库——它们隐藏的正是本层要看见的东西。

推荐前十

按阅读顺序;每条链到下面的节点。

  1. 1

    Machine Learning Crash Course — Google free

    先把损失、划分、指标这套词汇过一遍 → 经典机器学习:从样本里学

  2. 2
  3. 3

    Calculus on Computational Graphs: Backpropagation free

    半小时讲清为什么是反向模式而不是前向模式 → 损失与反向传播

  4. 4
  5. 5

    Learn the Basics — PyTorch tutorials free

    框架自己的话讲张量、autograd 和训练循环,当手册 → PyTorch:自己训一个网络

  6. 6
  7. 7

    Deep Double Descent: Where Bigger Models and More Data Hurt free

    大模型为什么不按教科书过拟合,面试追问时多一层 → 泛化

  8. 8

    Dive into Deep Learning free

    CNN、ResNet、RNN、LSTM 各解决了上一代什么毛病,带代码 → 经典结构:CNN、RNN / LSTM、残差

  9. 9

    Understanding LSTM Networks free

    四张门控图,理解注意力替代了什么的最短路径 → 经典结构:CNN、RNN / LSTM、残差

节点

经典机器学习:从样本里学

半衰期: 稳定

误差训练时间 →在这里停训练数据新数据过拟合

语言模型之前就有同一个想法,只是尺寸更小:模型从例子里学,靠的是降低损失——一个表示它错得多厉害的数。坑在任何尺寸下都一样:拿训练过的数据测试,它看起来比实际好;训得太久,它背下例子而不是从中学习(过拟合)。在小的表格数据问题上学会这些,一次训练只要几秒。它是后面一切的词汇表:LLM 的 loss、evals 的指标、微调的数据划分都在用这些词。

先修
数学:用到时再补
之后
泛化 · PyTorch:自己训一个网络
  • Machine Learning Crash Course — Google free

    course — The fundamentals — loss, generalisation, splits, classification metrics — in short interactive modules, updated by Google in 2024.

复现项目: A baseline you can defend — Train logistic regression and gradient-boosted trees on one tabular dataset with a proper train, validation and test split, and explain one case where accuracy is the wrong metric.

落选 (3)
  • An Introduction to Statistical Learning (ISLP) — 很好,但偏差–方差和交叉验证两章放在 泛化 节点更合适,模型族部分和 Google 的课重叠。
  • Raschka, Machine Learning with PyTorch and Scikit — Learn — 付费且厚,动手部分 Google 的课和 PyTorch:自己训一个网络 已覆盖。
  • scikit — learn User Guide — 查 API 用,不是学习路径。

损失与反向传播

半衰期: 稳定

ml-mathoptimizationinformation-theorybackprop-and-lossclassic-architecturespytorchtransformer

一个训练循环四步:前向算输出、用损失函数算差距、反向传播算梯度、优化器更新参数。本节点讲中间两步:损失函数为什么是交叉熵或 MSE(它们各自假设了什么分布)、反向传播为什么只是链式法则在计算图上的反向模式。它把 优化 的梯度和 信息论 的交叉熵接成一条可以跑的代码,是 PyTorch:自己训一个网络 里 loss.backward() 那一行的全部内容。L1 的复现项目挂在这里:自己训一个小网络,把训练 / 验证曲线画出来,泛化 接着解释曲线为什么会分叉。

先修
数学:用到时再补 · 优化 · 信息论
之后
经典结构:CNN、RNN / LSTM、残差 · PyTorch:自己训一个网络 · Transformer
  • The spelled-out intro to neural networks and backpropagation: building micrograd free

    video · 2.5 小时视频 + 3 小时跟写 · only 0:00–2:25:52 — 一百多行 Python 写出一个标量 autograd 引擎,再用它训一个小 MLP;跟完一遍,反向传播对你就不再是「框架帮我做的事」,而是能自己写出来、能对拍的代码,正是本层「从零训一个小网络」。

  • Calculus on Computational Graphs: Backpropagation free

    article · 30 分钟 — 把反向传播讲成计算图上的前向模式与反向模式微分,一页讲清为什么反向模式对「多输入、单输出」的 loss 便宜;面试被问「为什么不用前向微分」时答案就在这里。

复现项目: 从零训一个小网络并画出训练 / 验证曲线 — 只用张量运算(不用 nn.Module 和 optimizer)写一个两层 MLP,在 MNIST 或 make_moons 上训练,每个 epoch 记录训练集和验证集 loss,画成一张曲线图;先让它过拟合(曲线分叉),再加 weight decay 或 dropout 让分叉合拢,产出是两张图和一段解释。

落选 (3)
  • 3Blue1Brown「Backpropagation calculus」 — 系列第四集,和 数学:用到时再补 的导入视频同源,看完第一集会自然接上。
  • CS231n notes「Backpropagation, Intuitions」 — 讲得好,但 Olah 那篇更短且覆盖了前向 / 反向模式的对比。
  • Goodfellow 等《Deep Learning》ch. 6.5 — 正式但密,micrograd 跟写一遍收获更多。

PyTorch:自己训一个网络

半衰期: 稳定谁在招

前向model(x)lossloss_fn(out, y)反向loss.backward()更新参数opt.step()每个 batch

PyTorch 是大多数模型被写出来和训练的方式。核心是一个短循环:一批数据过模型、算损失、让 autograd 算出每个权重该怎么动、走一步。亲手写一遍这个循环,再从一个极小的网络一路搭到一个小 GPT,结构就不再只是一张图。它也是从零写 GPT 和微调的前提。

先修
经典机器学习:从样本里学 · 数学:用到时再补 · 损失与反向传播
之后
经典结构:CNN、RNN / LSTM、残差 · 微调:教它你的任务 · Transformer
  • Neural Networks: Zero to Hero — Andrej Karpathy free

    course — Backprop to a GPT in PyTorch, one video at a time — the fastest way for an engineer to read and debug model code.

  • Learn the Basics — PyTorch tutorials free

    docs — Tensors, autograd, datasets and the training loop in the framework's own words; a reference you will return to.

复现项目: Train a small GPT and change one thing — Reproduce a small model with nanochat or nanoGPT on a modest dataset, change one design choice, and show the ablation with its loss curves.

落选 (3)
  • fast.ai Practical Deep Learning for Coders — 自顶向下、先用高层库出结果;本层要的是看见训练循环本身,Zero to Hero 更对路。
  • Dive into Deep Learning — 已作为 经典结构:CNN、RNN / LSTM、残差 的候选,这里不重复。
  • PyTorch 官方「60 Minute Blitz」 — 和 Learn the Basics 内容重叠,后者更新。

泛化

半衰期: 稳定

classical-mlgeneralization

训练集上的 loss 低不等于模型有用;泛化讲的是训练误差与测试误差之间的那道缝从哪来、怎么量、怎么缩小。核心词汇:偏差–方差、容量、正则化(weight decay、dropout、早停、数据增强)、交叉验证,以及深度网络特有的双下降现象。它是 经典机器学习:从样本里学 里「划分数据集」这件事的理论版,也是读懂 损失与反向传播 项目画出来的曲线的钥匙;到了 预训练与 scaling,scaling laws 讨论的本质仍是数据量、参数量和泛化误差的关系。

先修
经典机器学习:从样本里学
  • An Introduction to Statistical Learning with Applications in Python free

    book · only ch. 2–5 — 第 2 章把偏差–方差权衡和训练 / 测试误差的关系讲成一张图,第 5 章讲交叉验证为什么能估计泛化误差;这两章是「讲清过拟合与泛化」的标准答案。

  • Deep Double Descent: Where Bigger Models and More Data Hurt free

    paper · 1 小时 — 经典的 U 形曲线在过参数化的深度网络上会再降一次;读过它,面试里被追问「大模型参数远多于数据为什么不过拟合」时,你能给出比教科书多一层的回答。

复现项目: 把过拟合做出来再修好 — 拿 [[backprop-and-loss]] 项目里的小网络,依次把参数量调到 10×、100×,画出训练 / 验证误差随参数量的曲线,看看能否在小数据集上复现双下降;写一段话解释曲线每一段的原因。

落选 (3)
  • Goodfellow 等《Deep Learning》ch. 5, 7 — 全面,但 ISLP 两章更短且带代码;ch. 5 已作为 经典机器学习:从样本里学 的候选。
  • Zhang 等「Understanding deep learning requires rethinking generalization」(2017) — 提出问题的名篇,但双下降那篇给出了更可操作的图景。
  • Bishop, Pattern Recognition and Machine Learning ch. 1 — 贝叶斯视角扎实,读起来太慢。

经典结构:CNN、RNN / LSTM、残差

半衰期: 稳定

backprop-and-losspytorchclassic-architecturesmultimodal

Transformer 之前的三个关键发明,各解决了一个具体问题:CNN 用局部连接和权重共享把图像的平移不变性写进结构,参数量从全连接的百万级降到可训;RNN 让网络处理变长序列,LSTM 的门控解决了它梯度消失、记不住远处的毛病;残差连接让梯度能直接穿过几十上百层,没有它就没有深网络,也没有 Transformer 里每个子层外面那条 skip。学这些不是为了用它们,而是为了看懂 Transformer 保留了什么(残差、归一化)、扔掉了什么(循环)、为什么。多模态 里的视觉编码器仍是卷积或 ViT,本节点是它的前置。

先修
损失与反向传播 · PyTorch:自己训一个网络
之后
多模态
  • Dive into Deep Learning free

    book · only ch. 7–10 — CNN、现代 CNN(含 ResNet)、RNN、现代 RNN(含 LSTM)四章,每一章先讲它要解决上一代的什么毛病,再给可运行的 PyTorch 实现;读完能把「每种结构各解决了什么」讲成一条线。

  • Understanding LSTM Networks free

    article · 30 分钟 — 用四张门控图讲清 LSTM 为什么能记住远处的信息而普通 RNN 不能;它是理解「Transformer 用注意力替代了什么」的最短路径。

  • CS231n Convolutional Neural Networks for Visual Recognition — course notes: Convolutional Networks free

    course · 1 小时 — 卷积、步长、填充、感受野、参数共享,每个概念配一张可以数格子的图;读完能算出任意一层的输出尺寸和参数量,这是看懂任何视觉骨干(包括多模态里的视觉编码器)的基本功。

复现项目: 三种结构跑同一个任务 — 在一个小的序列分类数据集上分别训 MLP、1D CNN、LSTM,记录参数量、训练时间和验证准确率,写一段话说明每种结构的归纳偏置在数据里对应什么。

落选 (3)
  • He 等「Deep Residual Learning for Image Recognition」(2015) — 残差的原论文,但 d2l ch. 8 已经把它讲清并给了实现。
  • Goodfellow 等《Deep Learning》ch. 9 — 10 — 内容对,但没有代码,且没有残差。
  • fast.ai Practical Deep Learning for Coders — 自顶向下用高层库,看不到结构本身。

完成标准自测

  • 不用 nn.Module 和 optimizer,只用张量运算训一个两层 MLP 到合理的验证准确率。
  • 画出训练 / 验证 loss 曲线,指出过拟合从哪个 epoch 开始,并用一种正则化手段让分叉合拢。
  • 解释一个场景里准确率为什么是错的指标,该换成什么、为什么。
  • 用三句话各说清 CNN、LSTM、残差连接解决了什么问题。
  • 说出偏差–方差权衡和双下降的关系。

复现项目从零训一个小网络并画出训练 / 验证曲线:先让它过拟合,再修好,产出两张图和一段解释(挂在 损失与反向传播)。

作者的笔记原稿。