模块 08 · 从零弄懂大模型

神经网络基础

从一条直线开始,手写梯度下降和反向传播,训练出第一个小网络,再换成 PyTorch 识别手写数字,并亲眼看到过拟合和对付它的办法。

各课

  1. 01
    用 numpy 做线性回归

    从一个最简单的问题出发:根据面积预测房价。用一条直线当模型,用均方误差衡量好坏,再用最笨的办法把九万条直线挨个试一遍,看清楚"训练"到底在找什么。

    35 分钟 · 入门
  2. 02
    梯度下降

    不再盲目地试,而是每一步都算出往哪个方向改参数、改多少。从斜率讲起理解导数,手算梯度,写出梯度下降的循环,再亲眼看看学习率太小、太大和数据没有标准化时会发生什么。

    45 分钟 · 入门
  3. 03
    手写反向传播

    写一个几十行的类,让每个数都记住自己是怎么算出来的,就能从损失出发,用链式法则把梯度一路传回每个参数。用数值求导核对它,再用它训练一个小网络学会异或。

    60 分钟 · 进阶
  4. 04
    PyTorch 入门

    把前三课手写的东西用 PyTorch 再做一遍:张量、自动求导、nn.Module、优化器。每一步都和手写的版本对照,算出的梯度、训练出的参数完全一样。

    45 分钟 · 入门
  5. 05
    识别手写数字

    第一个真正的分类任务:让网络认出 8×8 像素的手写数字。讲清楚分类和回归的区别,softmax 和交叉熵在做什么,为什么要分小批训练,最后用混淆矩阵看它错在哪里。

    45 分钟 · 进阶
  6. 06
    过拟合和怎么对付它

    网络在训练集上全对,在没见过的数据上却不见长进,这叫过拟合。故意制造一次过拟合,再试权重衰减、dropout、早停和增加数据这几种办法,看真实的结果里哪一个最管用。

    40 分钟 · 进阶

第二部分"从零弄懂大模型"从这里开始。

第一部分里,大模型对你来说是一个接口:发文字过去,拿文字回来。这一部分要打开它,弄明白它是怎么训练出来的。这个模块先打地基:不管模型有多大,训练它的核心步骤都一样,都是算损失、算梯度、更新参数。这个模块用最小的例子把这几步亲手做一遍。

不需要 GPU,所有代码在普通笔记本电脑的 CPU 上几秒钟就能跑完。数学只用到高中的导数,并且每个公式都会用代码和数值验证。

为什么是这个顺序

先用 numpy 手写,再换 PyTorch。第 1 到 3 课不用任何深度学习框架:用一条直线理解"训练在找什么",用梯度下降理解"怎么找",用反向传播理解"梯度从哪里来"。有了这些,第 4 课的 PyTorch 就不是黑箱,每个函数你都知道它背后在做什么。

后两课处理真实的数据。第 5 课做一个分类任务,引出 softmax 和交叉熵,它们在下一个模块会原样用在 GPT 上。第 6 课讲过拟合,这是训练任何模型都会遇到的问题。

学完的标准

  • 能说出"训练"在做什么:找一组参数,让损失尽可能小。
  • 能手写梯度下降的循环,并说出学习率太小、太大时分别会怎样,以及为什么要标准化输入。
  • 能用链式法则解释反向传播,并用数值求导核对一段自己写的梯度计算。
  • 能用 PyTorch 写出完整的训练循环:模型、损失函数、优化器、清零梯度、反向传播、更新参数。
  • 能说出分类任务为什么用 softmax 和交叉熵,以及 10 分类的网络刚开始训练时损失大约是多少。
  • 能从训练日志里认出过拟合,并说出几种应对办法各自的作用和局限。

本模块的代码