梯度下降
梯度下降在当前参数处计算损失的斜率,再沿相反方向移动,步幅由学习率 η 缩放。单参数规则为 θ ← θ − η·f′(θ)。重复更新可能收敛、进展缓慢、振荡或发散,取决于函数形状和学习率。
这像雾中下山:只知道脚下坡向,就决定下一步。步子太小,下降慢;太大,可能跨过谷底,落到另一侧更高处。本课用一条曲线展示这种差别。
梯度下降如何工作
损失为凸二次函数 f(θ) = θ²,参数 θ 是横坐标,损失是高度。梯度 f′(θ) = 2θ 指向增长方向,所以更新减去梯度。
算法不需要先解出最低点。对这条曲线,离零越远斜率越大,同一学习率产生的步幅也越长;接近零时步幅缩小。这是本二次函数的关系,不能把任意曲面的梯度大小都当成到最优点的距离。
代入导数,更新变为 θ ← θ·(1 − 2η)。每步都乘同一因子:|1 − 2η| < 1 时趋近零;大于 1 时,非零起点的绝对值逐步增长。画面打印该因子,便于预测轨迹。
梯度下降逐步演示
默认 η = 0.25,因子为 1 − 2·0.25 = 0.5,从 θ = 4 开始,固定运行六次迭代。每次分“测斜率”和“更新”两步。
- 开始。 θ=4,
f(4)=16,点在右侧高处。 - 测量。 切线出现,
f′(4)=2·4=8,向左下降。 - 更新。
θ ← 4 − 0.25·8 = 2,损失变为 4。 - 再测量。
f′(2)=2·2=4,仍为正,斜率减半。 - 再更新。
θ ← 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,振幅逐步增长。