0.4 导数与梯度:往哪边走能下山
蒙眼下山
想象你被蒙着眼睛放在一座山上,任务是走到谷底。你看不见全局,能依靠的只有一件事:脚底板的感觉——踩一踩,就知道哪边高、哪边低、有多陡。
策略其实很简单:感受坡度,朝下坡方向迈一步;再感受,再迈一步。只要每步都往低处走,总能走进某个谷底。
现在把这个故事翻译回机器学习(0.1 节的语言):
- 山的高度 = 模型的损失(错得有多离谱);
- 你站的位置 = 模型当前的参数取值;
- 脚下的坡度 = 梯度:它告诉你参数往哪边调、损失会下降得最快;
- 迈一步 = 更新一次参数。
「迈多大步」也有个名字,叫学习率。于是整个「学习」动作浓缩成一句话:
这就是梯度下降——从 0.1 节那条小直线到 GPT,所有模型的训练发动机都是它。
亲自下一次山
下面的山谷里有一颗小球(它就是「参数」)。红色虚线是它脚下的切线——坡度的可视化。
请按顺序做三个实验,每个都会撞见大模型训练中的真实事故现场:
实验 ①:正常下山。 保持学习率 0.1,点「▶ 自动下山」。小球一步步走到左边谷底,「坡度 f′(x)」逐渐归零——坡度为零意味着到底了,走不动了,训练收敛。
实验 ②:步子太大,当场起飞。 点「↺ 重置(右坡出发)」,把学习率拉到 1.2 以上,再「▶ 自动下山」。小球不但不下山,反而越荡越高,最后💥飞出山谷——因为每一步迈得比山谷还宽,一脚跨到了对面更高的坡上。真实训练里这叫 loss 爆炸,工程师只能调小学习率、从上一个存档重来。
实验 ③:掉进小坑出不来。 点「↺ 重置(右坡出发)」,学习率调回 0.1 左右,自动下山。小球停在了右边的浅谷——那是局部最低点:四周都是上坡,但它不是全场最低。只会「往低处走」的算法,永远出不去。再点「↺ 换左坡出发」对比:起点不同,终点也不同。
学习率的两难由此清晰可见:太大会飞出山谷,太小则挪一万步也到不了谷底(你可以把学习率调到 0.01 感受一下什么叫「望山跑死马」)。真实训练中,学习率是最重要、也最难调的超参数之一。
图里的「山」只有 1 个维度(横轴),而 GPT 的「山」有几千亿个维度——每个参数都是一个可以移动的方向,没人能画出它的样子。有趣的是,维度一高,实验 ③ 的恐怖程度反而下降:要在几千亿个方向上同时都是上坡才算真正的局部最低点,这种点非常罕见(更常见的是「鞍点」——有的方向上坡、有的方向下坡,绕一绕就能溜走)。此外,真实训练每一步只用一小批数据估算坡度,自带的「手抖」噪声反而常常帮小球晃出小坑。
小结
- 梯度 = 坡度:告诉你每个参数往哪边调能让损失下降最快。
- 梯度下降:新位置 = 旧位置 − 学习率 × 坡度,重复到坡度趋近零。
- 学习率太大 → 发散(loss 爆炸);太小 → 收敛极慢;起点不同 → 可能落进不同的谷。
- 真实的损失「山」有几千亿维,局部最低点不如 1 维直觉中可怕,鞍点才是常见麻烦。
延伸阅读
- 3Blue1Brown:《梯度下降,神经网络如何学习》(B 站官方中字)——本节的动画放大版。
- 第 0 章 · 小结与自测:四节直觉一次串联,测测你能不能出师。