第15讲 · EECS 189:用梯度下降学习

UC Berkeley EECS 189/289A《机器学习导论》2026 春季 · 课堂实录重构

原始标题 Learning with Gradient Descent
视频 https://www.youtube.com/watch?v=6zV_GGgUa0Y
课程主页 https://eecs189.org/sp26/
官方讲义/笔记(Lecture 15) Google Drive 文件夹
图片来源 书中幻灯片插图为官方 PDF 高清渲染图

对应讲次:第15讲(UC Berkeley EECS 189 机器学习导论)

制作模型:deepseek-flash(coding-agent / pi;据 ~/.pi/agent/settings.json)

说明:课程材料版权归 UC Berkeley 及授课教师所有,本书仅供学习

本讲路线图

(参考时间: 00:00)

本讲把上一讲的优化理论落到一个可以手算的例子上,再深入收敛性,最后引向 SGD / mini-batch / 动量 / Adam:

  1. 一个三参数线性模型的完整梯度下降(写出损失 → 求梯度 → 走一步);
  2. 收敛分析:Taylor 二次近似、Hessian、特征值、临界点(极小/极大/鞍点);
  3. 学习率与条件数:为什么 $\eta$ 受最大曲率限制、收敛速度受最小曲率拖慢;
  4. SGD / mini-batch、动量与自适应方法(AdaGrad/RMSProp/Adam)。
标题页

📷 标题页
回到原视频 (00:00:20)

批量梯度下降算法

📷 批量梯度下降算法
回到原视频 (00:01:33)


一、一个可以手算的梯度下降例子

(参考时间: 00:03)

模型:三个参数的小型线性回归(一个「单神经元」):$\hat y = w_1x_1 + w_2x_2 + b$。把 $b$ 也当作一个权重,参数向量为 $w=(w_1,w_2,b)\in\mathbb{R}^3$。

训练数据(4 个样本,均方误差损失):

样本 $x_1$ $x_2$ $t$
1 0 0 0
2 0 1 1
3 1 0 1
4 1 1 2

损失($J=\text{MSE}=\tfrac14\sum(\text{预测}-\text{真值})^2$):

$$ J(w_1,w_2,b)=\frac14\Big[\big(w_1\cdot0+w_2\cdot0+b-0\big)^2+\big(w_1\cdot0+w_2\cdot1+b-1\big)^2+\big(w_1\cdot1+w_2\cdot0+b-1\big)^2+\big(w_1+w_2+b-2\big)^2\Big] $$

编者说明:$1/4$ 只是把损失整体缩放,不影响最小值的位置;但它会让梯度(进而「有效学习率」)缩放,所以写损失时别漏掉。

手算示例(一)

📷 手算示例(一)
回到原视频 (00:02:46)

手算示例(二)

📷 手算示例(二)
回到原视频 (00:03:59)

手算示例(三)

📷 手算示例(三)
回到原视频 (00:05:12)

手算示例(四)

📷 手算示例(四)
回到原视频 (00:06:25)

如何训练(一)

📷 如何训练(一)
回到原视频 (00:07:38)

如何训练(二)

📷 如何训练(二)
回到原视频 (00:08:51)

如何训练(三)

📷 如何训练(三)
回到原视频 (00:10:04)

如何训练(四)

📷 如何训练(四)
回到原视频 (00:11:17)

如何训练(五)

📷 如何训练(五)
回到原视频 (00:12:30)

如何训练(六)

📷 如何训练(六)
回到原视频 (00:13:43)

如何训练(七)

📷 如何训练(七)
回到原视频 (00:14:56)

手算示例(五)

📷 手算示例(五)
回到原视频 (00:16:09)

手算示例(六)

📷 手算示例(六)
回到原视频 (00:17:22)

手算示例(七)

📷 手算示例(七)
回到原视频 (00:18:35)

手算示例(八)

📷 手算示例(八)
回到原视频 (00:19:48)

手算示例(九)

📷 手算示例(九)
回到原视频 (00:21:01)

手算示例(十)

📷 手算示例(十)
回到原视频 (00:22:14)

学习率 0.5 的梯度步

📷 学习率 0.5 的梯度步
回到原视频 (00:23:27)

求梯度:$\nabla J=\big(\partial J/\partial w_1,\ \partial J/\partial w_2,\ \partial J/\partial b\big)$。以 $\partial J/\partial w_1$ 为例:样本 1、2 的第一列都是 0,所以它们的预测与 $w_1$ 无关,对应偏导为 0;只有样本 3、4 贡献:

