
- 解释误差与损失的区别
- 说清梯度下降的更新方向
- 判断学习率过小或过大的表现
先遇见一个错误
实际用了 7 分钟,模型预测了 4 分钟
预测 − 答案;负数表示预测偏小。
只看相差多远,不保留方向。
较大的错误会被放大。
单个样本的“预测 − 答案”可以为正或负;损失函数会把错误转换成适合比较和优化的数值,通常希望越小越好。
给训练一个目标
损失函数是一把统一的评分尺
距离 3 公里 → 预计 4 分钟
真实时间为 7 分钟
平方误差为 9
准确率回答“有多少次判断正确”,损失提供更细的数值差异,通常更适合指导参数一步步更新。
不同任务使用不同尺子
损失函数要与任务和错误代价匹配
看平均相差多远
|预测 − 答案|含义直观,相比平方误差不容易被少数极端错误过度放大。
放大较大的错误
(预测 − 答案)²曲线平滑、便于优化,常见于回归;对异常值更敏感。
评价分类概率
−log(正确类别的概率)正确类别概率越低,惩罚越大。后续分类项目会再次使用。
训练中常对一批样本的损失取平均。损失的绝对数值只有结合具体定义、数据范围和基线才有意义,不能跨任务直接比较。
互动实验 · 手动找参数
调一调权重,让预测线靠近样本
模型:预计时间 = 距离 × w + b
预测与答案仍有明显距离。
图中每条竖线表示一个样本的预测与答案之间的残差。调整参数时,残差整体缩短,均方误差就会下降。
从手动尝试到计算方向
梯度告诉我们,往哪边会升得最快
参数增大,损失在下降
梯度下降会继续增大参数。
附近比较平坦
可能接近低点,也可能只是平坦区域。
参数增大,损失在上升
梯度下降会减小参数。
一次更新新参数 = 旧参数 − 学习率 × 梯度
梯度指向损失上升最快的方向。为了降低损失,我们向相反方向迈一步。真实网络会同时为大量参数计算各自的梯度。
互动实验 · 自动调参数
让梯度下降一步步寻找低点
梯度为负,下一步会增大权重。
| 步骤 | 权重 | 梯度 | 损失 |
|---|---|---|---|
| 0 | -1.00 | -2.81 | 4.22 |
同一方向,不同步长
学习率决定每一步走多远
需要更多更新步骤,也可能在有限训练时间内还没走到合适区域。
具体数值与数据尺度、优化器和网络结构有关。
损失可能忽高忽低,甚至越来越大。
常见做法包括在验证集上比较配置、训练过程中逐步降低学习率,以及使用 Adam 等自适应优化器。它们仍然需要监控损失和泛化表现。
可选代码实践 · 不依赖第三方库
用 Python 训练一个权重
x = [0.25, 0.50, 0.75, 1.00]
y = [1.50, 2.00, 2.50, 3.00]
weight, bias = -1.0, 1.0
learning_rate = 0.8
for step in range(8):
predictions = [weight * value + bias for value in x]
errors = [pred - answer for pred, answer in zip(predictions, y)]
loss = sum(error ** 2 for error in errors) / len(errors)
gradient = 2 * sum(error * value for error, value in zip(errors, x)) / len(x)
print(step, round(weight, 3), round(loss, 4))
weight = weight - learning_rate * gradient- 第 1–4 行
准备归一化后的距离、真实时间、初始参数和学习率。
- predictions
使用当前权重完成一次前向预测。
- loss
计算所有样本的平均平方误差。
- gradient
计算损失相对权重的梯度;这里直接写出 MSE 的求导结果。
- 最后一行
沿梯度反方向迈一步。下一轮会用更新后的权重重新预测。
知识检查与总结
把“发现错误”和“减少错误”连起来
已回答 0 / 4 题 · 当前答对 0 题
- 误差描述单次预测差异,损失为训练提供可优化目标。
- 损失函数要与任务、数据特点和错误代价相匹配。
- 梯度描述损失对参数变化的局部方向和速度。
- 梯度下降沿负梯度更新参数,学习率控制步长。
- 训练损失下降不等于新数据表现一定更好。
下一课 · COURSE 05
反向传播:错误如何逐层传回
下一课会把“一个参数的梯度”扩展到多层网络,理解每一层怎样获得调整依据。