机器学习模型 · 从一个完整案例学会训练

线性回归

从 7 辆汽车的数据出发,先写出预测方程,再定义“错了多少”,最后让梯度下降自动找到合适的权重和偏置。读完后,你会看懂模型训练真正更新了什么。

40 分钟 纯学习时间4 个连续小节无测试与互动练习
数据特征 x、标签 y
→
模型预测 ŷ = wx + b
→
评价损失 L(y, ŷ)
→
训练降低损失、更新参数
学完后,你能够
  • 区分特征、标签、预测、权重、偏置、参数和超参数。
  • 手算一次线性预测,并说明权重正负与大小代表什么。
  • 比较 MAE、MSE 与 RMSE,按离群值和业务代价选择指标。
  • 说清梯度下降的一次完整迭代,并从损失曲线判断训练状态。
01
预计 10 分钟

线性回归与模型方程

线性回归要解决的是:当标签是一个连续数值时,能不能用输入特征的加权和来预测它?例如根据汽车重量预测燃油效率,根据房屋面积预测房价。

1.1 先认识训练数据

一行数据叫一个样本。在这个案例中,每行是一辆汽车:重量是已知输入,也就是特征;每加仑汽油能行驶多少英里是希望模型预测的标签。

汽车重量 x(千磅)燃油效率 y(MPG)
A3.5018
B3.6915
C3.4418
D3.4316
E4.3415
F4.4214
G2.3724
汽车重量越大,燃油效率通常越低,最佳拟合线呈下降趋势
每个圆点是一辆汽车。直线不是手画出来的,而是训练算法从样本中学出的“整体趋势”。
先抓住一个直觉

点不可能都落在线上,因为现实还受排量、路况和发动机等因素影响。回归追求整体误差尽量小,不要求死记每个样本。

1.2 方程中每个符号都在做什么

ŷ = b + w₁x₁
线性回归方程中预测、偏置、权重和特征的位置
训练会更新 w 和 b;原始特征 x 与标签 y 来自数据,不会被模型“学出来”。
x

特征 feature

模型接收到的输入。本例是汽车重量。

y

标签 label

训练数据中已知的正确答案。本例是真实 MPG。

ŷ

预测 prediction

模型算出的答案。帽子表示它是估计值。

w

权重 weight

输入每增加 1 单位,预测大约改变多少。

b

偏置 bias

x 为 0 时的基准预测,也控制整条线的上下位置。

w, b

参数 parameter

模型在训练过程中自动找到的数值。

1.3 手算一次预测

假设训练得到 w = −4.6、b = 34,且重量单位是“千磅”。预测一辆 4,000 磅汽车时,输入要写成 x = 4:

代入ŷ = 34 + (−4.6 × 4)
→
相乘ŷ = 34 − 18.4
→
结果ŷ = 15.6 MPG
  • w 为负:重量增加时,预测 MPG 降低,表示负相关。
  • |w| = 4.6:重量每增加 1 千磅,预测 MPG 平均下降 4.6。
  • b = 34:它负责基准位置。x = 0 在真实汽车范围之外,因此这里不应把 b 当成有现实意义的“零重量汽车油耗”。

1.4 多特征模型仍是同一件事

ŷ = b + w₁x₁ + w₂x₂ + ··· + wₙxₙ

每增加一个特征,就增加一个“特征 × 权重”项。预测 MPG 时可以同时输入重量、排量、马力、汽缸数和加速时间。每个权重表示:在其他特征保持不变时,该特征改变 1 单位对预测造成的影响。

重量 x₁对应 w₁
排量 x₂对应 w₂
马力 x₃对应 w₃
加速 x₄对应 w₄
权重不能脱离单位比较

“千磅”和“磅”表示同一重量,但数值相差 1,000 倍,对应权重也会缩放。判断特征重要性时,要先关注单位、标准化和特征相关性。

02
预计 10 分钟

损失:怎样衡量预测错误

模型需要一个明确目标才能学习。损失函数把预测与真实答案的差距变成一个数;训练就是调整 w 和 b,让这个数尽可能小。

2.1 残差是有方向的,损失只关心距离

残差 e = y − ŷ

真实值 24、预测值 23.1,残差是 +0.9;预测值若是 24.9,残差是 −0.9。两个预测错得一样远。直接把正负残差相加会互相抵消,所以损失函数通常取绝对值或平方。

数据点与回归线之间的竖直距离代表残差
一个样本的竖直距离是残差;整批数据的损失是这些距离经过绝对值或平方后的汇总。