$$ \frac{\partial J}{\partial w_1}=\frac14\Big[2(w_1+b-1)\cdot1+2(w_1+w_2+b-2)\cdot1\Big] $$

关键点:偏导数仍依赖 $(w_1,w_2,b)$——所以给定一组具体参数,就能算出一个数值梯度向量,用它更新。这就是符号微分 + 反向传播(链式法则) 要解决的问题。

从 $w^{(0)}=(0,1,1)$ 出发,$\eta=0.5$,走一步:算得梯度为 $(2,2,2)$,于是

$$ w^{(1)}=(0,1,1)-0.5\cdot(2,2,2)=(-1,\,0,\,0) $$

损失从 $1.5$ 降到约 $0.25$——下降成功。

问题:换 $\eta=1,0.8,0.1$ 还能收敛吗?答案取决于损失的曲率。

收敛的条件

📷 收敛的条件
回到原视频 (00:24:40)

收敛(假设之下)

📷 收敛(假设之下)
回到原视频 (00:25:53)

二次近似

📷 二次近似
回到原视频 (00:27:06)


二、收敛分析:Taylor 近似与 Hessian

(参考时间: 00:24)

对任意(即便非二次的)损失,在某点附近做二阶 Taylor 近似:

$$ f(x)\approx f(x_0)+\nabla f(x_0)^\top(x-x_0)+\tfrac12(x-x_0)^\top H(x-x_0),\qquad H=\nabla^2 f(x_0) $$

误差曲面的 Taylor 展开

📷 误差曲面的 Taylor 展开
回到原视频 (00:28:19)

Hessian(二阶导)

📷 Hessian(二阶导)
回到原视频 (00:29:32)

Hessian 练习

📷 Hessian 练习
回到原视频 (00:30:45)

误差曲面的 Taylor 展开(续)

📷 误差曲面的 Taylor 展开(续)
回到原视频 (00:31:58)

推导(一)

📷 推导(一)
回到原视频 (00:33:11)

推导(二)

📷 推导(二)
回到原视频 (00:34:24)

驻点处的 Taylor 展开(一)

📷 驻点处的 Taylor 展开(一)
回到原视频 (00:35:37)

驻点处的 Taylor 展开(二)

📷 驻点处的 Taylor 展开(二)
回到原视频 (00:36:50)

驻点与 Hessian

📷 驻点与 Hessian
回到原视频 (00:38:03)

Hessian 的特征向量

📷 Hessian 的特征向量
回到原视频 (00:39:16)

2.1 临界点分类

(参考时间: 00:33)

梯度为零的点是临界点,其类型由 Hessian 的特征值(特征分解 $H=Q\Lambda Q^\top$,正交归一基)决定:

Hessian 特征值 类型
全部 $\lambda_i>0$ 局部极小(碗)
全部 $\lambda_i<0$ 局部极大(倒碗)
有正有负 鞍点(saddle)——像「薯片」

标量退化情形:$f''(x)=0$ 对应平坦/高阶鞍点。二维以上才可能「一个方向极小、另一个方向极大」——这就是 鞍点(一维看不到这种「薯片」几何)。

几何直觉:梯度指向最速上升方向,所以 $-\nabla$ 是最速下降方向。最优解是算法的不动点(从极小点出发不再移动)。

小结:二次近似误差

📷 小结:二次近似误差
回到原视频 (00:40:29)

二次近似上的梯度下降(一)

📷 二次近似上的梯度下降(一)
回到原视频 (00:41:42)

二次近似上的梯度下降(二)

📷 二次近似上的梯度下降(二)
回到原视频 (00:42:55)

2.2 学习率与条件数

(参考时间: 01:01)

对二次函数,收敛速率由 $|1-\eta\lambda|<1$ 控制 ⇒ 学习率上限约 $2/\lambda_{\max}$:

条件数 $\kappa=\lambda_{\max}/\lambda_{\min}$:

学习率对收敛的影响

📷 学习率对收敛的影响
回到原视频 (00:44:08)

条件数与损失曲面

📷 条件数与损失曲面
回到原视频 (00:45:21)

规模问题:对 GPT 级模型,Hessian 是 $d\times d$,$d\sim10^{10}$ ⇒ 矩阵大到宇宙分子数级别,根本写不下。损失又是数万亿 token 求和。所以永远拿不到真实 Hessian——只能近似。

