胡慧华
菜单
首页人工智能机器学习深度学习智能体项目实践关于我
跳至课程正文
← 返回深度学习课程

DEEP LEARNING · COURSE 04

损失函数,
与梯度下降。

模型先知道自己错了多少,才有调整的方向。
这一课,从一次错误走到一步参数更新。

基础进阶约 35–40 分钟9 个学习环节
发光轨迹沿误差曲面逐步下降的梯度下降概念图
本课你将能够
  • 解释误差与损失的区别
  • 说清梯度下降的更新方向
  • 判断学习率过小或过大的表现
01

先遇见一个错误

实际用了 7 分钟,模型预测了 4 分钟

假设我们用配送距离预测送达时间。模型给出一个数值,历史订单提供真实答案。第一步不是立刻改参数,而是先描述两者相差多少。
预测 4.0答案 7.0
有方向的误差-3.00

预测 − 答案;负数表示预测偏小。

绝对误差3.00

只看相差多远,不保留方向。

平方误差9.00

较大的错误会被放大。

误差保留方向,损失服务于训练

单个样本的“预测 − 答案”可以为正或负;损失函数会把错误转换成适合比较和优化的数值,通常希望越小越好。

02

给训练一个目标

损失函数是一把统一的评分尺

训练数据有许多样本,每条预测都可能有不同方向和大小的错误。损失函数把它们汇总,让模型知道当前这组参数总体表现如何。
01 · 预测用当前参数计算

距离 3 公里 → 预计 4 分钟

02 · 比较与真实答案对照

真实时间为 7 分钟

03 · 损失得到一个训练目标

平方误差为 9

关键区别

准确率回答“有多少次判断正确”,损失提供更细的数值差异,通常更适合指导参数一步步更新。

03

不同任务使用不同尺子

损失函数要与任务和错误代价匹配

回归预测数值,分类预测类别。即使是同一任务,也可能根据异常值、类别不均衡等情况选择不同形式。
MAE · 平均绝对误差

看平均相差多远

|预测 − 答案|

含义直观,相比平方误差不容易被少数极端错误过度放大。

MSE · 均方误差

放大较大的错误

(预测 − 答案)²

曲线平滑、便于优化,常见于回归;对异常值更敏感。

交叉熵

评价分类概率

−log(正确类别的概率)

正确类别概率越低,惩罚越大。后续分类项目会再次使用。

训练中常对一批样本的损失取平均。损失的绝对数值只有结合具体定义、数据范围和基线才有意义,不能跨任务直接比较。

04

互动实验 · 手动找参数

调一调权重,让预测线靠近样本

四条历史订单满足“每增加 1 公里,时间增加 2 分钟,并额外需要 1 分钟准备”。先凭直觉调节权重和偏置,再查看最佳参数。

模型:预计时间 = 距离 × w + b

配送距离与时间的拟合图距离(公里)分钟
当前均方误差 · MSE10.80

预测与答案仍有明显距离。

观察竖线

图中每条竖线表示一个样本的预测与答案之间的残差。调整参数时,残差整体缩短,均方误差就会下降。

05

从手动尝试到计算方向

梯度告诉我们,往哪边会升得最快

把参数想象成横轴、损失想象成纵轴,就得到一条损失曲线。梯度是当前位置的斜率,既包含方向,也包含局部变化的快慢。
梯度为负

参数增大,损失在下降

梯度下降会继续增大参数。

梯度接近 0

附近比较平坦

可能接近低点,也可能只是平坦区域。

梯度为正

参数增大,损失在上升

梯度下降会减小参数。

一次更新新参数 = 旧参数 − 学习率 × 梯度

为什么要减去梯度?

梯度指向损失上升最快的方向。为了降低损失,我们向相反方向迈一步。真实网络会同时为大量参数计算各自的梯度。

06

互动实验 · 自动调参数

让梯度下降一步步寻找低点

这次固定偏置为 1,只训练权重 w。每点击一次,页面都会用当前梯度更新参数,并重新计算损失。
损失随权重变化的曲线与当前参数位置权重 w损失第 0 步
权重 w-1.00
梯度-2.81
损失4.22

梯度为负,下一步会增大权重。

最近的参数更新
步骤权重梯度损失
0-1.00-2.814.22
07

同一方向,不同步长

学习率决定每一步走多远

学习率不是模型从数据中自动学到的权重,而是训练前设定并在验证过程中选择的超参数。
学习率较小下降稳定,但可能很慢

需要更多更新步骤,也可能在有限训练时间内还没走到合适区域。

学习率合适较快且稳定地接近低点

具体数值与数据尺度、优化器和网络结构有关。

学习率过大跨过低点,震荡或发散

损失可能忽高忽低,甚至越来越大。

实际训练不会只试三个固定数值

常见做法包括在验证集上比较配置、训练过程中逐步降低学习率,以及使用 Adam 等自适应优化器。它们仍然需要监控损失和泛化表现。

08

可选代码实践 · 不依赖第三方库

用 Python 训练一个权重

下面的代码与互动实验使用同一个目标:拟合 y = 2x + 1。每一轮计算预测、损失、梯度,再更新权重。
gradient-descent.py
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. 第 1–4 行

    准备归一化后的距离、真实时间、初始参数和学习率。

  2. predictions

    使用当前权重完成一次前向预测。

  3. loss

    计算所有样本的平均平方误差。

  4. gradient

    计算损失相对权重的梯度;这里直接写出 MSE 的求导结果。

  5. 最后一行

    沿梯度反方向迈一步。下一轮会用更新后的权重重新预测。

09

知识检查与总结

把“发现错误”和“减少错误”连起来

完成四个问题,再回看一次训练更新中各部分的职责。

已回答 0 / 4 题 · 当前答对 0 题

01损失函数最主要的作用是什么?
02梯度为正时,想让损失下降,参数通常向哪个方向调整?
03学习率过大可能发生什么?
04训练损失很低就能说明模型在新数据上一定好吗?
  1. 误差描述单次预测差异,损失为训练提供可优化目标。
  2. 损失函数要与任务、数据特点和错误代价相匹配。
  3. 梯度描述损失对参数变化的局部方向和速度。
  4. 梯度下降沿负梯度更新参数,学习率控制步长。
  5. 训练损失下降不等于新数据表现一定更好。

下一课 · COURSE 05

反向传播:错误如何逐层传回

下一课会把“一个参数的梯度”扩展到多层网络,理解每一层怎样获得调整依据。

继续下一课 ↗