try ai
科普
编辑
分享
反馈
  • 学习优化

学习优化

SciencePedia玻尔百科
核心要点
  • 优化被描述为在损失地貌中寻找最小值的过程,而像 SGD 和 Adam 这样的传统手动设计的优化器存在固有的局限性。
  • 学习优化通过将优化器本身参数化为神经网络,并利用自动微分在特定问题领域上对其进行训练,从而克服了这些局限性。
  • 自适应优化的原理是普适的,出现在各种不同的系统中,如即时 (JIT) 编译器、人工智能迁移学习,乃至生态学中的自然选择。
  • 深刻的数学联系将优化算法与物理系统联系在一起,例如动量法与梯度流之间的等价性,或量子模拟与二阶优化器之间的等价性。

引言

现代人工智能和计算科学的核心是优化的挑战:在充满可能性的宇宙中寻找最佳解。这个过程通常被形象地比作在一片广阔、崎岖的山地中寻找最低谷的旅程。虽然我们已经开发了像随机梯度下降和 Adam 这样强大的通用工具来探索这些地貌,但“没有免费午餐”定理提醒我们,没有单一算法能对所有问题都达到最优。这一差距催生了一个新的前沿领域:如果我们不再手动设计单一的导航策略,而是去学习优化这门艺术本身,会怎么样?

本文将描绘出穿越这个激动人心领域的路线。我们将首先探索优化的基本​​原理与机制​​,将梯度、Hessian 矩阵和学习率等抽象概念转化为一个徒步者在复杂地貌中导航的直观故事。你将了解到为什么简单的方法会举步维艰,以及动量和自适应等思想如何试图创造更智能的导航者。随后,在​​应用与跨学科联系​​部分,我们将发现这种学习和自适应的逻辑并不仅限于机器学习,而是我们技术和自然界中一种基本的内在模式,揭示了人工智能、软件工程、物理学乃至进化生物学之间令人惊讶的联系。

原理与机制

要理解“学习去优化”意味着什么,我们必须首先掌握优化的含义。从本质上讲,优化是一段旅程——在广阔复杂的地貌中寻找最低点。想象你是一名身处浓雾中的徒步者,站在山腰上,目标是到达山谷的最低点。这片地形就是你问题的数学化身,我们称之为​​损失函数​​。任何一点的高度都代表了某个特定解的“成本”或“误差”。你的位置由一组参数定义,你的任务就是找到能让你处于绝对最低海拔的那组参数。

问题的形状

这片地貌是什么样子的?对于徒步者来说,它由岩石和土壤决定。对于优化问题,它由其数学结构决定。让我们考虑最简单的有趣地貌——一个完美的碗。在数学上,这是一个​​二次函数​​,我们可以写成 f(w)=12wTHw−bTwf(\mathbf{w}) = \frac{1}{2}\mathbf{w}^T \mathbf{H} \mathbf{w} - \mathbf{b}^T \mathbf{w}f(w)=21​wTHw−bTw。这里,w\mathbf{w}w 是一个表示你位置(模型参数)的向量,而矩阵 H\mathbf{H}H 和向量 b\mathbf{b}b 定义了这个碗的形状和位置。

为什么选择这个特定函数?因为,就像地球表面的一小块区域看起来是平的一样,任何光滑、弯曲的函数,只要你放大到足够近的尺度,看起来都像一个二次型的碗——这是泰勒定理告诉我们的事实。这使得二次函数成为优化的“氢原子”:一个简单、可解的案例,却揭示了根本性的真理。

为了导航,你需要一个指南针。在优化中,你的指南针是​​梯度​​,记作 ∇f\nabla f∇f。梯度是一个始终指向最陡峭上升方向的向量。要向下走,你只需朝相反的方向,即 −∇f-\nabla f−∇f 行进。那么,山谷的最低点在哪里呢?它在地面完全平坦的地方——也就是梯度为零的地方。对于我们的二次型碗,这个条件 ∇f=Hw−b=0\nabla f = \mathbf{H}\mathbf{w} - \mathbf{b} = \mathbf{0}∇f=Hw−b=0 给了我们一个明确的目标:最小值在解线性系统 Hw=b\mathbf{H}\mathbf{w} = \mathbf{b}Hw=b 的点 w\mathbf{w}w 处。

