try ai
科普
编辑
分享
反馈
  • 优化中的动量法

优化中的动量法

SciencePedia玻尔百科
核心要点
  • 动量法通过使用过去梯度的指数加权移动平均来加速优化,模拟了滚球的惯性。
  • 它能有效抑制在陡峭方向上的振荡,并加速在平缓、一致方向上的进程,从而高效地穿越“峡谷状”的损失景观。
  • Nesterov 加速梯度 (NAG) 在经典动量法的基础上进行了改进,它使用一个“前瞻”步骤来预测景观的变化并减少过冲。
  • 该方法可以被理解为一个物理系统(“重球”微分方程)的数值离散化,并且可以推广到抽象的几何空间。

引言

驾驭现代优化问题中广阔而复杂的景观,是机器学习和计算科学的核心挑战。其目标通常是找到一组能够最小化“损失函数”的最佳参数,这个任务类似于在丘陵地带中寻找最低点。虽然像梯度下降这样的简单策略提供了一条前进的道路,但它们那种步进式、无记忆的方法可能极其缓慢且低效,尤其是在现实世界问题中常见的狭长山谷中。本文旨在通过介绍动量法来弥补这一不足,这是一种能显著加速收敛的强大技术。

受到物理学中惯性概念的启发,动量法将优化过程从谨慎的步行转变为重球的果断滚动。在接下来的章节中,您将对这一技术有深入的了解。第一章“原理与机制”将阐述动量法背后的核心直觉、其数学公式,以及它如何克服标准梯度下降的局限性。随后,“应用与跨学科联系”一章将探讨其在训练深度神经网络中的实际应用、与连续物理系统的联系,以及它在从数值线性代数到抽象几何等不同科学领域中的惊人关联。

原理与机制

想象一下,你正站在一片广阔、丘陵起伏的景观中,四周笼罩着浓雾。你的目标是找到最低点,即最深山谷的谷底。你所拥有的只是一个能告诉你脚下地面陡峭程度和方向的特殊设备。这就是优化算法所面临的挑战。这片景观就是我们想要最小化的“损失函数”,而找到最低点就意味着为我们的模型找到最佳的参数集。

最简单的策略,即​​梯度下降​​,是观察最陡峭的下降方向——梯度——并朝那个方向迈出一小步。你一遍又一遍地重复这个过程。这是一个明智的策略,但有点像一个患有遗忘症的人下山;在每一步,你都会忘记你是如何到达那里的,只考虑你当前所站立的地面。正如我们将看到的,这可能会导致问题。

滚球类比

现在,如果不是步行,而是一个重球在这片景观上滚动呢?这就是​​动量法​​背后美妙的物理直觉。一个球不仅仅关心它当前所在位置的斜率。它有​​惯性​​。当它沿着一个长而一致的斜坡向下滚动时,它会累积速度。它的动量使其能够越过小颠簸,并帮助它冲过平坦的高原,而一个简单的步行者可能会在这些地方被困住。

我们可以将这个物理图像直接转化为数学。我们的球在时间步 ttt 的“速度”,我们称之为 vtv_tvt​,是根据两件事更新的:它之前的速度和当前的“重力”(梯度)。更新规则如下:

vt=βvt−1−η∇f(xt−1)v_t = \beta v_{t-1} - \eta \nabla f(x_{t-1})vt​=βvt−1​−η∇f(xt−1​)

然后,位置 xtx_txt​ 由这个新速度更新:

xt=xt−1+vtx_t = x_{t-1} + v_txt​=xt−1​+vt​

让我们来分解一下。∇f(xt−1)\nabla f(x_{t-1})∇f(xt−1​) 是梯度,即前一位置 xt−1x_{t-1}xt−1​ 处的最陡上升方向。η∇f\eta \nabla fη∇f 项前的负号确保我们是向下坡移动。参数 η\etaη,称为​​学习率​​,控制着这种“引力”对速度的影响程度。关键的新部分是 βvt−1\beta v_{t-1}βvt−1​。这里,vt−1v_{t-1}vt−1​ 是上一步的速度,而 β\betaβ 是​​动量参数​​,一个介于 0 和 1 之间的数字。这一项代表了惯性。它命令新的速度是旧速度的很大一部分。

整个过程在数学上等同于一个质量为 mmm 的物理小球在一个由函数 f(x)f(x)f(x) 定义的表面上滚动,同时受到一个与其速度成正比的阻力,如空气阻力。在这个类比中,动量参数 β\betaβ 与阻力系数和质量有关。一个接近 1 的 β\betaβ 值就像一个几乎没有摩擦的重球——它能很好地保持其动量。β\betaβ 为 0 则完全去除了动量项,我们就回到了简单的梯度下降,即我们那个患有遗忘症的步行者。

群体的智慧:梯度中的记忆

