第 7 步 · 把「往哪走」讲清楚
梯度 · 最陡上升方向Gradient
你已经写了十几章 w ← w − η∇L,但 ∇ 到底是什么、为什么沿它下降最快?这一章把那个符号展开成一支箭头。
14 分钟
阅读 + 实操
4 个
交互演示
入门
难度
梯度 · 交互演示
函数碗形
探针点(1.10, 0.90)
|∇f|—
① 标量场热力图:把鼠标移到图上任意一点,看梯度箭头指向哪里、有多长
② 等高线与梯度场:青色曲线是 f = const;每个箭头都垂直于它所在的等高线
③ 方向导数 D_û f 随角度变化:拖动滑块转动 û,曲线在梯度方向上取到最大值
④ 沿 −∇f 迭代:这就是你在第 1 步见过的梯度下降,一次走一小步
为什么学这步?
第 1 步的线性回归里,你已经在用 θ ← θ − η∇L 了。但从那以后本章程的所有优化——反向传播、Adam、PPO——都在重复这同一个动作。把 ∇ 的几何含义搞清楚,后面每一处「沿梯度更新」都不再是符号搬运。
📌 发生了什么
- 偏导数 = 沿单轴的斜率
- ∇f 打包了所有方向的斜率
- 它垂直等值线,指向最陡上升
⚠️ 常见陷阱
- ∇f = 0 不等于极小值(鞍点/平台)
- 梯度只是「一步」最优,不是全局最短路径
- ∇f 是局部量,离远了要重算
✅ 本章小结
- ∇f 的方向 = 最陡上升方向
- ∇f 的长度 = 该方向的变化率
- −∇f 就是梯度下降的一步
📐 为什么梯度方向最陡
不需要高阶工具。一阶泰勒展开就够了:从 x 出发走一小步 h,函数值的变化近似等于 ∇f·h。于是问题变成「在 |h| 固定时,让内积最大」。柯西–施瓦茨直接给出答案。
固定步长 |h| = ε,则 ∇f·h = |∇f|·ε·cos θ,最大当且仅当 cos θ = 1,即 h 与 ∇f 同向。所以「最陡上升方向」不是约定,是被不等式逼出来的唯一答案。
反过来取 h ∥ −∇f 就得到下降最快的一步,也就是 θ ← θ − η∇L。至于垂直性:沿等值线走时 f 不变,即 ∇f·h = 0,所以 ∇f ⊥ 等值线。
🎛 四个场的关键点
切换上方预设,对照这张表看:最有意思的是鞍点 —— ∇f = 0,但它既不是极大也不是极小。
| 场 | ∇f = 0 的点 | 性质 |
|---|---|---|
| 碗形 x²+2y² | (0, 0) | 全局极小 |
| 鞍点 x²−y² | (0, 0) | 鞍点(沿 x 升、沿 y 降) |
| 多峰(三个高斯峰) | 多处(各峰之间) | 局部极值,非全局 |
| 峡谷 0.3x²+3y² | (0, 0) | 狭长谷底,条件数很大 |
💡 峡谷那一行值得停一下:∇f 在窄方向分量很大、在长方向很小,这正是梯度下降在病态曲面上走出「锯齿」的原因。
💻 数值梯度
本页所有箭头都由这段中心差分算出(也是框架自动微分要算的东西):
// 数值梯度:中心差分,误差 O(h²)
function gradientAt(f, x, y, h = 1e-3) {
const gx = (f(x + h, y) - f(x - h, y)) / (2 * h);
const gy = (f(x, y + h) - f(x, y - h)) / (2 * h);
return [gx, gy];
}
// 反向传播不是「另一种梯度」,而是把这条链式法则
// 在计算图上从输出往回逐层乘局部雅可比。
📚 参考文献与延伸阅读
- Strang, Calculus / MIT 18.02 “Gradient, Directional Derivative, and the Tangent Plane” — 梯度与方向导数的标准处理
- Goodfellow, Bengio & Courville (2016), Deep Learning, §4.3 「Gradient-Based Optimization」 — 从 ∇ 到梯度下降的桥接
- Baydin et al. (2018), Automatic Differentiation in Machine Learning: a Survey — 反向模式自动微分综述
- 对照阅读 → ML 第 1 步 · 线性回归:这里的 −∇f 就是那里的 w ← w − η∂L/∂w;ML 第 5 步 · 反向传播:链式法则如何把 ∇ 逐层传回去
📝 课后练习
检验你的理解——答对为止