但要使这里成为真正的谷底,而不是鞍点(像薯片那样)或山脊,地貌必须从最低点向各个方向都向上弯曲。这个性质由 ​​Hessian 矩阵​​决定,它是二阶导数矩阵——对于我们简单的碗,Hessian 矩阵就是矩阵 H\mathbf{H}H。碗在任何地方都向上弯曲的条件是 Hessian 矩阵必须是​​正定​​的。这意味着无论你从最低点朝哪个方向迈出一步,你的海拔都会增加。一个正定的 Hessian 矩阵保证了我们的徒步者找到了一个唯一的全局最小值,而不仅仅是卡在了下山途中的一个平坦台地上。

我们可以通过绘制等高线图来可视化这片地貌。图上的这些线,称为​​水平集​​,连接了所有等高点。对于一个二维的二次型碗,这些水平集是椭圆。这些椭圆的形状和方向告诉了你关于问题难度的一切。如果椭圆是完美的圆形,那么沿着反梯度方向走会直接指向中心。但如果椭圆又长又窄——形成一个陡峭狭窄的峡谷——最陡峭的下降方向将主要指向峡谷两侧的峭壁。沿着这个方向走会导致你来回曲折,沿着峡谷底部前进得异常缓慢。这些椭圆的形状完全由 Hessian 矩阵 H\mathbf{H}H 决定。椭圆的轴与 H\mathbf{H}H 的特征向量对齐,其拉伸程度由其特征值决定。一个峡谷就是一个其 Hessian 矩阵是​​病态​​的地貌,即某些特征值远大于其他特征值。

一门不完美的下降艺术

我们的徒步者最基本的策略是​​梯度下降​​。在每一步,你检查坡度(计算梯度),朝着最陡的下坡方向迈出一小步,然后重复。更新规则非常简单:wk+1=wk−η∇f(wk)\mathbf{w}_{k+1} = \mathbf{w}_k - \eta \nabla f(\mathbf{w}_k)wk+1​=wk​−η∇f(wk​),其中 η\etaη 是​​学习率​​,控制你的步长。

然而,在现代机器学习中,“真实”的地貌是由数百万甚至数十亿数据点的平均损失形成的。计算真实梯度就像为了迈出一步而勘测整个山脉一样。这代价高得令人望而却步。所以,我们作弊。通过​​随机梯度下降 (SGD)​​,我们仅用一个数据点或一小​​批量​​数据来估计梯度。这就像根据你脚下的一小块地来判断整座山的坡度。

这使得整个旅程变得极其混乱。你认为“向下”的方向可能只是局部正确,而对于整体地貌来说,你实际上可能在走上坡路!SGD 的单步完全有可能增加总损失。但这种噪声不仅仅是麻烦,它也是一个特性。深度学习的真实地貌不是简单的碗,而是拥有无数山谷(局部最小值)的广阔、崎岖的山脉。一个简单的梯度下降算法可能会走进它遇到的第一个山谷并被困住。而 SGD 带来的随机、有力的“踢动”可以将优化过程从这些浅的局部最小值中震出,帮助它探索更多的地貌,并找到一个更深、更好的山谷。

这提出了一个诱人的问题:是否存在一个完美的、普适的导航策略?一个能高效找到任何给定地貌最低点的大师算法?著名的​​没有免费午餐 (NFL) 定理​​给出了一个发人深省的答案:没有。对于你能发明的任何优化算法,总有人能设计出一个怪异的、病态的地貌来彻底挫败它。如果你对所有可能的问题取性能平均值,没有算法比随机猜测更好。

但这里有一个让机器学习成为可能的关键洞见:我们不关心所有可能的问题。我们关心的是那些描述我们世界的问题——识别人脸、翻译语言、预测天气。这些问题及其对应的损失地貌具有结构。它们不是任意的、随机的函数。摆脱 NFL 定理的途径是设计能够利用这种结构的算法。午餐不是免费的,但我们可以通过将关于问题领域的知识构建到我们的优化器中来“支付”它。