虽然滚动的球是一个强大的心智图像,我们也可以从纯粹信息的角度来理解动量。这个“速度”向量 vtv_tvt​ 究竟是什么?如果我们展开更新方程,我们会发现一些非凡之处:任何给定时间的速度,实际上是过去所有梯度的​​指数加权移动平均​​。

这样想:在每一步,你不仅仅是在听取当前梯度的建议。你是在对所有过去的梯度进行一次民意调查,但你把最新的建议视为最相关的,而旧建议的相关性呈指数级衰减。因此,速度向量不仅仅代表当前的斜率;它代表了近期斜率的共识趋势。它具有记忆。

驯服峡谷

这种记忆使得动量如此有效。现实世界中许多优化景观不像简单的碗。它们的形状像狭长、陡峭的峡谷或山谷。想象一个像 f(x1,x2)=50x12+0.5x22f(x_1, x_2) = 50x_1^2 + 0.5x_2^2f(x1​,x2​)=50x12​+0.5x22​ 这样的函数。这个景观在 x1x_1x1​ 方向上极其陡峭,但在 x2x_2x2​ 方向上非常平缓。最小值位于这个峡谷的底部。

我们那个患有遗忘症的步行者(标准梯度下降)在这里会陷入大麻烦。梯度几乎直接指向最陡峭的峭壁。所以,它会跨越峡谷迈出一大步,越过了谷底。在另一边,梯度又陡峭地指回来。它又迈出一大步,再次过冲。结果是在峡谷中疯狂地Z字形前进,沿着通往真正最小值的平缓斜坡,进展缓慢得令人沮愈。

现在,考虑我们带有动量的滚动球。当它Z字形前进时,跨越峡谷的梯度分量在每一步都指向相反的方向。在指数加权平均中,这些相反的分量倾向于相互抵消。然而,沿着峡谷底部的梯度分量虽然小但很一致——它们总是指向大致相同的方向。动量会累积这些微小而一致的信号。速度向量很快就会与峡谷底部对齐。

效果是双重的:动量​​抑制了​​在陡峭方向上的​​振荡​​,并​​加速了​​在平缓、一致方向上的​​进展​​。这使得它能够比标准梯度下降更有效地驾驭这些棘手的景观。在一些病态问题中,改进可能是惊人的。对于一个类似的二次峡谷,从简单的最速下降法切换到带有动量项的方法,仅需两步,最终位置就可以比前者更接近真实最小值超过 500 倍。通过记住过去的梯度,动量法有效地获得了对景观曲率的直觉,而无需计算复杂的二阶导数。

速度的危险:过冲与发散

当然,天下没有免费的午餐。使动量强大的东西——它的惯性——也可能成为一种负担。如果动量参数 β\betaβ 太高(太接近 1),“球”在沿着长坡向下滚动时可以累积巨大的速度。当它接近谷底时,斜坡变平,梯度变得非常小。但是球累积的动量可能如此之大,以至于它会完全​​过冲​​最小值,飞到另一边,然后才被重力拉回来。这可能导致在最小值附近振荡,算法反复越过解。β\betaβ 参数是控制这些振荡持续性的主要旋钮。

在更极端的情况下,动量可能导致完全失败。即使在一个简单的、完全凸的函数上,也可能选择不当的学习率和动量参数导致算法​​发散​​,位置飞向无穷大。在这样一种情况下,当标准梯度下降缓慢收敛到答案时,带有看似合理参数的动量法其位置可能会在数量级上爆炸。这作为一个重要的提醒,这些强大的方法需要仔细调整。

一个更聪明的球:Nesterov 的修正

几十年来,“重球”动量法一直是标准。然后,在 1983 年,一位名叫 Yurii Nesterov 的数学家提出了一个微妙但深刻的改进,现在被称为​​Nesterov 加速梯度 (NAG)​​。

标准动量法计算其当前位置 xtx_txt​ 的梯度,然后将其添加到其放大的旧速度上。这就像是说:“根据我目前的惯性和这里的斜率,这就是我要去的地方。”

Nesterov 的绝妙见解是改变了这个顺序。他说:“首先,让我们仅根据我旧的动量进行一次临时移动。这让我对即将着陆的位置有一个大致的了解。然后,我将计算那个未来的、前瞻位置的梯度来进行修正。”。

NAG 的更新规则如下:

vt=βvt−1−η∇f(xt−1+βvt−1)v_t = \beta v_{t-1} - \eta \nabla f(x_{t-1} + \beta v_{t-1})vt​=βvt−1​−η∇f(xt−1​+βvt−1​)

