次梯度下降收敛率分析:基于分层结构与保守集值场
1. 项目概述:当优化问题遇上“非光滑”与“分层”
在机器学习和数值优化的世界里,梯度下降法及其变种无疑是基石般的存在。我们习惯了在光滑、可微的函数曲面上,沿着负梯度方向稳步下山,寻找最优解。然而,现实世界中的许多问题并不那么“友好”。目标函数可能带有不可微的L1范数正则项(如Lasso回归),约束条件可能构成非光滑的集合(如投影到单纯形),或者问题本身天然就是非光滑的(如支持向量机的Hinge损失)。这时,经典的梯度下降法就失效了,因为我们连“梯度”这个最基础的方向都找不到。
这正是“次梯度下降法”大显身手的舞台。它用一个更广义的概念——“次梯度”——替代了梯度,使得我们依然能对一大类非光滑凸函数进行优化。但随之而来的核心挑战便是:它的收敛速度如何?我们还能像分析梯度下降那样,得到清晰明了的收敛率吗?答案是复杂的,也是迷人的。传统的分析往往假设函数是Lipschitz连续的,并给出一个O(1/√T)的次优解收敛率。但现实中的问题结构往往比这更丰富,例如目标函数可能由多个光滑或非光滑的部分复合而成,呈现出一种“分层”或“复合”结构;又或者,我们使用的次梯度并非任意选取,而是来自某种具有特殊性质的“集值场”,比如“保守场”。
“次梯度下降收敛率分析:基于分层结构与保守集值场”这个标题,直指的就是优化理论前沿中一个非常深刻且实用的方向。它不再满足于对一般非光滑凸函数的粗糙分析,而是试图深入到问题结构的内部,利用“分层结构”所带来的额外信息,以及“保守集值场”(一个来自非光滑分析与变分分析的有力工具)的良好性质,来推导出更紧、更精确的收敛率。这好比是,我们不仅知道车能在崎岖山路(非光滑)上开,现在还要根据山路的具体起伏规律(分层结构)和车辆特殊的四驱系统(保守场),精确计算出到达目的地的时间上限。这对于设计更高效的算法、理解算法在复杂模型(如深度神经网络,其损失面高度非凸非光滑)上的行为,具有根本性的意义。
2. 核心概念拆解:次梯度、分层结构与保守场
要理解这个主题,我们必须先夯实几个关键概念。它们听起来有些抽象,但我会尽量用直观的类比和例子把它们说清楚。
2.1 次梯度:非光滑函数的“广义下山方向”
对于一个凸函数 f(x) 在点 x0 处,其“次梯度”是一个向量 g,它满足一个关键的不等式:对于定义域内任何其他点 x,都有 f(x) ≥ f(x0) + gᵀ (x - x0)。你可以把这个不等式想象成在点 (x0, f(x0)) 处,存在一个支撑超平面(在二维就是一条直线),它的斜率是 g,并且整个函数图像都在这条线之上。对于可微的点,这个支撑超平面就是唯一的切线,次梯度就是梯度。对于不可微的点(比如绝对值函数在0点),则存在无数条这样的支撑线,它们的斜率构成了一个集合,这就是“次微分”,集合中的每一个向量都是一个“次梯度”。
注意:次梯度是凸函数特有的利器。对于非凸函数,事情会复杂得多,通常需要引入Clarke次微分等更复杂的概念。本文讨论的范围主要限定在凸优化或具有类似良好结构的非凸问题上。
在次梯度下降法中,迭代公式写为:x_{k+1} = x_k - η_k * g_k,其中 g_k 是 f 在 x_k 处的一个次梯度(从次微分中任意选取一个),η_k 是步长。这里的关键是“任意选取”。因为次梯度不唯一,算法每一步的方向选择就有了一定的自由度,这也为后续分析带来了不确定性。
2.2 分层(复合)结构:问题不是铁板一块
许多实际优化问题并非一个单一的黑盒函数。它们具有清晰的结构。最常见的“分层结构”就是复合函数:F(x) = f(x) + g(x), 其中 f 是光滑可微的(如最小二乘损失),g 是非光滑但“简单”的(如L1范数,其邻近算子有闭式解)。更一般的,我们可以考虑 f(Ax) + g(x) 或者 f( g(x) ) 等形式。这种结构之所以重要,是因为我们可以针对不同部分使用不同的优化技巧。
例如,对于 F(x) = f(x) + g(x), 我们可以使用“近端梯度下降”,它交替进行梯度步(针对 f)和近端映射步(针对 g)。这种算法利用了 g 的“简单”性,往往能获得比直接对 F 使用次梯度下降更快的收敛速度。收敛率分析也必须考虑到这种结构,不能把 F 当作一个普通的Lipschitz函数来处理。分层结构告诉我们,问题的“硬度”是不均匀的,我们可以“分而治之”。
2.3 保守集值场:给“任意选择”加上规则
这是理解本文标题深度的关键,也是一个相对前沿的概念。在非光滑分析中,对于非凸非光滑函数,我们常用“Clarke次微分”来描述其广义梯度。但Clarke次微分是一个集值映射(即每个点对应一个集合),它不一定具有“保守性”。
一个集值场 ∂f 被称为“保守的”,如果它的路径积分与路径无关。更直观地说,如果你把这个集值场想象成一个“力场”,那么沿着任何闭合路径走一圈,这个力场所做的总功为零。这意味着存在一个势函数 f,使得 ∂f 恰好是 f 的某种广义梯度(比如Clarke次微分)。保守性是一个很强的几何性质,它保证了我们可以进行某种形式的“链式法则”和“积分还原”,这是进行精细收敛率分析的基石。
在机器学习中,一个非常重要的例子是:使用自动微分(AD)计算出的某个非光滑函数的“次梯度”(实际上是某个特定方向的导数),通常构成一个保守场。例如,深度神经网络中带有ReLU激活函数的损失函数,其通过反向传播计算得到的“梯度”,在数学上对应的是该函数在“路径可微”意义下的一个保守集值场的元素。这意味着,我们实际在算法中使用的那个“g_k”,并不是从完整的次微分中完全随机抓取的,而是来自一个具有保守性质的、更结构化的子集。利用这个性质,我们可以突破传统次梯度分析中仅仅依赖Lipschitz假设的局限,得到更优的收敛保证。
3. 收敛率分析的传统框架与局限
在深入新方法之前,我们必须先看看传统的次梯度下降收敛率分析是怎么做的,以及它的瓶颈在哪里。这能让我们更清楚地看到引入分层结构和保守场概念的必要性。
3.1 经典结果:O(1/√T) 速率及其假设
对于一个 Lipschitz 连续(常数为 L)的凸函数 f,采用恒定步长或递减步长的次梯度下降法,对于迭代 T 次后得到的最佳迭代点 x̂_T,有如下形式的收敛保证:
f(x̂_T) - f(x*) ≤ O( R * L / √T )
其中 R 是初始点离某个最优解 x* 的距离上界,O 表示阶。这是一个“次线性”收敛速率,比梯度下降在光滑强凸函数上的线性收敛(O(ρ^T), ρ<1)慢得多。这个分析的框架大致如下:
- 关键不等式:从凸性定义和次梯度定义出发,可以得到一个核心关系:对于任意最优解 x*,有 ‖x_{k+1} - x*‖² ≤ ‖x_k - x*‖² - 2η_k (f(x_k) - f(x*)) + η_k² ‖g_k‖²。
- 利用假设:代入 Lipschitz 条件 ‖g_k‖ ≤ L,并对 k 从 1 到 T 求和。
- 处理步长:通过巧妙选择步长 η_k (如 η_k ∝ 1/√k),将求和式化简,最终得到关于目标函数值最优性间隙的上界。
这个框架简洁而强大,但其局限性也非常明显:
- 信息利用不足:它只用了函数值的凸性和次梯度的范数上界(Lipschitz性)。对于函数本身可能具有的更多结构(如分层复合结构)视而不见。
- 分析粒度粗糙:因为对次梯度 g_k 的唯一约束是范数有界,所以分析时必须做最坏的打算,假设算法每一步都选择了“最坏”的那个次梯度方向。这导致了上界比较宽松。
- 无法区分算法:在这个框架下,任何从次微分中选取 g_k 的规则(随机选、按某个规则选),只要满足范数有界,收敛率上界都是一样的。但我们从直觉和实验上知道,利用问题结构设计的算法(如近端梯度法)通常快得多。
3.2 为何需要新工具:从“最坏情况”到“平均情况”乃至“结构情况”
传统分析是一种“最坏情况分析”。它保证的是,无论函数多么“不友好”,无论算法在次梯度集合中多么“倒霉”地总是选到不好的方向,性能也不会差于这个上界。但对于设计和改进算法,我们更关心“典型情况”或“在有利结构下的情况”。
- 分层结构:如果我们知道 f = h ∘ g,其中 h 是光滑的,g 是线性映射,那么我们可以利用链式法则,即使整体非光滑,其“梯度”的计算也更有规律。或者对于 f+g 的结构,我们可以证明近端梯度下降的迭代相当于在做一个“梯度映射”,这个映射的模长与最优性条件密切相关,从而可以导出更快的 O(1/T) 甚至线性收敛率(如果 g 是强凸的)。
- 保守集值场:这允许我们将算法产生的序列 {x_k} 和对应的(来自保守场的)次梯度序列 {g_k},与一个潜在的“能量函数”或“Lyapunov函数”联系起来。保守性意味着这些 g_k 并非完全无序,它们某种程度上是“可积的”,因此我们可以构建更精细的差分不等式来分析迭代过程,而不是仅仅依赖范数不等式。这相当于给“任意选择”加上了一个隐式的规则,让我们能做出更乐观(也更精确)的估计。
因此,将分层结构和保守场纳入分析框架,本质上是将更多的“问题域知识”和“算法域知识”注入到理论分析中,目的是用更丰富的假设,换取更紧致、更贴合实际观测的收敛率上界。
4. 基于分层结构的收敛率改进策略
现在,让我们聚焦于“分层结构”如何被用来提升收敛率分析。这里我以两个最典型的例子来说明:复合优化和双线性结构。
4.1 案例一:近端梯度下降与加速算法
考虑问题:min_x F(x) = f(x) + g(x), 其中 f 是光滑可微且梯度是Lipschitz连续的(常数为 L_f),g 是闭凸函数(可能非光滑,但其近端算子易算)。
算法迭代: x_{k+1} = prox_{η g} ( x_k - η ∇f(x_k) ) 其中 prox 是近端算子:prox_{η g}(y) = argmin_x { g(x) + 1/(2η) ‖x - y‖² }。
分析要点:
- 梯度映射:定义梯度映射 G_η(x) = (1/η) [ x - prox_{η g}(x - η ∇f(x)) ]。这个量衡量了当前点离稳定点的距离。
- 关键引理:对于光滑的 f,有 F(x_{k+1}) ≤ F(x_k) - (η/2) ‖G_η(x_k)‖²。这个不等式比传统次梯度分析中的不等式强得多,因为它将函数值的下降量与一个具体的、算法相关的量(梯度映射)的平方直接挂钩。
- 收敛率推导:通过对上述不等式求和,并利用梯度映射与最优性条件的关系,可以证明:
- 基本版本:O(1/T) 的收敛率,即 F(x_k) - F(x*) ≤ O( L_f R² / k )。
- 加速版本(如FISTA):O(1/T²) 的收敛率,这是通过引入动量项和巧妙的迭代序列构造实现的。
这里的核心是,分层结构 f+g 允许我们定义和使用“梯度映射”这个更精细的工具,而不是笼统的次梯度。梯度映射包含了光滑部分的信息(∇f)和非光滑部分的隐式处理(prox算子),它本身就是算法迭代的自然产物,因此用它来刻画收敛过程更加精准。
4.2 案例二:线性约束与拉格朗日对偶
考虑问题:min_x f(x), s.t. Ax = b。 这可以看作一个分层结构:外层是约束集,内层是目标函数。通过引入拉格朗日对偶,我们得到增广拉格朗日函数:L_ρ(x, λ) = f(x) + λᵀ(Ax-b) + (ρ/2)‖Ax-b‖²。
算法迭代(乘子法/ADMM): x_{k+1} = argmin_x L_ρ(x, λ_k) λ_{k+1} = λ_k + ρ (Ax_{k+1} - b)
分析要点: 这种算法的收敛率分析强烈依赖于 f 和约束的结构。如果 f 是强凸且光滑的,可以证明对偶变量 λ 和原始可行性残差 Ax-b 都能获得线性收敛率。即使 f 非光滑,在更一般的条件下也能得到 O(1/T) 的收敛率。这里的“分层”体现在原始变量 x 和对偶变量 λ 的交替优化上,分析时需要同时考察原始残差和对偶残差的衰减,这需要利用到问题的鞍点结构。收敛率证明通常依赖于构造一个结合了原始-对偶间隙和残差项的 Lyapunov 函数,并证明其在迭代中递减。这比单纯分析一个原始次梯度下降序列要复杂,但也更能反映算法的本质。
实操心得:当你面对一个复杂优化问题时,第一步也是最重要的一步就是识别其分层结构。试着把它拆解成“光滑部分 + 非光滑部分”、“可分离部分 + 耦合部分”、“原始变量 + 对偶变量”。识别出的结构直接决定了你应该选用或设计哪种算法,而该算法的收敛率理论也直接对应于这个结构。生搬硬套标准的次梯度下降,往往会牺牲性能和可解释性。
5. 保守集值场理论及其在收敛分析中的应用
这是理论性较强的一部分,但我会尽量剥离复杂的数学形式,阐述其核心思想和对算法分析的价值。
5.1 什么是保守场?一个直观理解
想象你在一片复杂地形(非光滑函数)上行走。传统次梯度分析只关心你每一步的步长和方向向量的最大长度(Lipschitz常数)。而保守场理论则关心,你使用的方向是否来自一个“势能场”。如果是,那么无论路径多么曲折,你从A点走到B点,这个“场”对你做的总功,只取决于A和B两点的“势能差”,与路径无关。
在数学上,对于一个局部Lipschitz函数 f,如果存在一个集值映射 ∂_c f 满足:(1) 它在任何点都是非空紧凸集;(2) 它是“保守的”,即沿任何绝对连续闭合曲线的路径积分为零;(3) 它包含了Clarke次微分。那么 ∂_c f 就是一个保守场。关键点在于,通过自动微分(如反向传播)计算得到的梯度,在很多非光滑点处,实际上输出的是这个保守场中的一个元素,而不是整个Clarke次微分。
5.2 保守性带来的分析红利
保守性为什么有用?因为它恢复了某种形式的“微积分基本定理”和“链式法则”。
- 路径积分与函数值差:对于保守场 ∂_c f 和一条连接 x 和 y 的路径 γ,有 f(y) - f(x) = ∫_γ ∂_c f · dγ。这意味着函数值的变化可以精确地用场沿路径的积分表示。在传统分析中,我们只有不等式 f(y) ≥ f(x) + gᵀ(y-x) for some g in ∂f。
- 链式法则:如果 f = h ∘ g,且 h 和 g 是 Lipschitz 的,那么在保守场的框架下,可以建立链式法则 ∂_c f(x) ⊂ ∂_c h(g(x)) · ∂_c g(x) (需要一些技术条件)。这为分析分层结构的函数提供了便利。
- 构建Lyapunov函数:这是收敛分析的核心。保守性允许我们基于算法迭代中实际使用的次梯度序列 {g_k}(来自保守场),构造一个能量函数 V_k,使得 V_{k+1} ≤ V_k - α * (某个正项) + β * (误差项)。通过控制误差项,就能得到收敛率。
5.3 在次梯度下降分析中的具体应用
假设我们运行一个次梯度下降法:x_{k+1} = x_k - η_k g_k, 但这里 g_k 不是任意从Clarke次微分中选的,而是从一个保守场 ∂_c f 中选取(例如,由自动微分程序产生)。
分析思路的转变:
- 传统:基于凸性和Lipschitz性,得到 ‖x_{k+1} - x*‖² 的递推不等式。
- 基于保守场:我们可以考虑函数值 f(x_k) 本身的变化。利用保守性,对于从 x_k 到 x_{k+1} 的直线路径,有: f(x_{k+1}) - f(x_k) = ∫_0^1 < g(x_k + t(x_{k+1}-x_k)), x_{k+1}-x_k > dt。 由于我们只在一个点 x_k 处取了 g_k,而不是沿着整条路径,所以需要引入一个“误差”项,即 g_k 与路径上其他点处保守场元素的差异。这个误差的大小,可以通过保守场的一些性质(如半光滑性、方向导数的存在性)或者函数的结构(如分片光滑)来控制。
可能得到的改进: 如果函数是“半光滑”的(一种比Lipschitz连续更强的性质,意味着在大多数方向上是可微的),并且保守场在某种意义上是“单值的”(例如,在可微点就是梯度),那么上述误差项可以证明是高阶小量(例如 O(η_k²))。这样一来,函数值的下降量近似为 -η_k ‖g_k‖² + O(η_k²)。这与光滑梯度下降的下降量形式一致!从而,我们可以借鉴光滑情况的分析技巧,有望得到比 O(1/√T) 更好的收敛率,例如在强凸假设下甚至能得到线性收敛的局部结果。
注意事项:基于保守场的分析通常更复杂,且结论可能依赖于更强的假设(如半光滑性、误差项的可控性)。它不是一个“放之四海而皆准”的通用模板,而是为一大类实际由自动微分驱动的非光滑优化问题(特别是机器学习中的问题)提供了更精准的理论工具。它解释了为什么在实践中,对某些非光滑问题使用“梯度下降”(实为某个保守场元素的下降)的效果,往往好于最坏情况理论预测。
6. 结合两者:分层结构下的保守场算法与分析
最强大的框架自然是结合两者。考虑一个分层复合函数:F(x) = f( g(x) ), 其中 f 和 g 都可能非光滑,但通过自动微分我们能计算出一个属于某个保守场 ∂_c F 的“梯度”。
算法:我们可能使用一个类似于(次)梯度下降的算法:x_{k+1} = x_k - η_k d_k, 其中 d_k ∈ ∂_c F(x_k)。
分析挑战与策略:
- 结构分解:利用保守场的链式法则,d_k 可以表示为 ∂_c f(g(x_k)) 和 ∂_c g(x_k) 中元素的某种乘积。这让我们能窥探到内部结构。
- 误差分解:在分析函数值变化时,误差项 now 可以分解为来自外层 f 和内层 g 的两部分。如果 f 或 g 具有更好的性质(如凸性、半光滑性),我们可以分别控制这些误差。
- 收敛率:最终的收敛率将是一个混合体,它依赖于:
- 最外层函数 f 的几何性质(凸性、强凸性)。
- 内层映射 g 的 Lipschitz 常数。
- 保守场 ∂_c f 和 ∂_c g 的“良态”程度(如是否满足某种误差界条件)。
- 步长策略 {η_k}。
一个典型的结果可能是:如果 f 是凸且 Lipschitz 的,g 是光滑的,那么算法具有 O(1/√T) 的收敛率;如果 f 额外是强凸的,并且保守场满足某种误差界,那么可能获得 O(1/T) 或更快的速率。这种分析比单独使用 Lipschitz 常数要细致得多,因为它区分了不同层次对整体“难度”的贡献。
7. 实操考量与常见问题排查
理论很美,但最终要落地。在实际实现和分析这类算法时,有哪些坑需要注意?
7.1 如何判断和利用分层结构?
- 模型审视:写下你的目标函数。看看它是否是以下几类的和或复合:
- 光滑损失(如均方误差、交叉熵)+ 非光滑正则项(L1, L21, 核范数)。
- 线性变换/仿射映射后接一个非光滑函数(如 f(Ax+b))。
- 多个函数的和,其中部分函数具有易算的近端算子。
- 工具选择:一旦识别出结构,就选择对应算法。
- f+g 结构 -> 近端梯度法、FISTA。
- f(Ax)+g(x) 结构 -> 可以考虑ADMM、对偶算法。
- 复杂的复合 -> 可能需要自定义基于保守场(自动微分)的梯度下降,并仔细设计步长。
7.2 保守场在编程中对应什么?
在绝大多数深度学习框架(PyTorch, TensorFlow, JAX)中,当你对包含非光滑操作(如 ReLU, max-pooling, argmax(不可导但常用straight-through estimator))的网络进行loss.backward()或gradient()操作时,框架返回的“梯度”,在数学上就是该损失函数在某一个保守场(具体来说是“Clarke次微分”在可微路径上的极限集)中的一个元素。你已经在使用保守场了!关键是要意识到,这个“梯度”不是经典意义下的梯度,理论分析时不能直接套用光滑函数的结论。
7.3 步长选择策略
对于基于保守场的次梯度下降,步长选择依然至关重要,且没有一成不变的黄金法则。
- 理论步长:许多收敛性定理要求步长序列满足 ∑η_k = ∞ 且 ∑η_k² < ∞。一个经典选择是 η_k = c / √k,其中 c 是一个需要调参的常数。这保证了收敛,但速率较慢。
- 实践启发:
- 对于具有复合结构的问题:如果外层或内层函数表现出某种“光滑主导”的特性,可以尝试使用类似光滑函数的步长策略,如基于线搜索(Armijo准则)的步长,但需要小心非光滑点处的判断。
- 自适应步长:像AdaGrad、Adam等自适应优化器,在非光滑问题上也常用。它们通过累积梯度历史信息来调整每个维度的步长,在实践中对许多非光滑问题有效,但其理论保证在非光滑情形下更加复杂,通常需要结合保守场理论进行特殊分析。
- 我的经验:对于“非光滑但整体行为接近光滑”的问题(如带ReLU的神经网络),使用Adam优化器配合一个较好的初始学习率(如1e-3或1e-4)和衰减策略,通常是安全有效的起点。对于明确是“f+g”且g是简单正则项的问题,近端梯度法及其加速版本(如FISTA)配合回溯线搜索是更理论可靠的选择。
7.4 常见问题与诊断
下表总结了一些常见问题现象、可能原因及排查思路:
| 现象 | 可能原因 | 排查与解决思路 |
|---|---|---|
| 算法震荡,不收敛 | 步长过大。在非光滑点附近,过大的步长会导致迭代点在次梯度方向上来回跳跃。 | 1.大幅减小步长,观察是否开始稳定下降。 2. 使用递减步长策略(如 η_k = c/√k)。 3. 对于复合问题,检查是否错误地对非光滑部分使用了梯度步,应改用近端步。 |
| 收敛速度极慢 | 步长过小。或者问题本身条件数很差(即使光滑部分也如此)。也可能是算法未利用结构。 | 1. 尝试增大步长或使用自适应优化器(Adam)。 2. 检查问题结构:是否可分解?是否能用更专用的算法(如近端类、对偶类算法)? 3. 对于强凸问题,确保理论步长与强凸系数匹配。 |
| 函数值下降不平滑,出现平台期 | 迭代点可能陷入或频繁穿越非光滑区域(如L1正则化的稀疏解附近)。函数在这些区域沿许多方向变化平缓。 | 1. 这是非光滑优化的典型现象。观察长期趋势,只要总体下降即可。 2. 可以尝试在平台期短暂增加步长以“跳出”该区域,然后再减小。 3. 使用带有动量的方法(如FISTA, Heavy-ball),动量有助于冲过平坦的非光滑区域。 |
| 自动微分给出的“梯度”导致算法发散 | 在非光滑点,自动微分返回的可能是保守场中“最陡上升”方向的元素(虽然概率低),或者该点处保守场元素范数异常大。 | 1. 检查代码中是否存在不可导操作的错误实现(如对argmax直接求导)。应使用次梯度或代理梯度(如straight-through estimator)。2. 对“梯度”进行裁剪(gradient clipping),限制其最大范数。 3. 在损失函数中加入小的光滑正则项(如L2),使问题整体更光滑。 |
| 近端算子计算困难或不准 | 对于复杂的非光滑项g,其近端算子可能没有闭式解,需要迭代计算,引入误差。 | 1. 确保近端算子的求解达到足够的精度。误差会累积,影响外层算法收敛。 2. 考虑使用线性ized ADMM或对偶算法,有时可以避免直接计算难解的近端算子。 3. 对于某些g,可以寻找其Moreau包络的近似,后者是光滑的。 |
7.5 调试与验证技巧
- 绘制更全面的曲线:不要只看训练损失。同时绘制梯度范数、迭代点变化量‖x_{k+1} - x_k‖、以及(如果可计算)梯度映射范数或对偶间隙。对于非光滑问题,损失函数平台期时,梯度映射可能仍在减小,表明算法仍在进步。
- 敏感性分析:对步长、初始化、算法参数(如动量系数)进行网格搜索或随机搜索,了解算法性能的鲁棒性。非光滑问题对参数可能更敏感。
- 与更简单的基线比较:始终运行一个标准的次梯度下降(使用固定小步长或1/√k步长)作为基线。如果你的高级算法(利用结构或保守场)不能显著且稳定地优于基线,那么可能你的实现有问题,或者问题本身的结构性优势不明显。
- 检查最优性条件:对于凸问题,在算法停止后,计算一个次梯度最优性条件的违反程度。例如,对于问题 min f(x)+g(x), 检查是否 0 ∈ ∇f(x) + ∂g(x)。这可以通过计算一个近端点并检查残差来实现。这是验证算法是否真正收敛到临界点的最可靠方法。
理解次梯度下降在分层结构和保守集值场下的收敛率,不仅仅是为了发表理论文章。它为我们提供了一副“X光眼镜”,能看穿黑盒优化算法的内部运作,指导我们为特定结构的问题选择或设计正确的算法,并合理地调整参数、解释现象、诊断问题。在面对现代机器学习中日益复杂的非光滑、非凸模型时,这种深度的理解从长远看,是每一位致力于算法研发和实践的工程师或研究者不可或缺的素养。