迈向更智能的导航者

我们如何构建一个更智能的徒步者?我们可以赋予它两种类似人类的能力:​​记忆​​和​​自适应​​。

一个简单的梯度下降算法没有记忆;它的下一步仅取决于当前位置。一种更复杂的方法引入了​​动量​​。想象一个重球在山坡上滚动,而不是一个没有记忆的徒步者。它在沿着持续的斜坡移动时会积累速度,其动量有助于平滑 SGD 带来的微小、嘈杂的颠簸,并冲过浅的局部最小值。更新规则现在包含了一个来自前一步的项,即对它前进方向的记忆。

这不仅仅是一个聪明的技巧,它也呼应了物理学中的一个深刻原理。梯度下降的路径可以被看作是对一个粒子在由梯度描述的力场中运动的简单数值模拟(欧拉法)。这被称为​​梯度流​​。使用历史信息的更高级优化器,如动量法,只是模拟这个物理系统的更复杂方案,就像计算科学中使用的 ​​Adams-Bashforth 方法​​。它们利用过去轨迹的信息来更好地预测下一步该去哪里。这种美妙的对应关系将优化的世界与经典运动力学统一了起来。

另一个关键思想是​​自适应​​。一个地貌在一个方向上可能是平缓起伏的平原,而在另一个方向上则是险峻陡峭的悬崖。对所有方向使用相同的步长 (η\etaη) 似乎很天真。自适应算法,其中最著名的是 ​​Adam 优化器​​,试图解决这个问题。Adam 根据每个参数梯度的平方的移动平均值,分别为每个参数维护一个“波动性”的估计。然后,它用这个波动性来归一化每个参数的更新,从而有效地在陡峭如悬崖的方向上采取更小、更谨慎的步骤,而在平坦的平原上迈出更长、更自信的步伐。

然而,即使是 Adam 也有其致命弱点。它的自适应是​​对角​​的;它独立地处理每个参数。它假设地貌的峡谷和山脊都与坐标轴完美对齐。但如果峡谷是斜向的呢?Adam 会看到“南北”和“东西”方向都很陡峭,并谨慎地减小这两个方向的步长,却没有意识到沿着峡谷底部的斜向路径是容易走的。它对世界的内部地图过于简单,忽略了 Hessian 矩阵非对角元素中捕获的参数之间的相关性。完美的导航者——​​牛顿法​​,使用完整的 Hessian 逆矩阵将椭圆形的峡谷转换为圆形的碗,使其能够(对于二次函数)一步跳到最小值。但对于一个拥有十亿参数的模型,计算和求逆 Hessian 矩阵是一个不可能实现的梦想。

学习去优化

这把我们带到了前沿。我们讨论过的方法——从动量法到 Adam——都是杰出的、手动设计的启发式方法。它们是通用工具。但如果我们能专门为我们期望在(比如说)训练语言模型时遇到的那一类地貌设计一个优化器呢?

这就是​​学习优化​​的核心思想。我们可以不用固定的更新规则,而是将优化器本身参数化,例如,将其参数化为一个小型神经网络。这个“优化器网络”接收优化的状态(如当前梯度、动量等)并输出参数更新。

我们如何训练这样一个优化器呢?通过让它解决我们目标领域中的数千个优化问题,并根据速度和准确性奖励它。要做到这一点,我们需要计算优化器自身参数的变化如何影响最终结果。这需要对整个、展开的优化轨迹进行微分——一个梯度的梯度。这个看似不可能的任务,因为支撑深度学习本身的技术而变得可行:​​自动微分​​。这种能够算法化地计算任何复杂计算图(包括矩阵求逆等操作)导数的能力,为我们像训练任何其他神经网络一样训练优化器提供了必要的机制。

