try ai
科普
编辑
分享
反馈
  • 函数梯度下降

函数梯度下降

SciencePedia玻尔百科
核心要点
  • 函数梯度下降是一种优化技术,它通过在损失景观上沿最速下降方向移动函数来迭代地改进整个函数。
  • 梯度提升机 (GBM) 是这一原则的直接应用。它通过将弱学习器拟合到损失函数的负梯度(残差)上,逐步构建预测模型。
  • 这个概念统一了多种多样的现象,不仅描述了机器学习,还描述了像热扩散(最小化狄利克雷能量)和寻找量子基态这样的物理过程。
  • 通过修改目标函数或下降过程,该框架可以融入公平性约束、动量以及针对流式数据的自适应学习。
  • 像斯坦因变分梯度下降 (Stein Variational Gradient Descent, SVGD) 这样的先进方法利用该原则来演化一组粒子,从而将优化与贝叶斯采样联系起来。

引言

优化是一项普遍的追求,从滚下山坡的小球到学习图像分类的神经网络,无处不在。其核心思想是通过迭代地采取小步骤来找到最小值。但是,如果我们希望优化的对象不是一组参数,而是一个函数本身呢?这个问题将优化的概念提升到了一个新的、无限维的领域。函数梯度下降为此提供了答案,它提出了一个强大的框架,用以理解计算系统和自然系统等复杂系统是如何向最优配置演化的。本文通过揭示看似迥异的领域实则是这一优雅原则的不同表现形式,从而在它们之间架起了一座桥梁。

接下来的章节将引导您踏上一段从抽象理论到实际应用的旅程。在“原理与机制”一章中,我们将建立核心直觉,探索函数“滚下山坡”意味着什么,并审视在物理学和统计学中支配这一过程的数学机制。随后,在“应用与跨学科联系”一章中,我们将见证这一思想的非凡力量,它不仅是尖端机器学习算法背后的引擎,是设计新材料的计算工具,也是审视生命过程本身的深刻视角。

原理与机制

从滚动的球到演化的函数

想象一个放置在丘陵地貌上的球。它会怎么做?它会滚下山坡。它不需要知道地形的完整地图;在任何时刻,它都只是沿着最速下降的方向运动。这个简单的局部规则在寻找地貌中的低点时非常有效。在优化领域,我们称之为​​梯度下降​​。

让我们更精确一点。这个“地貌”可以用一个势能函数来描述,我们称之为 V(x,y)V(x, y)V(x,y)。在任何一点,斜坡的陡峭程度和方向由梯度 ∇V\nabla V∇V 给出。为了尽可能快地滚下坡,球必须朝着与梯度相反的方向移动。因此,它的速度矢量 v\mathbf{v}v 与 −∇V-\nabla V−∇V 成正比。一个迷人的推论是,球的路径总是与地貌的等高线垂直。它以最直接的方式穿过等高线。

这个思想是现代机器学习的主力。我们定义一个“损失”或“成本”函数,用以衡量我们模型的预测有多差。这个损失函数就是我们的丘陵地貌。模型的参数——比如定义一个神经网络的数百万个数字——就是我们“球”的坐标 (x,y,… )(x, y, \dots)(x,y,…)。我们迭代地将这些参数向负梯度的方向微调,一步一步地,我们的模型“滚下山坡”,达到一个更低误差的状态。

但现在,让我们问一个更深刻的问题。如果我们想要优化的不是一组参数,而是一个函数本身呢?如果我们的“球”不是一个点,而是一整条曲线或一个曲面呢?一个完整的函数滚下山坡意味着什么?从优化有限维空间中的点到优化无限维空间中的函数,这一飞跃是理解​​函数梯度下降​​的门径。

函数的景观

要讨论函数的景观,我们首先需要一种方法为每个函数赋一个单一的数值——一个“海拔高度”。这就是​​泛函​​的作用,它就是一个函数的函数。例如,一条曲线的总长度就是一个泛函:你给它一条曲线(一个函数),它输出一个数字(它的长度)。

