
🎯 本篇目标:理解线性回归、损失函数、梯度下降这三个核心概念,并通过一个"工资预测"的小练习巩固理解。
后面的公式会用到这些符号,如果你忘了,先看这里。
$$
\sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n
$$
举例:假设有 3 个数:2, 5, 8
$$
\sum_{i=1}^{3} x_i = 2 + 5 + 8 = 15
$$
| 运算 | 符号 | 举例 | 结果 |
|---|---|---|---|
| 平方 | $x^2$ | $3^2$ | $9$ |
| 开根号 | $\sqrt{x}$ | $\sqrt{9}$ | $3$ |
为什么要平方? 因为误差有正有负(预测可能偏多或偏少),直接相加会互相抵消。平方后全变正数,就能真实反映误差大小了。
$$
\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i = \frac{x_1 + x_2 + \cdots + x_n}{n}
$$
简单说就是:找一条直线,尽可能地贴近所有数据点。
比如我们想根据房子的面积来预测房价,观察数据后发现面积越大房价越高,大致呈一条直线的趋势。我们就可以用一个一次方程来表示这个关系:
$$
y = wx + b
$$
| 符号 | 含义 | 生活化理解 |
|---|---|---|
| $x$ | 输入特征(如面积) | 你已知的信息 |
| $y$ | 预测结果(如房价) | 你想知道的答案 |
| $w$ | 权重(weight) | 面积每增加 1㎡,房价增加多少(直线的斜率) |
| $b$ | 偏置(bias) | 基础价格,即面积为 0 时的起始价(直线的截距) |
💡 一句话总结:机器学习的"训练",就是找到最好的 w 和 b,让这条直线尽可能贴近真实数据。
想象一个坐标系:
w(权重) 决定了直线的倾斜程度(斜率):
b(偏置) 决定了直线的上下位置(截距):
找 w 和 b 的前提是——我们得有一个标准来评判"这组 w、b 好不好"。这个标准就是 损失函数(Loss Function)。
最常用的损失函数之一:
$$
MSE = \frac{1}{n} \sum_{i=1}^{n} (\text{真实值}_i - \text{预测值}_i)^2
$$
拆解成三步来理解:
| 步骤 | 操作 | 为什么这样做 |
|---|---|---|
| ① | 计算每个样本的误差:真实值 − 预测值 | 看每个预测偏了多少 |
| ② | 把误差平方 | 避免正负抵消;同时让大误差被更严厉地惩罚 |
| ③ | 求平均 | 综合所有样本,得到一个整体评分 |
📝 举例说明:
假设有 3 套房,真实房价是 100万、200万、300万,你的模型预测是 110万、190万、280万:
样本 真实值 预测值 误差 误差² 1 100 110 −10 100 2 200 190 10 100 3 300 280 20 400 $$
MSE = \frac{100 + 100 + 400}{3} = 200
$$
核心原则:MSE 越小,预测越准。
那么问题来了:怎么让 MSE 变小呢?→ 梯度下降 👇
方差和 MSE 长得很像,但含义不同。方差衡量的是"数据本身有多分散",而 MSE 衡量的是"预测和真实值之间的差距"。
衡量数据分散程度(偏离平均值的程度),单位是原单位的平方。
$$
s^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2
$$
❓ 为什么分母是 n−1 而不是 n?
这叫做贝塞尔校正(Bessel's correction)。简单理解:用样本估计总体时,样本计算的偏差会偏小,除以 n−1 可以修正这个偏差,让估计更准。如果你拿到的是全部数据(总体),分母就用 n。
方差开根号,单位回到原来的单位,更直观。
$$
s = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2}
$$
💡 标准差可以理解为:数据平均上下波动多少。
比如一组考试成绩的标准差是 10 分,意思是大多数人的成绩在平均分 ± 10 分的范围内。
你已经知道了:模型是 y = wx + b,MSE 用来衡量预测好不好,越小越好。我们的目标就是找到让 MSE 最小的 w 和 b。
问题是:w 和 b 有无数种组合,我们不可能一个一个去试。 这时候就需要一种聪明的方法来自动地、一步一步地调整 w 和 b,让 MSE 逐渐变小——这就是 梯度下降(Gradient Descent)。
一句话理解:梯度下降 = 一步步调整参数(w 和 b),让误差(MSE)越来越小的优化方法。
想象你蒙着眼睛站在山坡上,看不到全貌,只能感受脚下的坡度。你的目标是走到山谷最低点。
策略很简单:每次朝下降最快的方向走一小步。一步一步地走,最终你就能到达山谷最低点。
在机器学习中:
| 比喻 | 对应概念 |
|---|---|
| 山的高度 | MSE(损失函数的值) |
| 你的位置 | 当前的 $w$ 和 $b$ |
| 山谷最低点 | 最好的 $w$ 和 $b$(MSE 最小) |
| 坡度 | 梯度(告诉你往哪个方向调整 w、b) |
| 步子大小 | 学习率(每次调整多少) |
$$
w, b \xrightarrow{\text{代入模型}} \hat{y}(预测值) \xrightarrow{\text{对比真实值}} \text{误差} \xrightarrow{\text{计算}} MSE \xrightarrow{\text{梯度下降}} \text{调整}, w, b
$$
这个过程反复循环(每循环一轮叫做一个 epoch),直到 MSE 足够小或不再明显下降。
梯度就是损失函数对参数的导数(偏导数)。如果你忘了导数:
导数 = 变化率 = 斜率
比如 $f(x) = x^2$,它的导数是 $f'(x) = 2x$
- 当 $x=3$ 时,导数 = 6(正数,说明函数在上升 -> 要往左走,即减小 x)
- 当 $x=-2$ 时,导数 = -4(负数,说明函数在下降 -> 要往右走,即增大 x)
导数的正负告诉你方向,大小告诉你坡度有多陡。
你会看到下面的公式里有一个弯弯的 $\partial$ 符号,它叫 偏导数符号,读作 "partial"。
$\partial$ 和普通导数 $d$ 的区别:
| 符号 | 使用场景 | 举例 |
|---|---|---|
| $d$ | 函数只有一个变量 | $f(x) = x^2$,只有 x,用 $\frac{df}{dx}$ |
| $\partial$ | 函数有多个变量 | MSE 同时取决于 w 和 b,用 $\frac{\partial MSE}{\partial w}$ |
把它理解为:"我只动一个开关(w 或 b),看看结果(MSE)怎么变"。
计算出偏导数后,你会得到一个数字,这个数字的正负号非常关键——它告诉你参数该往哪个方向调:
| $\frac{\partial MSE}{\partial w}$ 的结果 | 含义 | 该怎么做 |
|---|---|---|
| 正数 | w 增大时,MSE 也增大(误差变大) | w 太大了,应该减小 w |
| 负数 | w 增大时,MSE 反而减小(误差变小) | w 太小了,应该增大 w |
| 接近 0 | w 再怎么动,MSE 变化都很小 | 快到最优值了,不用大幅调整 |
💡 简单记忆:偏导数的符号 = MSE 随 w 变化的方向。正数说明"再增大 w 只会让误差更大",负数说明"增大 w 能让误差变小"。
用工资例子验证:
之前算出 $\frac{\partial MSE}{\partial w} \approx -18667$(负数),说明:
这也解释了更新公式中减号的作用:
$$
w_{\text{新}} = w_{\text{旧}} - \alpha \times \underbrace{\frac{\partial MSE}{\partial w}}{\text{负数}} = w{\text{旧}} + \text{正数} \implies w \text{ 变大}
$$
如果偏导数是正数(w 偏大),减去一个正数,w 就变小了。不管哪种情况,减号都能让 w 自动往正确方向调整——这就是梯度下降的精妙之处。
梯度公式不是凭空出现的,它是从 MSE 公式一步步求导推出来的。下面我们完整推导一遍。
如果你完全忘了求导,只需要记住这两条规则就够用了:
规则 1:幂函数求导 — $x^n$ 求导等于 $n \cdot x^{n-1}$(指数拿下来乘,指数减 1)
原函数 求导 结果 $x^2$ 指数 2 拿下来,指数变 1 $2x$ $x^3$ 指数 3 拿下来,指数变 2 $3x^2$ 规则 2:链式法则 — 如果 $x$ 外面套了一层函数,求导时要逐层剥开,每层导数相乘
比如 $(3x+1)^2$ 对 $x$ 求导:先对外层 $(\cdots)^2$ 求导得 $2(3x+1)$,再乘以内层 $(3x+1)$ 对 $x$ 的导数 $3$,最终 = $6(3x+1)$
起点:MSE 的原始公式(用模型 $\hat{y}_i = wx_i + b$ 代入)
$$
MSE = \frac{1}{n} \sum_{i=1}^{n} (\hat{y}i - y_i)^2 = \frac{1}{n} \sum{i=1}^{n} (wx_i + b - y_i)^2
$$
对 $w$ 求偏导(固定 b 不动,只看 w 的变化):
$$
\frac{\partial MSE}{\partial w} = \frac{1}{n} \sum_{i=1}^{n} \frac{\partial}{\partial w} (wx_i + b - y_i)^2
$$
第 1 步 — 外层求导:对 $(\cdots)^2$ 用幂函数规则,指数 2 拿下来:
$$
= \frac{1}{n} \sum_{i=1}^{n} 2(wx_i + b - y_i) \cdot \frac{\partial}{\partial w}(wx_i + b - y_i)
$$
第 2 步 — 内层求导(链式法则):$(wx_i + b - y_i)$ 对 $w$ 求导:
所以内层导数 = $x_i$
第 3 步 — 合并:
$$
\frac{\partial MSE}{\partial w} = \frac{1}{n} \sum_{i=1}^{n} 2(wx_i + b - y_i) \cdot x_i = \frac{2}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i) \cdot x_i
$$
同样的起点,这次对 $b$ 求偏导(固定 w 不动):
$$
\frac{\partial MSE}{\partial b} = \frac{1}{n} \sum_{i=1}^{n} 2(wx_i + b - y_i) \cdot \frac{\partial}{\partial b}(wx_i + b - y_i)
$$
内层 $(wx_i + b - y_i)$ 对 $b$ 求导:
所以内层导数 = $1$,代入得:
$$
\frac{\partial MSE}{\partial b} = \frac{2}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i)
$$
💡 对比两个结果:对 w 求导多了一个 $\times x_i$,对 b 求导没有。原因就是 $w$ 在模型里乘了 $x$,而 $b$ 没有。
公式一:MSE 对 w 的偏导数
$$
\frac{\partial MSE}{\partial w} = \frac{2}{n} \sum_{i=1}^{n} (\text{预测值}_i - \text{真实值}_i) \cdot x_i
$$
| 部分 | 含义 | 大白话 |
|---|---|---|
| $\frac{\partial MSE}{\partial w}$ | MSE 对 w 的偏导数 | w 动一点,MSE 变多少 |
| $\frac{2}{n}$ | 常数系数 | MSE 公式求导自然产生的(平方的指数 2 拿下来),n 是样本数量 |
| $\text{预测值}_i - \text{真实值}_i$ | 第 i 个样本的误差 | 预测偏了多少 |
| $\cdot , x_i$ | 乘以第 i 个样本的输入值 | 因为 w 是乘在 x 上的($y=wx+b$),所以 w 的影响和 x 有关 |
| $\sum$ | 把所有样本加起来 | 综合考虑所有数据 |
公式二:MSE 对 b 的偏导数
$$
\frac{\partial MSE}{\partial b} = \frac{2}{n} \sum_{i=1}^{n} (\text{预测值}_i - \text{真实值}_i)
$$
注意和公式一几乎一样,但后面没有乘 $x_i$!这在推导中已经看到了——因为 $b$ 对 $b$ 求导等于 1,不涉及 $x$。
不需要死记公式!只要知道:梯度告诉你 w 和 b 该往哪个方向调、调多少。推导过程帮你理解公式为什么长这样。
学习率(learning rate) 用符号 $\alpha$(alpha)表示,控制每一步走多大:
$$
w_{\text{新}} = w_{\text{旧}} - \alpha \cdot \frac{\partial MSE}{\partial w}
$$
$$
b_{\text{新}} = b_{\text{旧}} - \alpha \cdot \frac{\partial MSE}{\partial b}
$$
注意那个减号 −:因为梯度指向"上坡方向",我们要往"下坡方向"走,所以要减去梯度。
| 学习率大小 | 效果 | 问题 |
|---|---|---|
| 太大 | 步子迈太大 | 可能跨过最低点,在两边来回跳(不收敛) |
| 太小 | 步子太小 | 走得太慢,训练时间太长 |
| 合适 | 稳步下降 | 能顺利找到最低点 ✅ |
💡 常见学习率的取值:0.001、0.01、0.1 等。实际中需要尝试不同值来找到合适的。
| 工作年限 $x$ | 真实工资 $y$ |
|---|---|
| 1 | 9000 |
| 2 | 13000 |
| 3 | 17000 |
模型公式为:
$$
y = 2000x + 5000
$$
| $x$ | $\hat{y} = 2000x + 5000$ | 预测工资 |
|---|---|---|
| 1 | $2000 \times 1 + 5000$ | 7000 |
| 2 | $2000 \times 2 + 5000$ | 9000 |
| 3 | $2000 \times 3 + 5000$ | 11000 |
| $x$ | 真实值 $y$ | 预测值 $\hat{y}$ | 误差($y - \hat{y}$) |
|---|---|---|---|
| 1 | 9000 | 7000 | +2000 |
| 2 | 13000 | 9000 | +4000 |
| 3 | 17000 | 11000 | +6000 |
💡 所有误差都是正数,说明模型的预测值全部偏低,增长速度不够。
$$
MSE = \frac{2000^2 + 4000^2 + 6000^2}{3} = \frac{4000000 + 16000000 + 36000000}{3} = \frac{56000000}{3} \approx 18666667
$$
答:应该调大 ✅
理由:
如果我们用梯度下降来训练这个模型,它会自动做什么?
$$
\frac{\partial MSE}{\partial w} = \frac{2}{3} \left[ (7000-9000) \times 1 + (9000-13000) \times 2 + (11000-17000) \times 3 \right]
$$
$$
= \frac{2}{3} \left[ -2000 + (-8000) + (-18000) \right] = \frac{2}{3} \times (-28000) \approx -18667
$$
这和我们的直觉完全一致!梯度下降就是把这个"直觉判断"变成了精确的数学计算。
下面我们用上面的工资数据,假设学习率 $\alpha = 0.0001$,完整走一遍梯度下降的过程。
当前状态:$w = 2000$,$b = 5000$,预测值分别为 7000、9000、11000。
$$
\frac{\partial MSE}{\partial w} = \frac{2}{3} \left[ (7000-9000) \times 1 + (9000-13000) \times 2 + (11000-17000) \times 3 \right]
$$
逐项计算:
| 样本 | 预测值 - 真实值 | $\times x_i$ | 结果 |
|---|---|---|---|
| 1 | 7000 - 9000 = -2000 | $\times$ 1 | -2000 |
| 2 | 9000 - 13000 = -4000 | $\times$ 2 | -8000 |
| 3 | 11000 - 17000 = -6000 | $\times$ 3 | -18000 |
加起来:$-2000 + (-8000) + (-18000) = -28000$
乘以 $\frac{2}{3}$:$\frac{2}{3} \times (-28000) \approx -18667$
$$
w_{\text{新}} = w_{\text{旧}} - \alpha \times \frac{\partial MSE}{\partial w} = 2000 - 0.0001 \times (-18667) = 2000 + 1.87 \approx 2001.87
$$
✅ 梯度为负数,减去负数等于加上正数,所以 w 变大了!方向正确。
$$
\frac{\partial MSE}{\partial b} = \frac{2}{3} \left[ (7000-9000) + (9000-13000) + (11000-17000) \right]
$$
$$
= \frac{2}{3} \times (-2000 + (-4000) + (-6000)) = \frac{2}{3} \times (-12000) = -8000
$$
$$
b_{\text{新}} = b_{\text{旧}} - \alpha \times \frac{\partial MSE}{\partial b} = 5000 - 0.0001 \times (-8000) = 5000 + 0.8 = 5000.8
$$
| 参数 | 更新前 | 更新后 | 变化方向 |
|---|---|---|---|
| $w$ | 2000 | 2001.87 | 调大 ✅ |
| $b$ | 5000 | 5000.8 | 调大 ✅ |
这只是第 1 轮(epoch 1),每一轮 w 和 b 都会调整一点点,MSE 也会逐渐减小。经过几千轮之后,$w$ 会逐渐接近 $4000$,$b$ 保持在 $5000$ 附近,MSE -> 0,完美拟合真实数据!
关键公式速查卡:
更新什么 公式 白话 更新 w $w_{新} = w_{旧} - \alpha \times \frac{\partial MSE}{\partial w}$ 旧的 w - 学习率 $\times$ w的梯度 更新 b $b_{新} = b_{旧} - \alpha \times \frac{\partial MSE}{\partial b}$ 旧的 b - 学习率 $\times$ b的梯度 减号的意义:梯度指向上坡方向,我们要下坡,所以要反着走(减去)。
| 概念 | 一句话解释 |
|---|---|
| 线性回归 | 用一条直线 $y = wx + b$ 来拟合数据、做预测 |
| 损失函数(MSE) | 衡量预测好不好的"评分",越小越好 |
| 梯度下降 | 一步步调整 $w$ 和 $b$,让 MSE 变小的方法 |
| 学习率 | 每步走多大,太大会跳过最低点,太小会走太慢 |
| 梯度 | 损失函数的导数,告诉你参数该往哪个方向调 |
numpy 就够了)