我们也可以从另一个角度来处理这个问题:与其只学习一个更好的导航者,我们还可以学习让地貌本身更易于导航。像 ​​L2L_2L2​ 正则化​​这样的技术就以一种简单的方式做到了这一点。它在现有的损失函数上增加了一个完美的二次型碗。这具有平滑狂野、非凸区域的效果,并能确保地貌有一个明确定义的最小值,从而使优化器的工作大大简化。

我们正在从一个手工打造优化工具的时代,走向一个从数据中学习它们的时代。通过借鉴物理学、数值分析和计算机科学的深刻原理,我们正在构建能够学习它们要解决的问题本身结构的算法。我们不仅仅是在探索地貌,我们正在学习成为其地形的大师。

应用与跨学科联系

在探索了学习优化的原理之后,我们可能会倾向于认为它们是抽象的数学构造,仅限于算法和计算机科学理论的世界。但这就像只研究和声定律却从不听交响乐一样。真正的魔力在于我们看到这些原理在实践中发挥作用。在本章中,我们将走向广阔的世界,去发现自适应优化的逻辑不仅是我们构建的工具,更是一种交织在我们使用的技术、我们实践的科学乃至自然界本身结构中的基本模式。这将是一段从你电脑的硅芯片核心到生命蓝图的旅程。

机器中的幽灵:智能编译器与运行时

你是否曾注意到,一段软件,特别是用 Java 或 JavaScript 等语言编写的软件,似乎会随着你使用得越多而“预热”并变得越来越快?这并非你的想象。这是一个聪明的“机器中的幽灵”——一个即时 (JIT) 编译器——在工作,它在你程序运行时不断学习并动态优化它。这个运行时系统就像一个精明的工厂经理,监管着一个巨大的生产车间。

经理首先识别出流水线上哪些部分最繁忙——那些被反复执行的“热”循环和函数。将注意力倾注在一台一天只用一次的机器上是浪费资源,但升级那些持续运行的机器则能带来巨大的利润。这种策略被称为分层编译,随着系统学习到某段代码的重要性,它会被逐步提升到更高、更激进的优化层级。一个函数可能开始时被缓慢地解释执行(第 0 层),然后进行一次快速粗略的编译(第 1 层),最后,如果它证明了自己的价值,就会接受全面、耗时的优化处理,成为一台高性能机器(第 2 或第 3 层)。

这位经理所做的决策异常复杂,常常涉及精细的成本效益分析。想象一下,编译器需要执行寄存器分配,这是一项关键任务,即将变量分配给处理器数量有限的超快内存插槽——寄存器。它有两种策略:一种是轻量级、运行速度快的算法(我们称之为 LLS),另一种是功能更强大、带有启发式增强的算法(HLS),后者效果更好但运行时间更长。它应该选择哪一个?系统会做出一个经济决策。它学习一个关于寄存器压力 r^\hat{r}r^ 的估计值——这是一个衡量有多少变量在竞争寄存器的指标。然后,它会权衡更好的算法带来的一次性额外编译成本 CH−CLC_{H} - C_{L}CH​−CL​ 与预期的未来收益。这些收益取决于代码将运行多少次 MMM、一次“溢出”(将变量存储到较慢内存中)的成本,以及更好算法所提供的溢出减少因子 α\alphaα。只有当寄存器压力 r^\hat{r}r^ 超过一个特定阈值,即未来的回报证明了前期成本的合理性时,编译器才会投资于更昂贵的 HLS。

这位运行时经理不仅是一位谨慎的会计师,也是一位赌徒。它可以根据过去的行为进行推测性优化。例如,在一个访问数组 a[i] 的循环中,语言要求在每次迭代时都检查索引 i 是否在数组边界内。这样做安全,但缓慢。JIT 编译器可能会观察到,在之前的数千次运行中,访问过的最大索引 imax⁡i_{\max}imax​ 是 42。然后它可以打个赌:“我将生成一个不带边界检查的特殊、超快速版本的循环,但我会在入口处设置一个哨兵:if (loop_limit > 42) then do not enter。”如果赌赢了,性能增益是巨大的。但如果程序的行为改变,突然需要访问索引 50 怎么办?哨兵失效。系统必须执行一次“去优化”,优雅地中止专用代码,回退到带有所有检查的慢速但安全的版本。它学到了宝贵的一课,并且会在考虑下一次下注之前更新它的档案——也许将新的 imax⁡i_{\max}imax​ 设置为 50。这种推测、哨兵和去优化之间的相互作用,正是现代动态语言能达到惊人速度的高空走钢丝般的表演。