在物理学中,一个系统的总能量通常是一个泛函。考虑一个场,比如磁场或温度分布,由一个在空间中变化的函数 ϕ(x)\phi(\mathbf{x})ϕ(x) 描述。总能量可能取决于场的“颠簸”程度以及它在每一点的取值。一个经典的例子是金茨堡-朗道 (Ginzburg-Landau) 自由能,可以写成 E[ϕ]=∫(12(∇ϕ)2+V(ϕ))ddxE[\phi] = \int \left( \frac{1}{2} (\nabla\phi)^2 + V(\phi) \right) d^d\mathbf{x}E[ϕ]=∫(21​(∇ϕ)2+V(ϕ))ddx。第一项包含 (∇ϕ)2(\nabla\phi)^2(∇ϕ)2,衡量场中的总“弯曲”或“张力”——平滑的场能量较低。第二项 V(ϕ)V(\phi)V(ϕ) 是一个局部势,它倾向于让场取某些特定值而非其他值。

正如梯度 ∇V\nabla V∇V 告诉我们势 VVV 如何随位置变化一样,​​泛函导数​​(记作 δEδϕ\frac{\delta E}{\delta \phi}δϕδE​)告诉我们,如果在特定点 x\mathbf{x}x 对函数 ϕ\phiϕ 做一个微小的局部“扭动”,总能量 EEE 会如何变化。它是梯度在无限维空间中的模拟。

有了这个,我们就可以写出函数梯度下降的主方程:

∂ϕ∂t=−δE[ϕ]δϕ\frac{\partial \phi}{\partial t} = - \frac{\delta E[\phi]}{\delta \phi}∂t∂ϕ​=−δϕδE[ϕ]​

这个方程非同寻常。它表明,函数 ϕ\phiϕ 在每一点随时间的变化率由能量的负泛函梯度决定。函数本身在演化,流经所有可能函数的空间,不断寻求降低其总能量。对于金茨堡-朗道能量,这个演化方程变为 ∂tϕ=∇2ϕ−V′(ϕ)\partial_t \phi = \nabla^2 \phi - V'(\phi)∂t​ϕ=∇2ϕ−V′(ϕ)。∇2ϕ\nabla^2 \phi∇2ϕ 项的作用类似于一个扩散过程,试图使函数平滑,而 −V′(ϕ)-V'(\phi)−V′(ϕ) 项则将每一点的 ϕ\phiϕ 值拉向局部势 VVV 的最小值点。从雪花到磁畴,这类系统涌现出的美丽图案,正是函数通过函数梯度下降稳定到低能构型的结果。

大自然的优化引擎

这不仅仅是数学上的奇趣;它是大自然不断运用的一个深刻原理。其中一个最优雅的例子是热流。想象一块金属板,其边缘保持在固定温度。板上的温度分布是一个函数,u(x,t)u(\mathbf{x}, t)u(x,t)。这个分布的“能量”可以通过​​狄利克雷能量​​ (Dirichlet energy) 来定义,E[u]=12∫Ω∣∇u∣2 dxE[u] = \frac{1}{2}\int_{\Omega} |\nabla u|^2 \, dxE[u]=21​∫Ω​∣∇u∣2dx,它本质上衡量了温度剖面总的平方“颠簸”程度。

这个能量泛函的最速下降路径是什么?如果我们计算泛函导数,我们会发现函数梯度下降流恰恰由​​热传导方程​​描述:

ut=Δuu_t = \Delta uut​=Δu

热扩散是大自然用于最小化狄利克雷能量的算法。温度分布随时间演化,变得尽可能平滑,最终稳定在一个稳态 u∞(x)u_\infty(\mathbf{x})u∞​(x),此时热量停止流动 (ut=0u_t=0ut​=0)。这个最终状态是拉普拉斯方程 Δu∞=0\Delta u_\infty = 0Δu∞​=0 的解,它代表了在遵守边界固定温度的同时,最小化总颠簸程度的唯一函数。一杯热咖啡冷却这个平淡无奇的过程,就是一个函数在无限维空间中滚下山坡的物理体现。

这个原理甚至延伸到了量子领域。根据作为​​密度泛函理论 (DFT)​​ 基础的 Hohenberg-Kohn 定理,一个由许多相互作用的电子组成的复杂系统的基态能量是其电子密度 ρ(r)\rho(\mathbf{r})ρ(r) 的泛函。原则上,如果我们知道这个精确的普适泛函,我们只需在所有可能的电子密度函数的空间上执行约束梯度下降,就可以找到任何原子或分子的精确基态构型,而无需去解那个异常复杂的多体薛定谔方程。

