神经网络基础
从一条直线开始,手写梯度下降和反向传播,训练出第一个小网络,再换成 PyTorch 识别手写数字,并亲眼看到过拟合和对付它的办法。
各课
- 01用 numpy 做线性回归
从一个最简单的问题出发:根据面积预测房价。用一条直线当模型,用均方误差衡量好坏,再用最笨的办法把九万条直线挨个试一遍,看清楚"训练"到底在找什么。
35 分钟 · 入门 - 02梯度下降
不再盲目地试,而是每一步都算出往哪个方向改参数、改多少。从斜率讲起理解导数,手算梯度,写出梯度下降的循环,再亲眼看看学习率太小、太大和数据没有标准化时会发生什么。
45 分钟 · 入门 - 03手写反向传播
写一个几十行的类,让每个数都记住自己是怎么算出来的,就能从损失出发,用链式法则把梯度一路传回每个参数。用数值求导核对它,再用它训练一个小网络学会异或。
60 分钟 · 进阶 - 04PyTorch 入门
把前三课手写的东西用 PyTorch 再做一遍:张量、自动求导、nn.Module、优化器。每一步都和手写的版本对照,算出的梯度、训练出的参数完全一样。
45 分钟 · 入门 - 05识别手写数字
第一个真正的分类任务:让网络认出 8×8 像素的手写数字。讲清楚分类和回归的区别,softmax 和交叉熵在做什么,为什么要分小批训练,最后用混淆矩阵看它错在哪里。
45 分钟 · 进阶 - 06过拟合和怎么对付它
网络在训练集上全对,在没见过的数据上却不见长进,这叫过拟合。故意制造一次过拟合,再试权重衰减、dropout、早停和增加数据这几种办法,看真实的结果里哪一个最管用。
40 分钟 · 进阶
第二部分"从零弄懂大模型"从这里开始。
第一部分里,大模型对你来说是一个接口:发文字过去,拿文字回来。这一部分要打开它,弄明白它是怎么训练出来的。这个模块先打地基:不管模型有多大,训练它的核心步骤都一样,都是算损失、算梯度、更新参数。这个模块用最小的例子把这几步亲手做一遍。
不需要 GPU,所有代码在普通笔记本电脑的 CPU 上几秒钟就能跑完。数学只用到高中的导数,并且每个公式都会用代码和数值验证。
为什么是这个顺序
先用 numpy 手写,再换 PyTorch。第 1 到 3 课不用任何深度学习框架:用一条直线理解"训练在找什么",用梯度下降理解"怎么找",用反向传播理解"梯度从哪里来"。有了这些,第 4 课的 PyTorch 就不是黑箱,每个函数你都知道它背后在做什么。
后两课处理真实的数据。第 5 课做一个分类任务,引出 softmax 和交叉熵,它们在下一个模块会原样用在 GPT 上。第 6 课讲过拟合,这是训练任何模型都会遇到的问题。
学完的标准
- 能说出"训练"在做什么:找一组参数,让损失尽可能小。
- 能手写梯度下降的循环,并说出学习率太小、太大时分别会怎样,以及为什么要标准化输入。
- 能用链式法则解释反向传播,并用数值求导核对一段自己写的梯度计算。
- 能用 PyTorch 写出完整的训练循环:模型、损失函数、优化器、清零梯度、反向传播、更新参数。
- 能说出分类任务为什么用 softmax 和交叉熵,以及 10 分类的网络刚开始训练时损失大约是多少。
- 能从训练日志里认出过拟合,并说出几种应对办法各自的作用和局限。