当然,管理哲学不止一种。一些系统,比如我们浏览器中的 JavaScript 引擎,是激进的投机者,不断地进行和修正赌注,以榨取每一滴性能,即使冒着去优化的风险。另一些,比如 WebAssembly 的运行时,则更为保守。它们优先考虑可预测、稳定的性能,通过坚持那些保证安全的优化,避免了推测和去优化的复杂舞蹈。哪种方法更好?这完全取决于工作负载。对于行为非常稳定、可预测的程序(高调用图稳定性 SSS 和低类型反馈熵 HHH),投机性赌徒会大获全胜。对于一个混乱、不可预测的程序,保守会计师的稳定性能可能会更胜一筹。

学会学习:优化作为科学与人工智能的工具

学习优化的力量远不止于让我们的代码运行得更快。它现在已成为创造人工智能这一宏伟挑战的核心。在这里,这个思想常常被提升到更高的抽象层次:我们使用优化来学习如何使学习本身更有效。

考虑“迁移学习”问题。你花了一大笔钱训练了一个机器学习模型来识别在美国拍摄的汽车照片。现在你希望它能处理来自英国的照片。汽车看起来不一样,车牌不一样,而且他们靠路的另一侧行驶。数据分布已发生变化。我们能否智能地调整已有的知识,而不是从头开始?答案是肯定的。我们可以设计一个系统来学习一个重要性加权函数,一种“汇率” w(x)=ptarget(x)/psource(x)w(x) = p_{target}(x) / p_{source}(x)w(x)=ptarget​(x)/psource​(x),它告诉我们如何重新加权美国的样本,使其在统计上能代表英国的领域。优化问题是找到能使两个数据集看起来尽可能相似的权重。然而,这个过程充满风险。没有仔细的正则化和约束,优化器可能会找到一个退化的解,例如,将其所有信心都寄托在一个不具代表性的单一例子上。构建一个适定、稳定的优化问题是成功学习如何迁移知识的关键。

这种“元学习”以多种形式出现。机器学习中最具挑战性的任务之一是超参数优化——为学习算法本身找到正确的旋钮和设置。这通常被视为一门玄学,但我们可以通过将其构建为另一个优化问题来为其引入科学性。一个异常优美的类比来自一个意想不到的地方:统计物理学。想象一下,试图找到制作蛋糕的最佳配方(最优超参数)。你可以在数千个厨房(模型的副本)里,每个厨房都在不同的“温度”下烘焙。低温厨房是保守的,只对已知的好配方做微小、谨慎的改动。高温厨房则是狂野和探索性的,尝试像在糖霜里加墨西哥辣椒这样的疯狂组合。它们的蛋糕(验证损失)通常很糟糕,但它们探索了各种可能性。副本交换的魔力在于,你周期性地提议在热厨房和冷厨房之间交换配方。一个来自热厨房的激进但有前途的想法可以被传递给冷厨房进行仔细的提炼。这使得整个系统能够逃离平庸配方的“局部最优”,发现真正新颖美味的解决方案。在这里,温度不是物理上的,而是探索-利用权衡的一个控制旋钮,这是所有学习中的一个核心主题。

