机器学习最基础的算法

线性回归:
从猜公式到梯度下降

房价只跟面积有关吗?一条直线能不能预测房价?
误差怎么衡量?导数为什么指向最低点?

向下滑动
第一步 · 房价预测

房价预测:你怎么猜公式?

1 生活中的预测问题

假设你知道了一些房子的面积和成交价:

房子面积(㎡)成交价(万)
A60120
B90180
C120240
D150300

你发现了规律吗?每平米大约 2万/平米

于是你猜出了公式:房价 = 面积 × 2万

2 用公式预测新房子

有了公式,你就可以预测新房子了:

新房子面积公式预测实际成交
E80㎡80 × 2 = 160万165万
F110㎡110 × 2 = 220万215万

预测基本准确!但误差是难免的:E差了5万,F差了5万。

核心问题:当你不知道"2万/平米"这个数字时,怎么从数据中推算出这个公式?
房价 = w × 面积 + b
w = 每平米多少钱(斜率)  |  b = 基础价(截距)
第二步 · 猜 w 和 b

已知数据,怎么猜出 w 和 b?

1 猜 w 和 b = 猜直线的位置

房价 = w × 面积 + b 是一条直线:

2 用数据点来检验直线

如果给定4个数据点,直线拟合得好不好,看的是所有点到直线的距离

实际操作中,我们用误差来衡量:

预测值 ŷ
ŷ = w·x + b
用公式算出来的价格
真实值 y
y
实际成交价
单个误差
|ŷ - y|
预测值和真实值的差距

3 真实例子:已知5个点

假设给你这些成交数据。它们大致成正比,但并不完美落在一条直线上(真实成交总会有一点偏差):

面积 x6080100120150
房价 y152198255295380

试着猜一下,这条直线的 w 和 b 大概是多少?

(大约:w ≈ 2.5,b ≈ 0。下面会看到——即使用最好的 w,Loss 也不会是 0。)

第三步 · 误差函数

误差函数:怎么衡量"猜得好不好"?

1 什么是误差函数?

误差函数就是把所有误差加起来的总和。误差越小,直线拟合得越好。

Loss = Σ (预测值 − 真实值)²
Loss = 总误差(越小越好)  |  Σ = 把所有点的误差加起来

为什么要平方?因为:① 去掉负号(误差有正有负)② 放大大的误差。

2 具体算一遍

假设我们猜 w = 1,b = 0(公式:房价 = 1 × 面积):

面积 x真实价 y预测 ŷ=1·x误差 ŷ−y误差²
6015260-928464
8019880-11813924
100255100-15524025
120295120-17530625
150380150-23052900
Loss =129,938

3 再试试 w = 2,b = 0

面积 x真实价 y预测 ŷ=2·x误差 ŷ−y误差²
60152120-321024
80198160-381444
100255200-553025
120295240-553025
150380300-806400
Loss =14,918

Loss ≈ 1.5 万,比 w=1 的约 13 万小多了——说明 w=2 好得多。

再拖到 Demo 的碗底(约 w ≈ 2.51),Loss 还能降到大约 76。注意:已经是最优,但 Loss 仍不为 0——真实数据里总有噪声,我们追求的是「相对最好」,不是零误差。

拖动直线,看误差怎么变!

你可以试试:拖动「斜率 w」滑块——上面看直线与红点误差,下面看 Loss 碗形如何升降

斜率 w=1.00

同一套滑块联动:下面是「误差随 w 怎么变」——开口向上的碗。拖到碗底,Loss 最低。下一节再讲:碗底和「导数 = 0」有什么关系。

Loss 碗 · 拖 w 看点怎么走

1.50
0
拖动滑块或点击自动搜索...
第四步 · 导数

导数登场:为什么导数=0,误差最小?

1 碗底为什么切线是平的?

上面 Demo 里,Loss 对 w 画出来是一口开口向上的碗。碗底 Loss 最低——那一点的切线是水平的。