位置更新则保持不变:xt=xt−1+vtx_t = x_{t-1} + v_txt​=xt−1​+vt​。与经典动量规则相比,关键的区别是梯度的计算点:它是在“前瞻”位置 xt−1+βvt−1x_{t-1} + \beta v_{t-1}xt−1​+βvt−1​ 计算的,而不是在当前位置 xt−1x_{t-1}xt−1​。这是一种“三思而后行”的策略。通过探测其当前位置前方的梯度,算法可以预测景观的变化。如果它的动量即将把它带上一个陡峭的山坡,前瞻的梯度将会很大且方向相反,起到刹车作用,减少过冲效应。这种“更聪明”的修正通常使 NAG 比经典动量法收敛得更快、更可靠,尤其是在困难的函数上。这是一个美丽的例子,说明了视角上的微小改变如何能够带来性能上的显著飞跃,将我们简单的滚球变成一个更智能的复杂优化景观导航器。

应用与跨学科联系

掌握了动量的基本原理——即重球滚下山坡的想法——我们现在准备好踏上一段旅程。我们将离开我们入门示例中理想化的斜坡,去探索现实世界问题中崎岖、广阔的景观。正是在这里,动量的简单概念绽放成为一个强大而多功能的工具,揭示了机器学习、经典物理学和纯粹数学之间的深刻联系。我们将看到这一个想法如何被提炼、重新诠释和推广,不仅用于导航人工智能的数字世界,也用于导航构成现代科学基石的抽象空间。

滚动的艺术:驾驭复杂景观

想象一下,你不仅仅是在最小化一个简单的函数,而是在训练一个拥有数百万参数的深度神经网络。“代价函数”的“景观”不再是一个简单的碗,而是一个令人难以置信的复杂地形,充满了狭长的峡谷、平坦的高原和陡峭的悬崖。一个只看当前位置最陡峭下降斜率的简单梯度下降算法,其行为就像一个没有地图的紧张徒步者。它会疯狂地在峡谷的陡壁上Z字形下降,沿着其平缓倾斜的谷底,进展极其缓慢。

这正是动量展现其真正价值的地方。速度项充当了近期方向的记忆。当下降到峡谷中时,指向陡壁的梯度分量在符号上振荡,因此这些方向上的速度会随着时间的推移而被抑制。相反,沿着峡谷底部的梯度分量始终指向同一个方向。动量得以累积,球沿着这条稳定前进的路径飞速前进。这种双重效应——抑制振荡和在持续方向上加速——是动量法的标志,也是其在多维优化中成功的关键。

但我们可以让我们的滚球变得更聪明。经典动量法首先计算其当前位置的梯度,然后将这个推动力加到其累积的速度上。Nesterov 的加速梯度 (NAG) 在这个顺序上引入了一个微妙但深刻的改变。它会问:“鉴于我当前的速度,我片刻之后会到哪里?” 它首先朝着当前动量的方向迈出一个“前瞻”步骤。然后,从那个预测的未来位置,它计算梯度并进行修正。这就像一个球能够预测其轨迹,并根据它即将遇到的斜坡来修正其路线,而不是它已经所在的斜坡。这种远见使其能够在越过最小值后爬上另一侧的山坡前更有效地减速,从而带来更稳定且通常更快的收敛。

即使有了这些改进,旅程的最初时刻也可能充满危险。当优化过程开始时,参数通常是随机初始化的,初始梯度可能巨大且不稳定。一个大的、预设的动量参数可能会导致我们的球朝着一个狂野、不稳定的方向飞驰而去。为了应对这种情况,从业者开发了一种巧妙的策略,称为“动量预热”。算法以一个小的动量参数开始,其行为更像简单、谨慎的梯度下降。随着迭代进入景观中更平稳的区域,梯度变得更可靠,动量参数会逐渐增加到其目标值。这使得算法能够在混乱的早期阶段享有小步幅的稳定性,并在后期享有动量的全部加速能力。

如果尽管我们尽了最大努力,球的动量还是让它走得太远,越过了山谷并开始在另一边向上滚动怎么办?我们可以为我们的算法配备一种“常识”。我们可以监控当前速度和当前梯度之间的关系。如果球正在上坡移动,其速度向量将与“重力”(负梯度)的方向相反。速度和梯度的点积 gt⋅vtg_t \cdot v_tgt​⋅vt​ 将变为负值。检测到这种“过冲”情况可以触发动量重启:我们只需将其速度重置为零,让球完全停下来,然后让它仅根据新的梯度重新开始滚动。这种自适应策略可以防止优化器在大型、无效的振荡上浪费时间。

这种振荡行为也揭示了一个奇特的微妙之处。人们可能认为,进展的一个好迹象是梯度的范数 ∥∇f(xk)∥\|\nabla f(x_k)\|∥∇f(xk​)∥ 持续减小。然而,对于动量法,情况并非总是如此!当球在最小值附近振荡时,它的速度可能会带着它穿过梯度最低的点。当它移开并开始攀登对面的坡壁时,即使整体轨迹正向解盘旋收敛,梯度也会暂时再次增加。这告诉我们,仅仅观察梯度并不是跟踪收敛的万无一失的方法;动量的动力学比简单的单调下降更丰富、更复杂。

