在大屏或电脑上体验更佳——动画和操作区域更宽敞。
输入

梯度下降

梯度下降在当前参数处计算损失的斜率,再沿相反方向移动,步幅由学习率 η 缩放。单参数规则为 θ ← θ − η·f′(θ)。重复更新可能收敛、进展缓慢、振荡或发散,取决于函数形状和学习率。

这像雾中下山:只知道脚下坡向,就决定下一步。步子太小,下降慢;太大,可能跨过谷底,落到另一侧更高处。本课用一条曲线展示这种差别。

梯度下降如何工作

损失为凸二次函数 f(θ) = θ²,参数 θ 是横坐标,损失是高度。梯度 f′(θ) = 2θ 指向增长方向,所以更新减去梯度。

算法不需要先解出最低点。对这条曲线,离零越远斜率越大,同一学习率产生的步幅也越长;接近零时步幅缩小。这是本二次函数的关系,不能把任意曲面的梯度大小都当成到最优点的距离。

代入导数,更新变为 θ ← θ·(1 − 2η)。每步都乘同一因子:|1 − 2η| < 1 时趋近零;大于 1 时,非零起点的绝对值逐步增长。画面打印该因子,便于预测轨迹。

梯度下降逐步演示

默认 η = 0.25,因子为 1 − 2·0.25 = 0.5,从 θ = 4 开始,固定运行六次迭代。每次分“测斜率”和“更新”两步。

  1. 开始。 θ=4,f(4)=16,点在右侧高处。
  2. 测量。 切线出现,f′(4)=2·4=8,向左下降。
  3. 更新。 θ ← 4 − 0.25·8 = 2,损失变为 4。
  4. 再测量。 f′(2)=2·2=4,仍为正,斜率减半。
  5. 再更新。 θ ← 2 − 0.25·4 = 1,损失变为 1。

第 3–6 次继续相同节奏:1 → 0.5 → 0.25 → 0.125 → 0.0625。切线变平,步幅箭头缩小。第六次后 θ=0.0625,落入画面用作“收敛”标签的 ±0.15 区间。

±0.15 只是演示判定,不是实际训练通常可用的停止条件。算法一般不知道最终参数在哪里;常用梯度范数、步数预算或验证损失变化来停止。本轨迹固定六步,没有提前收敛分支。

学习率如何决定轨迹

面板提供 η 从 0.05 到 1.15、步长 0.05 的滑块,同一曲线、同一起点,只改变 1 − 2η。

  • η=0.10,因子 0.8。 理论收敛,六步后 θ = 4·0.8⁶ ≈ 1.05,仍超出演示容差,标为 stalled。这表示当前预算内进展不足,不是永远不会收敛。
  • η=0.25,因子 0.5。 默认每步减半,六步进入容差。
  • η=0.85,因子 −0.7。 每步跨过零,但 |−0.7|<1,绝对值与损失递减,振荡收敛。
  • η=1.05,因子 −1.1。 每步越过零并落得更高,六步后 |θ| = 4·1.1⁶ ≈ 7.09。图域扩大以显示发散。调到 1.15 时会越出扩大后的图,点固定在边缘,旁边打印真实 θ 与 off the chart。

再做两个比较:缓慢越过 η=1.00,0.95 的振荡衰减,1.00 的因子 −1 使 4 ↔ −4 持续重复,1.05 的幅度增长。停在 η=0.50,因子恰为 0,第一步就从 4 到最低点。

稳定条件为 |1 − 2η| < 1,对本函数即 0 < η < 1。上界来自曲率 f″=2,更陡的二次碗需要更小学习率。因此没有一个 η 对所有损失都安全。

真实训练有多参数、小批次噪声、非凸损失,并可能使用动量、Adam 与学习率调度。本课只保留计算局部梯度再更新的基本过程。

边界情况

  • 已在最低点。 θ=0 时梯度与更新为零,任何 η 都保持零。
  • 平坦区域。 本例接近底部时斜率变小是收敛表现;其他损失的平坦区可能离最优点还远,也会进展缓慢。
  • 稳定边界。 η=1 从 ±4 来回振荡。η>1 从非零起点发散,但零起点是固定点。
  • 非凸损失。 可能趋近局部最小、停在鞍点附近或平坦区,也可能因步长不合适而不收敛,不能保证总会落进某个谷底。

常见错误

  • 漏掉负号。 θ ← θ + η·f′(θ) 是梯度上升。
  • 把一个学习率用于所有问题。 0.25 在这里有效,在更陡曲面可能失稳;范围取决于曲率。
  • 把大梯度当接近完成。 本二次函数中大梯度代表离零远,一般函数中则不能直接换算距离。
  • 混淆损失和梯度。 损失是高度,梯度是斜率,沿负梯度更新是为了降低前者。
  • 认为跨过最低点就失败。 0.85 每步越过零仍收敛;本例发散的关键是因子绝对值超过 1,振幅逐步增长。