自适应坐标下降法(Adaptive Coordinate Descent, ACD)在稀疏高维非凸优化中的应用基础题
题目描述
考虑一个高维非凸优化问题,变量维度为 \(n\)(例如 \(n = 1000\)),目标函数 \(f(x): \mathbb{R}^n \rightarrow \mathbb{R}\) 是可微的,但非凸,并且具有“部分可分”或“坐标可分解”的特性。这意味着 \(f(x)\) 可以写成若干项之和,其中每一项通常只依赖于变量的一个小子集,或者其梯度计算可以按坐标方向进行有效分解。问题形式如下:
\[\min_{x \in \mathbb{R}^n} f(x) \]
其中,\(f(x)\) 可能是复杂的非凸函数,例如稀疏逻辑回归的负对数似然、带有非凸激活函数的神经网络损失函数,或某些工程设计中具有耦合效应的代价函数。虽然没有显式的约束条件,但通常我们假设解向量具有稀疏性结构,即最优解 \(x^*\) 的大部分分量接近或等于零。
解题过程详解
自适应坐标下降法(ACD)是经典坐标下降法(Coordinate Descent)的扩展,其核心思想是:在每一轮迭代中,不是随机或循环地选择一个坐标方向进行更新,而是根据某种“重要性”度量(例如,梯度分量的大小、历史更新信息等)自适应地选择一个或一组坐标进行更新。这样可以优先更新那些对目标函数下降贡献更大的变量,从而在高维且稀疏的场景下,比传统的梯度下降或均匀坐标下降更高效。
下面,我们按步骤拆解ACD的算法流程和关键原理。
步骤1:问题分析与算法动机
- 经典坐标下降法回顾:在经典方法中,我们固定一个顺序(如循环:\(x_1, x_2, \dots, x_n, x_1, \dots\)),每次仅优化一个变量 \(x_i\),而固定其他所有变量。其更新规则通常为:
\[ x_i^{k+1} = \arg\min_{t \in \mathbb{R}} f(x_1^k, \dots, x_{i-1}^k, t, x_{i+1}^k, \dots, x_n^k) \]
对于可微函数,这等价于沿坐标 $ i $ 方向进行精确线搜索。其优点是每次迭代成本低(只计算一个方向的梯度或进行一维优化),适合大规模问题。
- 经典方法的局限:
- 更新顺序敏感:循环顺序可能不是最优的。如果某些坐标对应的梯度分量长期很小,频繁更新它们就是浪费计算资源。
- 高维稀疏场景效率低:当最优解是稀疏的(大部分分量为零)时,只有少数“活跃”的坐标对函数值变化有显著影响。均匀地更新所有坐标会导致大量无效计算。
- 自适应坐标下降的动机:为了克服上述局限,ACD的核心是自适应地选择坐标。一个直观的想法是:梯度分量 \(|\nabla_i f(x^k)|\)(即目标函数关于第 \(i\) 个变量的偏导数的绝对值)的大小,反映了沿该坐标方向进行一步更新可能带来的函数值下降的“潜力”。优先更新那些梯度分量大的坐标,可以期望获得更快的函数值下降。
步骤2:自适应坐标选择策略
最常用的自适应策略是基于梯度分量的概率抽样。具体来说,在每次迭代 \(k\) 时:
- 计算概率分布:对于所有坐标 \(i = 1, 2, \dots, n\),计算一个选择概率 \(p_i^k\)。这个概率通常与当前迭代点 \(x^k\) 处梯度分量的绝对值 \(|\nabla_i f(x^k)|\) 的某个幂次成正比。一个常见的形式是:
\[ p_i^k = \frac{|\nabla_i f(x^k)|^\alpha}{\sum_{j=1}^{n} |\nabla_j f(x^k)|^\alpha} \quad \text{或} \quad p_i^k \propto |\nabla_i f(x^k)| + \epsilon \]
其中 $ \alpha > 0 $ 是一个参数(例如 $ \alpha=1 $ 或 $ \alpha=2 $),$ \epsilon > 0 $ 是一个很小的常数,防止梯度为零时概率为零。这被称为“重要性采样”。
- 根据概率抽样:根据概率分布 \(\{p_i^k\}_{i=1}^n\) 随机抽取一个坐标索引 \(i_k\)。梯度分量越大的坐标,被选中的概率越高。
步骤3:坐标更新
选定了坐标 \(i_k\) 后,我们沿着这个坐标方向更新 \(x_{i_k}\):
- 确定搜索方向:更新方向是标准坐标向量 \(e_{i_k}\)(第 \(i_k\) 个分量为1,其余为0的向量)。
- 计算更新步长:
- 精确线搜索:如果可以高效求解一维优化问题,则:
\[ t^* = \arg\min_{t \in \mathbb{R}} f(x^k + t e_{i_k}) \]
\[ x^{k+1} = x^k + t^* e_{i_k} \]
* **近似线搜索(更常用)**:为了降低单次迭代成本,通常采用基于梯度信息的固定步长或自适应步长。例如,使用**坐标方向的Lipschitz常数** $ L_{i_k} $ 来设定步长。假设我们知道(或能估计)函数 $ f $ 沿第 $ i_k $ 坐标方向是 $ L_{i_k} $-光滑的,则一个保证下降的更新为:
\[ x_{i_k}^{k+1} = x_{i_k}^k - \frac{1}{L_{i_k}} \nabla_{i_k} f(x^k) \]
\[ x_j^{k+1} = x_j^k \quad \text{for } j \neq i_k \]
* **自适应步长调整**:如果 $ L_{i_k} $ 未知,可以采用类似回溯线搜索的方法,但只沿着一个坐标方向进行测试。
- 稀疏性诱导:如果问题本身期望稀疏解,可以在更新公式中加入坐标方向的软阈值算子(即L1正则化的坐标近端算子),进行“贪婪”的坐标下降。更新规则变为近似求解:
\[ x_{i_k}^{k+1} = \arg\min_{t \in \mathbb{R}} \left[ \nabla_{i_k} f(x^k) \cdot (t - x_{i_k}^k) + \frac{L_{i_k}}{2}(t - x_{i_k}^k)^2 + \lambda |t| \right] \]
其中 $ \lambda > 0 $ 是正则化参数。其解析解为软阈值函数:
\[ x_{i_k}^{k+1} = S_{\lambda / L_{i_k}} \left( x_{i_k}^k - \frac{1}{L_{i_k}} \nabla_{i_k} f(x^k) \right) \]
这里 $ S_{\kappa}(a) = \text{sign}(a) \max(|a| - \kappa, 0) $。这能直接将某些坐标驱动到零,促进解的稀疏性。
步骤4:算法迭代与停止准则
- 迭代循环:重复步骤2和步骤3,直到满足停止准则。
- 停止准则:常用准则包括:
- 梯度范数:计算当前点的全梯度 \(\nabla f(x^k)\) 的范数(如 \(l_2\) 范数),若小于预设容差 \(\epsilon\),则停止。但对于ACD,每次迭代只计算一个坐标梯度,计算全梯度开销大。通常采用以下替代方案:
- 函数值变化:\(|f(x^{k}) - f(x^{k-1})| < \epsilon\)。
- 迭代次数:达到最大迭代次数 \(K_{\max}\)。
- 增量范数:\(\| x^{k+1} - x^{k} \| < \epsilon\)。
步骤5:自适应策略的扩展与变体
- “Lazy”或“Just-in-time”梯度计算:为了进一步提高效率,不需要在每次迭代都计算所有 \(n\) 个梯度分量来构造概率分布。可以维护一个梯度向量的估计值,并周期性地(或以一定的概率)对其进行“完全更新”(计算全梯度),而在其他迭代中,只更新被选中的坐标对应的梯度分量。
- 坐标块更新:一次迭代不止更新一个坐标,而是根据概率分布选择一小“块”坐标(例如,一组相关性强的变量)同时更新。这需要为这个坐标块定义一个块Lipschitz常数或使用子空间优化方法。
- 结合动量或历史信息:在选择概率中,不仅考虑当前梯度,还考虑历史梯度信息,以减少采样方差,使算法更稳定。
步骤6:一个简单的数值示例(概念性)
假设 \(f(x) = (x_1 - 1)^4 + 10(x_2 + 2)^2 + 0.1|x_3|\), \(n=3\)。这是一个部分可分的非凸函数,对 \(x_3\) 有L1正则项以促进稀疏性。
- 初始化:设 \(x^0 = (0, 0, 5)^T\)。
- 迭代k=0:
- 计算全梯度:\(\nabla f(x^0) = [4(0-1)^3, 20(0+2), 0.1 \cdot \text{sign}(5)]^T = [-4, 40, 0.1]^T\)。
- 设 \(\alpha = 1\),计算概率:\(p_1^0 = 4/(4+40+0.1)\approx 0.09\), \(p_2^0 \approx 0.91\), \(p_3^0 \approx 0.002\)。
- 按此概率抽样,极大概率会选中坐标 \(i_0 = 2\)。
- 估计 \(L_2\)(对于二次项 \(10(x_2+2)^2\), \(L_2 = 20\))。假设我们想诱导稀疏性,对 \(x_2\) 不加L1惩罚(因为其项是平滑的),则更新:\(x_2^1 = 0 - (1/20)*40 = -2\)。
- 更新:\(x^1 = (0, -2, 5)^T\)。
- 迭代k=1:
- 更新梯度估计:\(\nabla_2 f(x^1) = 20(-2+2)=0\)。我们可能只更新了这个坐标的梯度。
- 假设我们重新计算所有梯度(或使用维护的估计):\(\nabla f(x^1) \approx [-4, 0, 0.1]^T\)。
- 新的概率:\(p_1^1 \approx 0.975\), \(p_3^1 \approx 0.025\)。
- 很可能选中坐标 \(i_1 = 1\)。
- 对 \((x_1-1)^4\) 估计 \(L_1\) 较复杂,可以尝试回溯线搜索或使用一个保守的估计值进行梯度步更新。
- (后续迭代继续...)
通过这种方式,算法自动地将计算资源集中在当前“最需要”更新的变量上(梯度大的变量),快速降低了 \(x_2\),随后转向 \(x_1\),而对一直很小的 \(x_3\) 分量更新频率很低。如果对 \(x_3\) 加上软阈值操作,经过若干次更新后,它可能被精确地置为零,实现了稀疏性。
总结:
自适应坐标下降法(ACD)通过智能地选择更新坐标,将计算精力集中于对目标函数下降贡献最大的方向,特别适合求解大规模、高维、且具有稀疏性或部分可分结构的非凸优化问题。其核心是自适应坐标选择策略和高效的坐标方向更新。算法的收敛性在目标函数为凸或满足某些非凸性质(如拟凸、Polyak-Łojasiewicz条件)时,通常能得到理论保证。