梯度提升:逐步构建模型

让我们把这个强大的思想带回到机器学习中。最成功的算法之一,​​梯度提升机 (GBM)​​,就是函数梯度下降的一个直接而实用的实现。

在这里,我们优化的“函数”是我们的预测模型 f(x)f(x)f(x)。“景观”是总损失,或称​​经验风险​​ R(f)R(f)R(f),它衡量了我们模型的预测值 f(xi)f(x_i)f(xi​) 与训练集中所有数据点的真实目标值 yiy_iyi​ 之间的差异。我们的目标是找到使这个总损失最小化的函数 fff。

我们不是一次性找到最优函数,而是迭代地构建它。我们从一个非常简单的模型 f0(x)f_0(x)f0​(x) 开始(例如,仅所有目标值的平均值)。然后,在每一步 mmm,我们执行一个小的函数梯度下降步骤:

fm(x)=fm−1(x)+νhm(x)f_m(x) = f_{m-1}(x) + \nu h_m(x)fm​(x)=fm−1​(x)+νhm​(x)

这里,ν\nuν 是一个小的学习率,而 hm(x)h_m(x)hm​(x) 是我们的步进方向。这个方向是什么?它就是损失景观上的最速下降方向!我们计算损失的负泛函梯度,−∇R(fm−1)-\nabla R(f_{m-1})−∇R(fm−1​)。对于简单的平方误差损失,这个梯度方向恰好就是当前误差的向量,即​​残差​​,ri=yi−fm−1(xi)r_i = y_i - f_{m-1}(x_i)ri​=yi​−fm−1​(xi​)。对于更复杂的损失,比如用于分类的逻辑斯蒂损失,梯度是一个“伪残差”向量,它仍然指向一个更好模型的方向。

现在,关键的、实际的约束来了。理想的梯度方向 rrr 是一个复杂的函数。我们不能简单地将其添加到模型中,因为我们被限制只能用简单的组件(如小决策树)来构建模型。那么,我们该怎么做?我们找到与理想梯度方向 rrr 最对齐的简单组件——我们的​​基学习器​​ hmh_mhm​。用几何学的语言来说,我们找到了梯度 rrr 在我们被允许构建的函数子空间上的​​正交投影​​。

我们基学习器的表达能力决定了我们能多好地逼近真实梯度方向。假设我们使用非常简单的“决策树桩”(深度为1的树),并发现我们最好的树桩只能捕获梯度大小的30%,即 ∥ΠHstump(r)∥=0.3∥r∥\|\Pi_{\mathcal{H}_{\text{stump}}}(r)\| = 0.3\|r\|∥ΠHstump​​(r)∥=0.3∥r∥。相比之下,一个更复杂的深度为6的树可能能够捕获梯度大小的90%,即 ∥ΠHdeep(r)∥=0.9∥r∥\|\Pi_{\mathcal{H}_{\text{deep}}}(r)\| = 0.9\|r\|∥ΠHdeep​​(r)∥=0.9∥r∥。由于每一步的损失减少量与这个投影长度的平方成正比,更深的树将产生一个在减少损失方面效率高 (0.9/0.3)2=9(0.9/0.3)^2 = 9(0.9/0.3)2=9 倍的步骤。这凸显了一个关键的权衡:更复杂的基学习器使我们能够采取更有效的步骤,但也可能增加过拟合的风险。在极端情况下,一个无约束、足够深的树可以完美地拟合所有残差,使得在训练数据上的投影误差为零。

从另一个角度看,一旦我们选择了一个树结构(将输入空间划分为叶区域 {Rℓ}\{R_\ell\}{Rℓ​}),为每个叶子找到最佳常数值 {γℓ}\{\gamma_\ell\}{γℓ​} 的任务就变得异常简单。这个问题变得可分离,分解为对每个叶子的独立优化。这相当于执行​​块坐标下降​​,其中单个叶子中的所有数据点形成一个“块”,被一起更新。

统一视角与现代前沿