梯度下降的问题

📷 梯度下降的问题
回到原视频 (00:46:34)


三、动量与自适应学习率

(参考时间: 01:10)

动量(Momentum):在更新中加入「上一轮的位移」

$$ w^{(t+1)}=w^{(t)}-\eta\nabla J+\beta\,(w^{(t)}-w^{(t-1)}) $$

像「有质量的粒子」:在重复更新的方向加速,从而

$\beta$ 是控制动量多少的超参数;$\beta=0$ 就退回普通梯度下降。

动量

📷 动量
回到原视频 (00:47:47)

动量如何帮助平坦方向

📷 动量如何帮助平坦方向
回到原视频 (00:49:00)

动量如何抑制震荡

📷 动量如何抑制震荡
回到原视频 (00:50:13)

动量(小结)

📷 动量(小结)
回到原视频 (00:51:26)

学习率调度:随迭代调整 $\eta$。自适应方法:不用 Hessian,而是用「每个坐标过去的梯度」估计逐坐标的学习率:

实践中很多人从 mini-batch SGD 起步(最简单、常常很有效),需要时再换 Adam。

学习率调度(一)

📷 学习率调度(一)
回到原视频 (00:52:39)

学习率调度(二)

📷 学习率调度(二)
回到原视频 (00:53:52)

自适应学习率:AdaGrad

📷 自适应学习率:AdaGrad
回到原视频 (00:55:05)

自适应学习率:RMSProp

📷 自适应学习率:RMSProp
回到原视频 (00:56:18)

Adam = RMSProp + Momentum

📷 Adam = RMSProp + Momentum
回到原视频 (00:57:31)

Adam

📷 Adam
回到原视频 (00:58:44)


四、从批量到随机:SGD 与小批量

(参考时间: 01:07)

批量梯度下降每步要列出全部 $N$ 项(GPT:$N\sim10^{13}$)——代价高到不可能。随机梯度下降(SGD)每次随机取一行,用它的梯度近似真实梯度:

$$ w^{(t+1)}=w^{(t)}-\eta\,\nabla J_i(w^{(t)}) $$

它是真实下降方向的有噪近似(轨迹呈小幅抖动),但足够多步之后通常也走到类似的最小值。

小批量(mini-batch):一次取 $k$ 行。批次越大梯度越准、可并行、GPU 利用率越高;受限于显存,所以「能塞进 GPU 的最大批次」通常是首选。shuffling:每个 epoch 前打乱样本顺序。

回顾:批量梯度下降

📷 回顾:批量梯度下降
回到原视频 (00:59:57)

批量梯度下降的代价

📷 批量梯度下降的代价
回到原视频 (01:01:10)

训练误差估计测试误差

📷 训练误差估计测试误差
回到原视频 (01:02:23)

梯度的近似

📷 梯度的近似
回到原视频 (01:03:36)

随机梯度下降

📷 随机梯度下降
回到原视频 (01:04:49)

SGD:打乱(shuffling)

📷 SGD:打乱(shuffling)
回到原视频 (01:06:02)

SGD(小结)

📷 SGD(小结)
回到原视频 (01:07:15)

(过渡)

📷 (过渡)
回到原视频 (01:08:28)

随机梯度的谱系

📷 随机梯度的谱系
回到原视频 (01:09:41)

小批量随机梯度下降

📷 小批量随机梯度下降
回到原视频 (01:10:54)

小批量 SGD 的打乱

📷 小批量 SGD 的打乱
回到原视频 (01:12:07)

如何选择批次大小

📷 如何选择批次大小
回到原视频 (01:13:20)

小批量梯度下降

📷 小批量梯度下降
回到原视频 (01:14:33)


总结(Takeaways)


附:参考与延伸阅读

主题 链接
本讲视频 https://www.youtube.com/watch?v=6zV_GGgUa0Y
课程主页 https://eecs189.org/sp26/
官方讲义/笔记(Lecture 15) Google Drive 文件夹
教材 Machine Learning: A First Course for Engineers and Scientists 梯度下降、Hessian、条件数、SGD、Adam 相关章节 · https://doi.org/10.1017/9781108919371

版权说明:本讲视频、幻灯片与课程材料版权归 UC Berkeley EECS 189/289A 课程团队所有。本书为课堂内容的学习性中文重构,仅供学习交流。