标准梯度下降方法(我们在第1章中回顾过)通常依赖于一个单一的超参数:学习率,常用 $\eta$ 表示。该值调整梯度 $\nabla J(\theta)$ 的大小,以确定我们在每次迭代中在参数空间中迈出的步长:$\theta_{t+1} = \theta_t - \eta \nabla J(\theta_t)$。尽管简单,但选择一个有效的固定 $\eta$ 是一个重要的实际难题。主要问题在于训练过程对这个单一值的敏感性。如果 $\eta$ 设置得太小,优化器会迈出微小的步子。收敛会变得非常缓慢,可能需要不切实际的迭代次数才能达到一个令人满意的最小值。想象一下,你试图下山,但每一步都只有鹅卵石那么大;你最终会到达,但这将花费很长时间,并且你可能会停滞在相对平坦的区域(高原),而这些区域并非真正的谷底。相反地,将 $\eta$ 设置得太大则会引入不稳定性。优化器可能会完全跳过最小值,在最优区域来回振荡而无法稳定下来。在更糟的情况下,更新步长可能非常大,以至于损失函数反而增加,导致发散。想象一下从山上跳下;你可能会直接跳过最低点,甚至把自己抛下悬崖。{ "layout": { "title": "固定学习率 (\u03b7) 对收敛的影响", "xaxis": { "title": "迭代次数" }, "yaxis": { "title": "损失", "type": "log" }, "hovermode": "closest", "legend": { "title": "学习率 (\u03b7)" } }, "data": [ { "x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "y": [10.0, 8.0, 6.4, 5.1, 4.1, 3.3, 2.6, 2.1, 1.7, 1.3, 1.1, 0.9, 0.7, 0.6, 0.5, 0.4, 0.3, 0.25, 0.2, 0.16, 0.13], "mode": "lines", "name": "\u03b7 = 0.01 (过小)", "line": { "color": "#495057" } }, { "x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "y": [10.0, 5.0, 2.5, 1.2, 0.6, 0.3, 0.15, 0.08, 0.04, 0.02, 0.01], "mode": "lines", "name": "\u03b7 = 0.1 (良好)", "line": { "color": "#37b24d" } }, { "x": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], "y": [10.0, 1.0, 9.0, 1.5, 8.0, 2.0, 7.0, 2.5, 6.0, 3.0, 5.0], "mode": "lines", "name": "\u03b7 = 0.9 (过大/振荡)", "line": { "color": "#f03e3e" } }, { "x": [0, 1, 2, 3], "y": [10.0, 20.0, 40.0, 80.0], "mode": "lines", "name": "\u03b7 = 1.1 (发散)", "line": { "color": "#f76707" } } ] }凸问题上不同固定学习率的收敛行为。小的学习率收敛缓慢,大的学习率可能振荡或发散。寻找合适的学习率通常需要大量的手动调整和实验,这可能导致计算成本高昂。此外,最优的固定学习率本身可能根本不存在。损失的特点在训练过程中会发生变化。在早期,当参数远离最优值时,更大的步长可能有助于快速进展。然而,当训练接近最小值时,通常需要更小、更谨慎的步长来避免跳过。单一的 $\eta$ 无法有效地适应这两种情况。这种“一刀切”的方法也忽略了针对参数进行特定调整的潜在优势。假设一个处理稀疏特征文本数据的模型。与常见特征相关的参数可能会收到频繁的、可能带有噪声的梯度更新。稀有特征的参数则接收不频繁但可能信息量很大的更新。对于频繁更新的参数使用较小的更新步长(以平均噪声并防止不稳定性)可能更有利,而对于稀疏更新的参数使用较大的更新步长(以确保它们能从有限的数据中学到有效信息)。全局的固定 $\eta$ 对所有参数一视同仁,无论它们的更新频率或梯度的大小如何,这会阻碍高效的学习。最后,深度学习中损失表面的复杂非凸性质(我们在第1章中讨论过)加剧了这些问题。固定学习率在应对鞍点(梯度接近零但并非最小值)和大面积高原(平坦区域)时会遇到很大困难。小的 $\eta$ 可能导致优化器以不切实际的缓慢速度爬过这些特征。大的 $\eta$ 可能有助于更快地摆脱高原,但增加了振荡或发散的风险,特别是在穿越狭窄的谷地或接近尖锐的最小值时。选择和应用单一固定学习率的这些固有困难促使人们需要更精巧的方法。以下章节中讨论的AdaGrad、RMSprop、Adam及其相关算法通过在训练过程中动态调整学习率(通常是针对每个参数进行调整),直接解决了这些局限性。这种适应性通常能带来更快的收敛,适用于更广泛的问题和架构,且通常需要更少的手动调整。