从滚动的球到最先进的机器学习算法的这段旅程,揭示了一个优美而统一的原则。物理系统的演化和预测模型的构建都可以被看作是同一个基本过程的实例:通过在函数景观上迭代地遵循最速下降路径来寻找最优配置。标准梯度下降只是这个思想最基础的版本。

这一视角仍在不断深化。现代数学框架,如 ​​Otto 微积分​​,已经赋予了概率分布空间本身一种黎曼几何结构。在这种观点下,某些演化偏微分方程可以被解释为在概率的弯曲流形上的字面意义上的梯度流。连续性方程 ∂tpt+∇⋅(ptvt)=0\partial_t p_t + \nabla \cdot (p_t v_t) = 0∂t​pt​+∇⋅(pt​vt​)=0 中的速度场 vtv_tvt​ 成为一个泛函的梯度,引导概率质量流向能量更低的构型。

从物理学到统计学,从可感知的热流到从数据中抽象构建知识,函数梯度下降的原理提供了一个强大的视角,通过它我们可以欣赏支配自然及其模型的数学法则所固有的统一性和优雅性。

应用与跨学科联系

我们已经看到,函数梯度下降是一个极其简单的思想:要改进一个函数,我们就在其广阔的可能性景观中找到最速下降的方向,并迈出一小步。它是一个球滚下山坡的无限维等价物。但真正令人惊讶的不是这个想法的简单性,而是其难以置信的力量和普遍性。这一个概念就像一把万能钥匙,解开了那些乍一看似乎风马牛不相及的领域中的问题。它是一些最强大的机器学习算法背后的引擎,但它也是一个融入物理世界结构之中的原则,甚至为我们提供了一个审视生命自身优化过程(即进化)的视角。

现代机器学习的引擎

也许函数梯度下降最直接、最有影响力的应用是在机器学习领域,它构成了​​梯度提升​​的理论支柱。想象一下,你正在构建一个预测模型,但它并不完美,它会犯错。残差——你的模型预测与真实值之间的差异——代表了你的模型出错的所有地方。如果我们能将这些残差作为一个新的预测目标呢?这就是使用平方误差损失的梯度提升的核心思想:在每一步,你都将一个新的、简单的“弱”学习器(比如一棵小决策树)拟合到当前模型的误差上。通过加入这个新的学习器,你正在逐步纠正过去的错误。

这个看似如此直观的过程,其实就是函数梯度下降!平方误差损失的负梯度正是残差向量。因此,将弱学习器拟合到残差上,不过是在函数空间中逼近最速下降的方向。

但如果我们不是试图最小化平方误差呢?如果我们正在处理一个分类问题,并且选择一个不同的“山坡”来下降——一个由​​指数损失​​定义的山坡呢?这个损失函数会严厉惩罚被错误分类的点,特别是那些被自信地搞错的点。当我们为这个新的景观计算泛函梯度时,我们发现了一些非凡的事情:我们应该拟合的“残差”不再是简单的误差,而是被一个对错分样本最大的项加权。算法被迫将其注意力集中在最困难的案例上,即那些它一直搞错的案例。这不仅仅是一个新算法;这是著名的 ​​AdaBoost​​ 算法,通过函数梯度下降的统一视角来看待它。损失函数的选择从根本上改变了我们下降的特性,塑造了学习过程的本质。

这个视角为我们提供了一个强大的工具包来理解和改进我们的算法。例如,我们在这个下降过程中所走的步数——提升迭代的次数——不仅仅是运行算法直到停止那么简单。每一步都减少了模型的偏差,使其更灵活、更接近训练数据。但每走一步,我们也在冒险增加模型的方差,使其对特定的训练数据过于敏感,从而降低了泛化到新未见数据的能力。在这条路径上存在一个“最佳点”,可以最优化地平衡这种​​偏差-方差权衡​​。因此,提早停止下降并不是一个草率的技巧;它是一种有原则的正则化形式,一种寻找能很好完成任务的最简单函数的方法。算法的离散步骤逼近一个连续的梯度流,这是一个深刻的思想,将计算世界与连续过程的物理学联系起来。

