学习 / 神经网络 / 03

神经网络 · 第 03 条 · 训练机制

损失函数与梯度下降

「学得好不好」需要一个数字来衡量。损失函数就是把这个模糊的判断压缩成一个标量,然后交给梯度下降去优化。

难度 入门约 10 分钟前置:1 条更新 2026-09-28

损失函数:把「错」变成一个数

要让机器改进,首先得能度量「现在有多差」。损失函数就是这个度量——它把模型的输出和正确答案之间的差距,压缩成一个数字。

不同任务用不同的损失函数:分类常用交叉熵,回归常用均方误差。选择的原则是:损失函数要和你真正关心的目标一致。如果损失函数度量的是 A,但你在意的是 B,那模型会把 A 优化得很好、B 一塌糊涂。

梯度下降:沿着下坡走

有了损失这个「高度」,就可以想象一个地形图:每个参数组合对应一个高度。训练的目标是走到最低点。

梯度下降的做法很朴素:算出现在位置的坡度,往低的方向走一小步,重复。

学习率是这里最重要的超参数。步子太小,收敛得极慢、还容易卡在半路;步子太大,会在谷底两边来回跳,甚至越跳越高(发散)。大部分训练失败,最后都能追溯到学习率设得不对。
02550751000255075100参数取值损失起点局部最优 / 鞍点真正的最低点学习率太小会卡在半路,太大会在谷底两侧来回跳——大部分训练失败都能追到这里
蓝点是梯度下降的起始位置,箭头是它走的路径。它卡在了黄圈那个局部最优里,没走到绿圈真正的最低点。这不是算法错了——是「只看脚下坡度」这个策略的固有局限,也是动量和随机性存在的理由。

为什么不是简单的下坡

真实情况比「往低处走」复杂得多:

这也是为什么实践中很少用「纯」梯度下降,而是用带动量的方法(积累历史梯度,帮助穿过平坦区域和鞍点)、以及自适应学习率的方法(对不同参数用不同的步长)。

随机性不是缺陷,是特性

实际训练时几乎不会用全部数据算一次梯度,而是用小批量(mini-batch)估计。这让每次迭代快得多,而且梯度里的噪声反而有助于跳出鞍点和尖锐的局部最优。

所以「随机梯度下降」里的随机,不是无奈之举,而是被有意保留的特性。批大小因此成了一个重要的调节旋钮:批越大,梯度越准但计算越重、泛化有时反而变差。

要点回顾
← 前向传播与反向传播 过拟合:模型背答案而不是学规律 →