ML ML Learning Lab
01 / 14
第 1 步 · 监督学习的起点

线性回归 + 梯度下降Linear Regression + Gradient Descent

让机器自己学会画一条穿过数据点的直线

8 分钟
阅读 + 实操
1 个
交互演示
初级
难度

线性回归 · 交互演示

w 斜率0.00
b 截距0.00
∇w--
∇b--
Loss--
学习率 0.01
速度 20步/秒

为什么学这步?

线性回归是机器学习的"Hello World":给定一堆数据点,能否找到一条线捕捉其趋势?房价、气温、销量预测本质上都是"从已有数据找规律,再预测新数据"。更重要的是它引出了梯度下降——几乎所有深度学习都建立在它之上。

📌 发生了什么

  • 模型从随机参数开始,计算每条数据点的预测误差。
  • 沿误差下降最快的方向(负梯度)小幅更新 w、b。
  • 反复迭代,直到损失曲线趋于平缓。

⚠️ 常见陷阱

  • 学习率越大越快?错,过大反而震荡发散。
  • 梯度下降总能找到最优?线性可,复杂模型会卡局部最优。
  • 拟合好 = 因果?不,相关≠因果。

本章小结

  • 模型:y = w·x + b,两个参数描述线性关系。
  • 损失:MSE 衡量预测与真实的差距。
  • 优化:梯度下降沿损失下降方向迭代更新。

📐 梯度推导

损失函数 MSE 对参数 w、b 的偏导数如何得到?以下是完整推导链。

对 w 求偏导(链式法则):先对外层平方求导,再乘以内层 w·x+b 对 w 的偏导(即 x_i):

对 b 求偏导:内层 w·x+b 对 b 的偏导为 1:

参数更新规则(沿负梯度方向下降):

🎛 学习率对比

学习率 η 是梯度下降最关键的超参数。太大发散,太小极慢。

学习率 表现 结果
η = 0.001 每步更新极小,损失几乎不动 收敛过慢
η = 0.01 平稳下降,几十步内收敛 推荐区间
η = 0.1 初期快但开始震荡 不稳定
η = 1.0 梯度爆炸,损失不降反升 发散

💡 上方演示器可实时调节学习率(10⁻³ ~ 10⁰),亲手验证这些行为。

💻 实现要点

梯度下降核心循环(Python,与上方演示器逻辑一致):

# 初始化参数
w, b = 0.0, 0.0
lr = 0.01  # 学习率 η

for step in range(max_steps):
    # 1. 计算梯度(遍历所有样本)
    grad_w, grad_b = 0.0, 0.0
    for i in range(n):
        error = y[i] - (w * x[i] + b)
        grad_w += -2 * x[i] * error
        grad_b += -2 * error
    grad_w /= n;  grad_b /= n

    # 2. 沿负梯度方向更新
    w -= lr * grad_w
    b -= lr * grad_b

📚 参考文献与延伸阅读

  • Andrew Ng, Machine Learning (Coursera), Week 1: Linear Regression with One Variable
  • Goodfellow, Bengio & Courville, Deep Learning (2016), §4.3 Gradient-Based Learning + §5.9 Stochastic Gradient Descent
  • Sutton & Barto, Reinforcement Learning (2nd ed.), §2.4 Iterative Optimization — 同样的梯度下降思想在 RL 中反复出现
  • Wikipedia: Gradient descent — 梯度下降的数学定义与变体

📝 课后练习

检验你的理解——答对为止