梯度下降

大学计算机科学针对二变量损失函数、使用精确梯度的固定步长优化算法

使用通行证解锁此实验

通行证可解锁网站上的所有模拟,包括课堂演示模式。下方的教学笔记仍向所有人免费开放。

一次性付款,无需订阅。

关于此实验

训练神经网络意味着沿着损失曲面向下移动。梯度下降法沿着梯度的反方向迈出一步,步长由学习率缩放。这个简单的规则背后隐藏着许多行为:步子太小会进展缓慢,步子太大会振荡甚至发散;狭窄的谷底会让它走出之字形,也可能使它陷入局部最小值。选择一个曲面并点击起点,然后在地图和损失曲线上逐步比较普通梯度下降法、动量法和 Adam。

学习目标

  • 写出梯度下降的更新公式,并解释学习率的作用
  • 推导二次损失的稳定性界限 η < 2/λ_max,并进行检验
  • 解释为什么病态谷底会使梯度下降走出之字形,以及动量如何提供帮助
  • 描述 Adam 如何利用梯度的滑动平均重新缩放各个坐标
  • 识别收敛到的是局部最小值,而非全局最小值

使用方法

  1. 1在梯度下降法中选择“圆形碗”。尝试将学习率设为 0.1、1 和 2.1,并描述这三条路径。
  2. 2选择“狭窄山谷”。找出仍能收敛的最大学习率,并将其与滑块下方显示的稳定极限进行比较。
  3. 3在“狭窄山谷”中将 η 设为 0.05。数一数梯度下降法达到损失 1e-6 所需的步数,然后切换到 Momentum,将 β 设为 0.9,再数一次。
  4. 4选择“香蕉山谷”(Rosenbrock 函数)。比较运行 300 步后梯度下降法、Momentum 和 Adam 的表现。
  5. 5选择“两个极小值”。从默认起点运行梯度下降法会停在右侧较浅的谷底。在山脊两侧点击设置起点:哪些起点能到达更深的谷底?
  6. 6返回默认起点,切换到 Momentum,并将 β 设为 0.9、η 设为 0.1。为什么现在路径能滚过山脊?

模型

学习率为 η 的梯度下降法
重球动量法:速度会记住过去的梯度
Adam:按坐标使用经过偏差校正的平均值,β₂ = 0.999
对于 Hessian 特征值为 λᵢ 的二次函数,每个方向每步都会按 1 − ηλᵢ 的比例收缩。

假设

  • 梯度是精确的。在实际训练中,梯度由小批量数据估算,因此会引入噪声(随机梯度下降)。
  • 损失曲面是固定的二元函数:圆形碗面 ½(x² + y²)、狭窄山谷 ½(0.5x² + 5y²)、Rosenbrock 函数 (1 − x)² + 10(y − x²)²,以及倾斜的双阱函数。
  • 每次运行都使用固定学习率,并在 300 步后停止。没有学习率调度。
  • 运行是确定性的:相同的起点和设置总会得到相同的路径。

在课堂上试试这个实验

  1. Q1在狭窄山谷中,稳定性极限由陡峭方向决定,但进展受平缓方向限制。请用因子 1 − ηλ 加以解释。
  2. Q2为什么动量法每步使用相同的梯度,却仍能更快收敛?
  3. Q3Adam 的步长大致为 η,不受曲面陡峭程度的影响。这在什么情况下是优势,又在什么情况下会成为问题?
  4. Q4神经网络的损失函数有数百万个维度。你认为局部极小值和鞍点,哪一个会成为更大的障碍?为什么?
  5. Q5请提出一种学习率调度方案,使模型既能在早期快速取得进展,又能精确收敛。

常见问题

为什么学习率过大会导致损失增大?

每一步都会越过谷底,落到对面更高的斜坡上。对于二次函数,每次越过都会使距离乘以 |1 − ηλ|;当 η 大于 2/λ 时,这个乘数就大于 1。

在狭窄的谷底,动量有什么作用?

横穿谷底的锯齿状梯度方向彼此相反,会在累积速度中相互抵消;而沿着谷底方向的较小梯度都指向同一方向,因此会相加。这样一来,运动轨迹会变得平直,并沿着谷底加速前进。

Adam 总是比梯度下降更好吗?

不。Adam 稳健且几乎不需要调参,因此常用于训练网络;但对于简单且条件良好的问题,普通梯度下降或动量法可能收敛得更快,或得到更好的解。