非线性规划中的自适应坐标下降法(Adaptive Coordinate Descent, ACD)在稀疏高维非凸优化中的应用基础题
题目描述:
考虑一个稀疏高维(变量数量n很大,如n>1000)非凸优化问题,其目标函数由光滑部分和非光滑正则化项构成,且变量具有可分结构。问题的标准形式为:
最小化 f(x) = g(x) + h(x), 其中 x ∈ R^n, 且 x ∈ X。
其中:
- g(x) 是一个可微但可能是非凸的函数。我们假设其在任何有界子集上具有Lipschitz连续的梯度,但计算整个梯度∇g(x)的代价高昂,尤其是在n很大时。
- h(x) 是一个可分离的非光滑凸函数,即 h(x) = Σ_{i=1}^n h_i(x_i)。常见的例子是L1正则化项 h_i(x_i) = λ|x_i|(诱导稀疏性),或每个变量的约束指示函数 h_i(x_i) = I_{[l_i, u_i]}(x_i)(即当x_i在区间内时为0,否则为+∞,表示边界约束)。
- X 是R^n的一个闭凸集,通常为简单约束,如盒式约束(X = {x | l_i ≤ x_i ≤ u_i}),这个约束也可以被吸收到h(x)中。
问题的难点在于:维度n高导致计算全梯度∇g(x)的代价大;目标非凸导致存在多个局部极小点;变量间的耦合(即使g(x)非可分)使得标准的坐标轮换法收敛缓慢。自适应坐标下降法(ACD) 通过在每个迭代中智能地选择一个或一组坐标(变量)进行更新,并自适应地调整更新步长,以期用更少的迭代次数和梯度分量计算达到一个稳定点。
本题要求:阐述并推导自适应坐标下降法(ACD)解决上述问题的基本框架、坐标选择的自适应策略、步长自适应规则,并分析其在高维稀疏非凸优化中的优势。
解题过程:
我们将循序渐进地讲解自适应坐标下降法(ACD)的核心思想、算法步骤、自适应策略及其背后的原理。
步骤1:回顾经典坐标下降法(Coordinate Descent, CD)
为了理解“自适应”,我们首先看基础版本。
-
基本思想:在每次迭代k中,从n个坐标(变量)中按固定顺序(如循环顺序1,2,…,n,1,2,…)或随机均匀选取一个坐标索引i_k。然后,固定其他所有变量{x_j}{j≠i},只针对变量x{i_k}求解一个一维子问题:
x_{i_k}^{k+1} = argmin_{t ∈ R} { g(x_1^k, ..., x_{i_k-1}^k, t, x_{i_k+1}^k, ..., x_n^k) + h_{i_k}(t) }。 -
局限性:
- 固定/随机顺序:可能效率低下。如果某些坐标对应的偏导数|∇_{i} g(x)|很大(即该方向梯度分量大,下降潜力大),而其他坐标的梯度分量很小,那么频繁更新“不活跃”的坐标是计算浪费。
- 固定步长:对于非凸、变化剧烈的函数,固定步长可能导致收敛慢或不稳定。
- 耦合问题:当g(x)的变量高度耦合时(如g(x) = (Ax-b)^2,A非对角),单坐标更新可能进展缓慢。
自适应坐标下降法(ACD)旨在改进以上两点:1)自适应地选择更“重要”的坐标更新;2)自适应地调整每一步的更新步长或学习率。
步骤2:自适应坐标选择策略
核心思想是优先更新梯度分量(或近似梯度)绝对值较大的坐标,因为这些方向可能提供更大的目标函数下降。
常用策略是基于梯度信息的采样。由于计算全梯度∇g(x)代价高,我们通常维护一个梯度估计或利用历史信息。
一种经典方法是 “Lipschitz采样”或“重要性采样”:
- 计算坐标Lipschitz常数:假设函数g(x)关于每个坐标x_i的梯度分量∇_i g(x)是L_i-Lipschitz连续的。即,当只改变第i个坐标时,其梯度变化是有限的。L_i可以估计或自适应更新。
- 定义采样概率:在迭代k,我们为每个坐标i分配一个选择概率p_i^k。一个常见的策略是让概率与坐标梯度分量绝对值(或历史信息)成正比。
- 朴素梯度策略:p_i^k ∝ |∇_i g(x^k)|。但需要计算全梯度,不现实。
- Lipschitz常数策略:p_i^k ∝ L_i^α (α通常为1)。这反映了沿该坐标方向函数曲率的变化幅度,曲率大的坐标可能更重要。但忽略了当前点的梯度信息。
- 混合策略:维护每个坐标的“重要性权重”v_i^k,它结合了历史梯度信息和Lipschitz常数。例如,v_i^k = (∇_i g(x^{τ_i}))^2 或 v_i^k = L_i * |∇_i g(x^{τ_i})|,其中τ_i是上一次更新坐标i的迭代次数。然后设置 p_i^k ∝ v_i^k。
- 采样与更新:根据概率分布{p_i^k}随机选择一个坐标索引i_k。这种非均匀采样使得梯度大的坐标有更高概率被选中,从而有望更快地降低目标函数。
另一种策略是“Gauss-Southwell规则”或其变种:
- Gauss-Southwell (GS)规则:选择使得|∇_i g(x) + s_i|最大的坐标i,其中s_i是h_i在x_i处的次梯度。这需要计算所有坐标的(次)梯度,计算成本高。
- Gauss-Southwell-Lipschitz (GSL)规则:选择使下界下降量最大的坐标。下降量估计为 (∇_i g(x))^2 / (2L_i)。选择使这个值最大的坐标i。这需要知道或估计每个L_i。
在高维稀疏问题中,我们常利用稀疏性:真正的解x*只有少数非零元。自适应策略应能快速识别出可能非零的坐标(“活跃集”),并更频繁地更新它们。
步骤3:自适应步长规则
即使选对了坐标,更新步长也至关重要。对于光滑部分g,我们沿着第i个坐标方向进行一维搜索或使用近似最小化。
-
坐标梯度下降:对于选中的坐标i,更新公式通常为:
x_i^{k+1} = prox_{η_i^k h_i} ( x_i^k - η_i^k ∇_i g(x^k) )。
其中,prox是近端算子。例如,对于h_i(x_i)=λ|x_i|,prox是软阈值算子。 -
关键在步长η_i^k:
- 固定步长:η_i^k = 1/L_i,其中L_i是坐标i的梯度Lipschitz常数。保守但稳定。
- Barzilai-Borwein (BB) 型自适应步长:借鉴BB法的思想,利用当前点和上一点的函数值及梯度变化信息来估计一个“拟牛顿”步长。在坐标下降中,可以沿单个坐标方向计算一个BB步长。但需注意,由于每次只更新一个坐标,全梯度信息是陈旧的,这增加了难度。
- 回溯线搜索:虽然是一维问题,但仍可以进行回溯。从初始步长η=1开始,反复缩小(如乘以β<1),直到满足坐标方向的下降条件(如Armijo条件的一个坐标版本):
g(x - η ∇_i g(x) e_i) ≤ g(x) - c * η (∇_i g(x))^2, 其中c∈(0,1),e_i是第i个标准基向量。
回溯搜索是自适应的,能保证充分的下降,但可能增加函数值评估次数。
-
自适应Lipschitz常数估计:许多ACD实现中,不是使用固定的全局L_i,而是动态估计一个局部Lipschitz常数L_i^k。如果在一次更新后发现实际下降量与预计下降量相差太大,就调大L_i^k(相当于减小步长),以保障收敛。
步骤4:自适应坐标下降法(ACD)算法框架
结合以上两点,一个典型的ACD算法流程如下:
初始化:选择初始点x^0,为每个坐标i初始化一个Lipschitz常数估计L_i^0(可用一个全局估计或通过少量采样得到),初始化概率分布p_i^0(如均匀分布)。设置参数β∈(0,1)(回溯系数),c∈(0,1)(Armijo常数)。
对迭代次数k=0,1,2,...直到收敛,执行:
-
自适应坐标选择:
- 根据当前的梯度估计和历史信息,计算每个坐标i的“重要性分数”s_i^k。例如,s_i^k = |∇_i g(x^k)|(如果全梯度可算)或 s_i^k = L_i^k * |∇_i g(x^{τ_i})|(使用最近一次计算的该坐标梯度)。
- 计算选择概率:p_i^k = s_i^k / (Σ_{j=1}^n s_j^k)。如果所有s_j^k=0,则使用均匀分布。
- 根据分布{p_i^k}随机采样一个坐标索引i_k。
-
计算坐标梯度:计算选定坐标的梯度分量 g_i = ∇_{i_k} g(x^k)。注意,这通常只需要计算目标函数g在该坐标方向上的偏导数,其计算代价可能远低于计算全梯度。
-
自适应步长与更新:
- 设置初始试验步长 η = 1 / L_{i_k}^k。
- (可选回溯)计算候选点:z_i = x_{i_k}^k - η * g_i。
- 计算近端更新:x_i^+ = prox_{η h_{i_k}} (z_i)。
- 构造新试验点:y = x^k,但将第i_k个分量替换为x_i^+。
- 检查下降条件:如果 g(y) + h_{i_k}(x_i^+) ≤ g(x^k) + h_{i_k}(x_{i_k}^k) - (c/η) * ||x_i^+ - x_{i_k}^k||^2 不满足,则令 η = β * η,并重复步骤3(回溯),直到满足条件或达到最大回溯次数。
- 更新:x^{k+1} = y。
- 自适应更新L_{i_k}:如果回溯发生了多次(步长被缩小了很多),说明我们高估了Lipschitz常数(或低估了曲率),于是更新 L_{i_k}^{k+1} = L_{i_k}^k / β(或类似的增大操作)。如果一次回溯就成功,可以保持或稍微减小L_{i_k}^k。
-
更新梯度估计(可选但重要):为了后续的自适应坐标选择,我们需要更新对全梯度的估计。由于只更新了一个坐标,全梯度中只有第i_k个分量发生了确定性变化。我们可以计算新的梯度分量∇_{i_k} g(x^{k+1}),并更新存储的梯度向量中这个分量的值。对于其他坐标j ≠ i_k,其梯度分量∇_j g(x)由于x的改变也发生了变化,但我们没有重新计算它。在我们的重要性分数s_j^k中,如果使用了基于历史梯度的信息,那么这个信息就过时了。一种处理方法是延迟更新:在计算s_j^{k+1}时,如果用到∇_j g,我们仍然使用旧的值,直到坐标j被选中更新时,我们再重新计算其精确梯度。这引入了一定的误差,但在实践中常常可行,并被称为“懒惰梯度更新”或“异步更新”。
-
检查收敛:例如,当坐标更新的最大变化量小于阈值,或目标函数下降量足够小,或达到最大迭代次数时停止。
步骤5:在稀疏高维非凸优化中的优势分析
-
计算效率:
- 低单次迭代成本:每次迭代只计算一个坐标的梯度,避免了计算高维全梯度的昂贵代价。对于某些问题(如线性模型g(x)=l(Ax),A是设计矩阵),计算单个坐标梯度∇_i g(x) = A_i^T ∇l(Ax) 的代价是O(m)(m是样本数),而全梯度是O(mn)。当n很大时,节省显著。
- 自适应选择加速收敛:通过聚焦于“重要”坐标(梯度大的、Lipschitz常数大的),算法能更有效地降低目标函数,减少达到满意解所需的迭代次数。
-
处理稀疏性:
- 在L1正则化等问题中,解是稀疏的。自适应坐标选择机制会倾向于更频繁地更新那些梯度分量绝对值较大的坐标,这些坐标往往对应着可能非零的变量。而那些梯度始终接近零的坐标(可能对应解中的零元)被选中的概率很低,从而节省了大量对零变量的无效更新计算。
-
处理非凸性:
- 算法不依赖于目标函数的凸性。回溯线搜索和自适应步长保证了每一步在所选坐标方向上都产生足够的下降(满足一定的下降条件),从而目标函数序列{f(x^k)}是单调不增的。对于非凸问题,算法能收敛到一个驻点(stationary point),即满足0 ∈ ∂F(x)的点,其中F(x)=g(x)+h(x)。这是非凸优化中的一个合理收敛标准。
-
灵活性:
- 自适应策略(选择和步长)可以根据问题特性调整。例如,对于变量重要性差异很大的问题,自适应选择收益更大;对于函数曲率变化大的问题,自适应步长至关重要。
总结:
自适应坐标下降法(ACD)通过智能地选择更新坐标和自适应地调整步长,解决了经典坐标下降法在高维、稀疏、非凸问题中可能存在的效率低下和收敛性问题。其核心优势在于每次迭代的低计算成本和通过定向更新实现的快速进展,使其特别适合于大规模机器学习、信号处理等领域中常见的高维稀疏优化问题。尽管收敛理论在非凸情况下可能比梯度法更复杂,但实践证明它是一种非常强大且实用的工具。