对这种统一性原理的探索常常揭示不同领域之间惊人的联系。在计算工程中,有限元法 (FEM) 是一个强大的范式,用于模拟复杂的物理系统,如承受载荷的桥梁。其核心思想是将复杂的物体分解为简单、重复的“单元”,为每个单元计算一个属性(如局部刚度矩阵),然后将这些局部部分“组装”成一个描述整个结构的全局矩阵。这与机器学习有什么关系呢?事实证明,在大规模机器学习优化中,一个关键任务是计算一个称为 Hessian 的巨大二阶导数矩阵。对于许多常见模型,目标函数的结构与 FEM 问题中的能量结构完全相同:都是局部贡献的总和。这意味着我们可以直接从工程学中借鉴组装的思想。通过为我们模型的每个部分计算一个小的“单元 Hessian 矩阵”,然后根据连接图将它们组装起来,我们就可以以一种大规模并行且高效的方式构建全局 Hessian 矩阵。这是一个绝佳的例子,说明了计算中的一个深层结构模式如何能弥合建造桥梁和训练人工智能之间的鸿沟。

终极学习者:大自然的优化算法

我们已经在我们的机器和算法中看到了学习优化。但所有优化过程中最深刻、运行时间最长的,是生命本身。当我们研究生态学和进化时,我们实际上是在逆向工程自然界宏大学习算法——自然选择——所找到的解决方案。

考虑生活史理论中的一个基本权衡:一个生物体应该产生许多小的后代,还是少数大的后代?一条鱼可能会产下数百万个微小的卵,而一头鲸鱼则生下一个巨大的幼崽。可能性的范围并非无限;它受到物理和生理定律的约束。生物体的新陈代谢产率 PPP 与其质量 MMM 遵循异速生长定律,通常为 P=aMbP = a M^{b}P=aMb。减去自身维持所需的能量后,剩余的预算必须在后代之间分配。这定义了一条严格的权衡曲线:在固定的能量预算下,更多的后代必然意味着更小的后代。一个基于约束的模型可以描述这个可行集的形状;例如,它可以预测后代数量的对数与后代大小的对数之间的关系是一条具有特定斜率的直线。

但特定物种会在这条曲线的哪个位置被发现呢?这就是优化模型发挥作用的地方。它假定自然选择会推动一个种群走向权衡曲线上能最大化适应度指标(如长期种群增长率 rrr)的点。这个“最优”解决方案取决于其他因素,比如后代存活率如何依赖于其大小。对于鱼来说,其微小的卵存活的机会微乎其微,获胜的策略是尽可能多地购买彩票。对于鲸鱼来说,其幼崽需要巨大的投入才能存活,最好的策略是全力以赴押注在一个后代上。生命的多样性代表了这个星球规模的优化过程在数十亿年间发现的各种解决方案。

我们进行了一次宏大的巡游,最后一站,我们来到了量子化学的世界,在这里我们模拟原子和电子的舞蹈。这里可能隐藏着最惊人的联系。一种名为 Car-Parrinello 分子动力学 (CPMD) 的强大技术使用一个巧妙的数学技巧使量子模拟变得可行。它为电子引入一个“虚拟质量” μ\muμ,并使用一个扩展的拉格朗日量同时演化原子核和电子。这看起来像一个纯粹的物理抽象。然而,如果我们从机器学习的视角来看这些运动方程,一个令人难以置信的对应关系就出现了。整个 CPMD 框架可以被重新解释为一个双时间尺度优化算法。电子的动力学对应于一个试图找到电子基态的基于动量的优化方法。由物理学家发明的参数——虚拟质量 μ\muμ,扮演着与学习率的倒数完全相同的数学角色,即 ηeff=Δt2/μ\eta_{\mathrm{eff}} = \Delta t^2 / \muηeff​=Δt2/μ。计算化学家为防止模拟爆炸而必须遵守的稳定性条件,与数值分析师为其显式二阶优化器的稳定性推导出的条件完全相同。

我们回到了原点。我们利用关于动量和惯性的物理直觉来构建优化器,却发现我们对物理现实最基本的模拟,在其数学本质上,就是优化器。

学习优化的原理远不止是计算机科学教科书中的一个章节。它们是一种普适的语言,用以描述复杂系统——无论是生命的还是人工的——如何在一个充满约束和权衡的世界中改进、适应和繁荣。从你手机里的 JIT 编译器到深海中生命的策略,我们都看到了同样的基本逻辑在起作用:从经验中学习,并将你的资源投向能产生最大回报的地方。