与物理运动的类比并不止于简单的下降。在经典力学中,一个滚下山坡的球不仅会沿着最陡峭的路径;它还会积聚​​动量​​。它会冲过山谷,并可以利用其惯性冲过小颠簸。我们能在函数空间中做同样的事情吗?当然可以。通过在我们的更新规则中加入一个“速度”项——一个对先前下降方向的记忆——我们可以创建一个动量驱动的梯度提升版本。这有时能让我们更有效地在损失景观中导航,加速收敛并找到更好的解,就像一个重球在复杂的山谷中找到通往底部的路一样。

该框架还具有优美的模块化特性。如果我们的弱学习器有根本性的缺陷怎么办?例如,由决策树组成的森林非常擅长捕捉训练数据范围内的复杂、非线性模式。但如果你让它超越那个范围进行外推,它就会彻底失败,预测一个恒定值。它学会了波动,却错过了全局趋势。函数梯度下降框架允许我们修复这个问题。我们可以构建一个​​混合模型​​,它将树的局部专长与一个简单的全局线性模型结合起来。在每一步,我们让树捕捉残差的波动,而线性模型则捕捉整体趋势。这使得组合模型能够有效地进行内插和外推,证明了该框架的灵活性。

也许最深刻的是,我们可以重塑景观本身,以引导我们的下降走向具有超越纯粹准确性的理想属性的解决方案。在一个努力应对算法社会影响的世界里,我们可能希望我们的模型不仅准确,而且​​公平​​。我们可以在目标函数中添加一个惩罚项,用来衡量例如不同人口群体之间预测的差异。这个新的复合目标的泛函梯度现在将有两个组成部分:一个将函数拉向更高的准确性,另一个则将其拉向更大的公平性。通过调整公平性惩罚的强度,我们可以描绘出一条在两个目标之间权衡的解决方案路径,让我们能够选择一个符合我们道德价值观的模型。

最后,现实世界很少是静态的。数据不断涌入,其潜在模式可能会随时间改变——这种现象被称为“概念漂移”。一个在过去数据上训练的模型可能会过时。在这里,函数梯度下降也提供了一条前进的道路。我们可以设计​​在线提升​​算法,一次处理一个样本,通过沿着瞬时损失的梯度迈出一小步来持续更新模型。通过保留一个最近数据的滑动窗口,并动态地重新加权以处理数据分布的变化,模型可以适应并跟踪一个移动的目标,永远在一个本身不断变化的地貌上下降,就像冲浪者驾驭波浪一样 [@problem_a_id:3125512]。

通往物理世界的桥梁

函数梯度下降的影响远远超出了计算机和算法;它的印记可以在自然界的基本法则中找到。考虑量子化学中的一个核心问题:找到一个分子的基态,即其能量最低的构型。分子的状态由一个波函数 ∣Ψ⟩|\Psi\rangle∣Ψ⟩ 描述,其在时间上的演化由著名的​​薛定谔方程​​所支配: i∂∂t∣Ψ(t)⟩=H^∣Ψ(t)⟩i \frac{\partial}{\partial t} |\Psi(t)\rangle = \hat{H}|\Psi(t)\ranglei∂t∂​∣Ψ(t)⟩=H^∣Ψ(t)⟩ 其中 H^\hat{H}H^ 是能量算符,或称哈密顿算符。

现在,让我们做一些可能看起来很奇怪的事情:让我们看看在*虚时间*中会发生什么,方法是进行替换 t→−iτt \to -i\taut→−iτ。薛定谔方程转变成了一个扩散方程: ∂∂τ∣Ψ(τ)⟩=−H^∣Ψ(τ)⟩\frac{\partial}{\partial \tau} |\Psi(\tau)\rangle = -\hat{H}|\Psi(\tau)\rangle∂τ∂​∣Ψ(τ)⟩=−H^∣Ψ(τ)⟩ 这个方程看起来非常熟悉。它恰好是函数空间中梯度下降的方程,其中“函数”是波函数 ∣Ψ⟩|\Psi\rangle∣Ψ⟩,“景观”由能量算符 H^\hat{H}H^ 定义。

这个虚时间方程的解表明,波函数中任何对应于更高能量态的分量都会相对于基态被指数级地衰减。随着虚时间 τ\tauτ 的推移,波函数自然地“松弛”和纯化,收敛到能量最低的状态。因此,通过虚时间传播寻找量子基态的物理过程,在数学上与函数梯度下降是等同的。大自然以其自己的方式,正是利用这个原理来寻找其最稳定的构型。