水平线的斜率是 0。而「斜率」在数学里就是导数。所以:找误差最小 = 找切线水平的点 = 解 导数 = 0

碗的坡度

左坡往右下倾、右坡往右上翘。坡度告诉你往哪边挪 w 能下到碗底。

导数 = 坡度

dLoss/dw 就是当前点的坡度。正 → 在右坡;负 → 在左坡;零 → 在碗底。

碗底 = 最低点

切线水平 → 导数 = 0 → 误差最小。这就是我们的目标!

2 具体例子:Loss 对 w 求导

先看过原点的直线 y = w·x(Demo 里把截距 b 固定时,道理一样)。Loss = Σ(w·x − y)²

对 w 求导(这里 w 是变量,其他都是常数):

dLoss/dw = Σ 2·x·(w·x − y)
这就是导数:告诉你当前 w 的"坡度"在哪

令 dLoss/dw = 0,解出的 w 就是碗底——对本组数据(b = 0 时)约 w ≈ 2.51。此时 Loss 约 76,已经最小,但不等于 0

3 和碗对上:从左坡到右坡

按碗上从左到右的位置读(和 Demo 一致):

左坡 · 导数 < 0

切线往右下倾
→ 应增大 w

碗底 · 导数 = 0

切线水平,Loss 最小
不要动了

右坡 · 导数 > 0

切线往右上翘
→ 应减小 w

关键结论:Loss 是碗形;碗底切线水平,所以导数 = 0 时误差最小。
• 导数 < 0 → 左坡 → 增大参数
• 导数 = 0 → 碗底 → 别动了
• 导数 > 0 → 右坡 → 减小参数
第五步 · 求解方法

两种求解方法:最小二乘法 vs 梯度下降

方法一:最小二乘法

直接用公式算出最优解,一步到位。

w = Σ(x·y) / Σ(x·x)
代入数据,直接出答案
  1. 收集 x(面积)和 y(房价)数据
  2. 代入公式,直接算出 w
  3. Done!

优点:快,一步出结果
缺点:复杂模型(神经网络)无法用

方法二:梯度下降

一步一步摸索,每次往误差最小的方向走一点。

w = w − η · dLoss/dw
每次挪一小步,慢慢逼近最优
  1. 随便猜一个 w
  2. 算导数,判断往哪调
  3. 挪一小步:w = w − η·导数
  4. 重复,直到导数≈0

优点:通用,神经网络也能用
缺点:慢,需要多步迭代

4 两者对比

最小二乘法梯度下降
原理直接解方程一步步摸索
速度快(一步到位)慢(多步迭代)
适用范围简单模型(线性回归等)任意模型(CNN、Transformer...)
复杂度O(n²) 求解矩阵由模型规模决定
大数据计算量爆炸可增量学习

实际工程中,复杂模型(神经网络)只能用梯度下降。最小二乘法只适合简单的线性回归等场景。

深度学习的秘密:神经网络有上亿个参数,根本无法用最小二乘法直接求解。只能用梯度下降一步步迭代。 → 详见:通俗理解梯度下降
总结

线性回归是什么?

① 猜公式

房价 = w × 面积 + b。w 是斜率(每平米多少钱),b 是截距(起步价)。

② 误差函数

Loss = Σ(预测−真实)²。把所有点的误差加起来,Loss 越小拟合越好。

③ 导数的意义

Loss 是碗形:碗底切线水平 → 导数=0。左坡增大 w,右坡减小 w。

④ 两种求解

最小二乘法直接解方程;梯度下降一步步迭代。深度学习只能用梯度下降。

w = w − η · (dLoss/dw)
每次往误差最小的方向挪一点。
这就是梯度下降在线性回归中的应用。
延伸阅读:本文末尾涉及梯度下降求参数。想系统理解「下山」优化器本身?请阅读 《通俗理解梯度下降》
返回首页