2.2 五个常见名称,其实只有两种核心做法

名称公式回答的问题特点
L1 损失Σ |y − ŷ|全部绝对误差共多大?随误差线性增长
MAE(1/N) Σ |y − ŷ|平均错多少?与标签同单位,较抗离群值
L2 损失Σ (y − ŷ)²全部平方误差共多大?大误差被显著放大
MSE(1/N) Σ (y − ŷ)²平均平方误差是多少?优化平滑,单位变成平方
RMSE√MSE典型误差量级是多少?与标签同单位,仍重罚大误差
MAE

误差 1、2、8

(1 + 2 + 8) ÷ 3 = 3.67

离群误差按原大小计入
MSE

误差 1、2、8

(1² + 2² + 8²) ÷ 3 = 23

误差 8 平方后变成 64,影响很大

2.3 跟着公式算一遍

使用上一节的模型 ŷ = 34 − 4.6x。一辆 2,370 磅汽车的 x 是 2.37,真实 MPG 为 24:

  1. 先预测:ŷ = 34 − 4.6 × 2.37 ≈ 23.1
  2. 算残差:e = 24 − 23.1 = 0.9
  3. 算单样本 L2:e² = 0.9² = 0.81

若有 N 个样本,就分别计算平方误差,全部相加再除以 N,得到 MSE。注意:0.81 是单个样本的平方误差,不是整份数据集的 MSE。

2.4 MAE 还是 MSE?看你怎样对待大错误

更适合 MAE 的情况
  • 数据有明显异常记录,不想让它支配模型。
  • 业务希望直接解释“平均错多少单位”。
  • 大误差的代价大致线性增长。
更适合 MSE / RMSE 的情况
  • 大错误的业务代价远高于小错误。
  • 离群值是真实且重要的情况,模型应主动照顾。
  • 希望利用平滑可导的目标稳定优化。
实务判断

先问“错 10 单位是不是错 5 单位的两倍严重?”如果明显不止两倍,平方误差通常更贴近代价。RMSE 适合报告结果,MSE 常适合训练。

03
预计 10 分钟

梯度下降:模型怎样学参数

我们已经有模型方程和损失函数。现在的问题是:怎样自动找到让损失较小的 w 和 b?梯度下降会反复预测、量错、找方向、改参数。

梯度下降依次预测、计算损失、计算梯度和更新参数
一次“预测 → 计算损失 → 计算梯度 → 更新参数”叫一次迭代。下一次迭代会使用刚更新的参数。

3.1 梯度到底是什么

把损失想成山坡的高度,把 w 和 b 想成你所站的位置。梯度告诉你当前位置向哪边走,损失上升最快;因此要朝它的反方向走,才能下坡。

新参数 = 旧参数 − 学习率 α × 梯度
∂L/∂w

权重方向的坡度

w 稍微增加时,损失变化得多快。

∂L/∂b

偏置方向的坡度

b 稍微增加时,损失变化得多快。

α

学习率

每次沿下坡方向迈多大一步。

“偏导数”只是分别观察一个参数:先假设 b 不动,看 w 改一点会怎样;再假设 w 不动,看 b 改一点会怎样。对单特征线性回归和 MSE:

模型ŷᵢ = wxᵢ + b
MSEL = (1/N) Σ(ŷᵢ − yᵢ)²
w 的梯度∂L/∂w = (2/N) Σ(ŷᵢ − yᵢ)xᵢ
b 的梯度∂L/∂b = (2/N) Σ(ŷᵢ − yᵢ)

权重梯度多乘了 x,是因为同样的预测误差发生在较大 x 上时,改变 w 对预测的影响更大。偏置对每个预测都直接加 1 份影响,所以偏置梯度不乘 x。

3.2 用真实数字走完第一次更新

从 w = 0, b = 0 开始,7 个样本的预测都为 0,MSE 为 303.71。计算得到权重梯度 −119.7、偏置梯度 −34.3。设学习率 α = 0.01:

更新 w0 − 0.01 × (−119.7) ≈ 1.20
更新 b0 − 0.01 × (−34.3) ≈ 0.34

负梯度前面还有一个减号,所以参数向正方向移动。用新参数重新预测后,MSE 会从 303.71 降到约 170.84。

迭代wbMSE读法
100303.71初始模型很差
21.200.34170.84第一次更新后明显下降
32.050.59103.17继续下降
42.660.7868.70下降速度变慢
53.090.9151.13逐步接近低点
63.401.0142.17还未收敛,继续训练
为什么这里的 w 先变成正数?