这种有原则的下降思想也出现在统计力学中,特别是在​​逆向设计​​这个迷人的领域。想象你是一位材料科学家。你有一个期望的材料属性,它反映在特定的原子排列中——比如说,一个目标径向分布函数 gtarget(r)g_{\text{target}}(r)gtarget​(r)。问题是:什么样的原子间作用力,或者说势能函数 u(r)u(r)u(r),会导致原子自组装成这种期望的结构?这是一个逆问题:我们知道结果,想找到原因。

函数梯度下降提供了一个强大而稳健的解决方案。可以定义一个叫做​​相对熵​​(或 Kullback-Leibler 散度)的量,它衡量由一个试验势 u(r)u(r)u(r) 产生的结构概率分布与目标分布之间的“距离”。这个相对熵,当被看作是势 u(r)u(r)u(r) 的泛函时,有一个极好的性质:它是凸的。这意味着它代表了一个单一、光滑的碗状结构,没有任何棘手的局部最小值让人陷入其中。对这个目标执行函数梯度下降——这相当于根据当前结构与目标结构之间的差异来微调势能——保证能引导我们找到那个能创造出我们期望材料的唯一真实势能,前提是这样的势能存在。这是一个用于在分子水平上雕刻物质的计算雕塑家的工具。

从单点到群体和物种

到目前为止,我们一直将函数梯度下降描绘成一个单点——一个单一函数——在其景观中移动。但如果我们能同时移动一整个系综的点,就像一群鸟或一群蜜蜂一样呢?这就是​​斯坦因变分梯度下降 (Stein Variational Gradient Descent, SVGD)​​ 背后的优美思想,这是一种将函数梯度与贝叶斯推断和采样世界联系起来的方法。

SVGD 的目标是取一个初始的、简单的粒子(或样本)集合,并将它们输运,直到它们的分布与一个复杂的目标概率分布相匹配。每个粒子的速度由一个泛函梯度决定,但有一个转折。更新规则有两部分。第一部分将每个粒子推向概率更高的区域,就像在标准优化中一样。第二部分,源于粒子之间通过核函数的相互作用,是一种排斥力,防止粒子们坍缩到一起。它鼓励系综散开并覆盖整个景观。结果是一个动态过程,其中一团粒子“流”下山坡,相互作用并扩散,直到它准确地代表目标分布。这是下降与排斥之间的一支舞蹈,是优化与采样的完美结合。

这幅相互作用的种群探索景观的图景,将我们带到最后一个,也许是最具启发性的联系:​​达尔文进化论​​。作用于适应度景观中的生物种群的自然选择,是一种形式的函数梯度下降吗?这个类比非常诱人。“参数”是生物体的基因,“损失函数”是适应度的倒数,而自然选择是优化算法。

在某些简化的假设下——一个大的、无性繁殖的种群,具有微小的突变——这个类比惊人地成立。数量遗传学表明,种群的平均基因型倾向于沿着适应度梯度的方向移动,很像梯度下降中的单个粒子。整个种群,攀登着适应度的高峰。

然而,更深入的观察揭示了关键的差异,理解这些局限性与类比本身同样富有洞见。首先,进化总是维持一个由多样化个体组成的种群,并行地探索景观,这使得它更类似于 SVGD 的“群体”或其他基于种群的优化器,而不是单轨迹的随机梯度下降 (SGD)。其次,随机性是不同的:遗传漂变是由于有限种群规模而产生的采样噪声,它对适应度是盲目的,而 SGD 中的噪声与数据相关,是真实梯度的无偏估计。第三,有性繁殖引入了​​重组​​,它混合了来自不同谱系的基因——这一操作在简单的 SGD 中没有直接的对应物,但在遗传算法中却被明确地建模。

一个统一的视角

从机器学习模型的实际工程到分子的量子力学基态,从新材料的设计到进化的宏大画卷,函数梯度下降的原理一次又一次地出现。它不仅仅是一种算法;它是一个理解复杂系统如何找到自己道路的基本视角。它教导我们,要改进某物——无论是函数、波函数还是种群——一个好的策略通常是找到最陡峭的改进方向并迈出一步。这证明了科学思想深刻的统一性,即这一个简单、优雅的想法能够照亮我们世界如此多不同的角落。