从离散步骤到连续运动:一个统一的视角

到目前为止,我们都是用离散的步骤来描述我们的算法:由计算机执行的更新规则。但这些规则从何而来?最优雅的答案来自回归物理学。我们可以将整个优化过程建模为一个由微分方程控制的连续物理系统。这就是“重球”模型,由牛顿第二定律描述了一个质量为 mmm 的球在重力和粘性阻力作用下在表面 f(x)f(x)f(x) 上滚动: mx¨(t)+γx˙(t)+∇f(x(t))=0m \ddot{x}(t) + \gamma \dot{x}(t) + \nabla f(x(t)) = 0mx¨(t)+γx˙(t)+∇f(x(t))=0 这里,x(t)x(t)x(t) 是球的位置,x˙(t)\dot{x}(t)x˙(t) 是它的速度,x¨(t)\ddot{x}(t)x¨(t) 是它的加速度,γ\gammaγ 是摩擦系数。

从这个单一、优雅的方程中,我们的优化算法作为使用有限时间步长在计算机上模拟这种物理现实的不同方式而出现。经典动量法可以被看作是一种“显式”数值离散化,其中当前时间步的力被用来计算下一个时间步的状态。Nesterov 的方法,以其前瞻步骤,对应于一种更稳定的“半隐式”离散化。这种联系是深刻的。它告诉我们,我们在机器学习中发现的技巧和启发式方法并非任意;它们是在重新发现数值物理学的基本原理。寻求更好的优化算法,在某种程度上,就是寻求更好地模拟自然的方法。

超越山丘:动量在更广阔的科学世界中的应用

动量视角的威力远远超出了训练神经网络的范畴。科学和工程中的许多问题都可以被看作是寻找一个函数的最小值。例如,解决一个大型线性方程组,Ax=bAx=bAx=b——从结构工程到流体动力学等计算领域的基石——等同于最小化二次函数 f(x)=12xTAx−bTxf(x) = \frac{1}{2}x^T A x - b^T xf(x)=21​xTAx−bTx。

将重球法应用于这个问题,将其与数值线性代数中一个著名的算法家族——克雷洛夫子空间方法联系起来。虽然重球法提供了极好的加速效果,但在最严格的意义上它并非“最优”的。著名的共轭梯度法 (CG),它也可以被解释为一个在每一步自适应选择参数的类动量算法,通过确保其搜索方向以一种特殊的方式相互独立,从而达到一种最优性。将重球法与 CG 进行比较,揭示了一个引人-胜的算法谱系,所有这些都建立在使用过去信息来加速寻找解的核心思想之上。

此外,动量的原理并不局限于特定的更新策略。在某些情况下,一次性更新所有参数(一个完整的梯度步长)在计算上是昂贵的。坐标下降法提供了一种替代方案:一次只更新一个参数(或一小部分参数)。加速的思想也可以应用在这里。通过利用先前迭代的历史来形成一个外推点,我们可以对单个坐标应用一个类似 Nesterov 的更新,即使在这种分块的优化方案中也能加速收敛。这展示了动量概念的模块化和广泛适用性。

也许最令人惊叹的推广将我们带入了抽象几何的领域。到目前为止,我们的球一直在一个“平坦”的欧几里得空间 Rn\mathbb{R}^nRn 上滚动。但是,如果我们希望优化的参数并不生活在一个平坦的空间中呢?如果它们生活在一个曲面上,一个黎曼流形上呢?

这并非纯粹的数学幻想。在统计学中,协方差矩阵必须是对称正定的 (SPD)。在广义相对论中,定义时空曲率的度量张量就具有此属性。所有这类矩阵的集合不是一个简单的向量空间,而是一个具有其自身距离、方向和“直线”(测地线)规则的曲面流形。

令人惊奇的是,滚球的物理直觉可以被移植到这些奇特的景观中。要创建一个黎曼动量法,我们只需将我们的欧几里得概念替换为它们的流形对应物。向前一步不再是简单的向量加法,而是沿着测地线行进的“指数映射”。当球从一个点移动到另一个点时,它的速度向量必须通过“平行移动”进行仔细调整,以考虑空间的曲率。通过将梯度、速度和更新等概念推广到这种几何设置中,我们可以让一个球在 SPD 矩阵的流形上滚动,例如,找到最小化某个目标函数的那个矩阵。这种从简单的山丘到弯曲的数学空间的终极抽象,展示了动量法的真正力量和美感:一个简单的物理思想,在现代科学广阔而多样的景观中引起共鸣。