因为从全零模型开始的前几步只是在快速降低巨大误差,不代表最终关系为正。随着 b 和 w 共同调整,权重会继续移动,最终可到达该数据对应的负权重附近。

3.3 什么叫收敛

训练早期参数很差,损失常快速下降;靠近谷底后,梯度变小,曲线逐渐变平。此时继续训练也难以明显降低损失,称为收敛。线性回归配合 MSE 的损失面是凸的,形状类似一个碗,因此没有多个互相竞争的局部最低点。

下降后趋平通常正在收敛
一直缓慢下降学习率可能偏小,或还需更多迭代
上下震荡或上升学习率可能过大,也应检查数据尺度

训练损失达到 0 并不是普遍目标。现实数据含噪声,完全贴合所有训练点常意味着模型在记忆数据;是否可靠还要看验证集表现。

04
预计 10 分钟

超参数:怎样控制训练

w 和 b 是模型从数据中学出的参数;学习率、批次大小和周期数由训练者预先设置,叫超参数。它们决定训练走多快、一次看多少数据、完整看多少遍。

模型学习

参数

权重 w、偏置 b

训练结果的一部分
训练者设置

超参数

学习率、批次大小、周期数

训练过程的控制旋钮

4.1 学习率:每次迈多大一步

更新式 θ ← θ − α∇L 中的 α 就是学习率。它没有一个对所有任务通用的最佳值:同一个 0.01,在不同特征尺度和数据集上可能表现完全不同。

学习率过小、合适和过大时的三种损失曲线
学习率要结合损失曲线判断。标准化特征通常能让各方向的尺度更接近,使学习率更容易设置。
计算

若梯度为 2.5、学习率为 0.01,则本次参数变化量是 0.025;更新方向由公式中的减号决定。

4.2 批次大小:更新前看多少样本

方式每次更新使用训练表现适用理解
全批量全部 N 个样本梯度稳定,单次计算重小数据集容易理解
SGD1 个随机样本更新快、噪声大曲线会频繁抖动
小批量 SGD1 < batch < N速度与稳定性的折中现代训练中最常见

这里的“噪声”是指:某个小批次不代表整份数据,所以单次更新后损失可能暂时上升。适度波动不等于训练失败,要看一段时间的总体趋势。

4.3 周期与迭代不是同一个计数

一千个样本以每批一百个划分时,十次迭代构成一个周期
1 次迭代处理 1 个批次并更新一次参数;1 个周期表示所有训练样本都被处理过一遍。
每周期迭代数 = 训练样本数 ÷ 批次大小(向上取整)

例如 1,000 个样本、批次大小 100、训练 20 个周期:每周期 10 次迭代,总共更新参数 200 次。若使用 SGD(批次为 1),则总更新次数是 20,000 次。

4.4 一套可执行的调参顺序

  1. 01
    先建立基准

    固定数据切分和指标,用一组朴素设置完成训练并保存曲线。

  2. 02
    先看数据尺度

    数量级差异很大的特征先标准化,避免某一方向的梯度远大于其他方向。

  3. 03
    优先调学习率

    损失发散就按 10 倍逐步减小;下降过慢可谨慎增大,直到快速且稳定。

  4. 04
    再调批次与周期

    根据内存和曲线噪声选批次;训练到验证损失不再改善即可停止。

  5. 05
    用验证集做选择

    测试集只用于最后一次客观评估,不能反复用于调参。

一句话串起来

线性回归用 ŷ = wx + b 预测连续数值,用 损失函数衡量预测错误,再用梯度下降更新 w 和 b;学习率、批次大小与周期数决定这个训练过程怎样运行。

本模块术语速查

特征 x
给模型的输入
标签 y
训练数据里的正确答案
预测 ŷ
模型算出的答案
参数
训练学出的 w 与 b
损失
对预测错误的数值衡量
梯度
损失上升最快的方向和变化率
迭代
处理一个批次并更新一次参数
周期
完整处理训练集一遍
超参数
训练前由人设置的控制项
收敛
继续训练已难以降低损失
参考资料与素材说明

课程结构和概念参考 Google Machine Learning Crash Course 的线性回归、损失、梯度下降和超参数小节。本站正文按中文初学者的学习顺序重新组织并扩写;本页六张教学图均为项目原创 SVG,没有复制原站图片。