非线性规划中的自适应坐标下降法(Adaptive Coordinate Descent)基础题
题目描述
考虑一个无约束非线性规划问题:
\[\min_{x \in \mathbb{R}^n} f(x) \]
其中目标函数\(f: \mathbb{R}^n \to \mathbb{R}\)是光滑但非凸的,且其梯度\(\nabla f(x)\)可计算,但\(n\)较大(例如\(n \geq 100\))。在每次迭代中,你只能沿少数坐标方向(甚至单个坐标)进行搜索。自适应坐标下降法通过在每个迭代中自适应地选择一个或多个坐标方向,并沿该方向进行一维精确线搜索或近似最小化,从而高效地求解此类大规模问题。
本题的任务是:阐述自适应坐标下降法的基本思想,并设计一种自适应规则来选择坐标方向,使得算法在函数值下降和计算成本之间取得平衡。最后,将该方法应用于一个具体的测试函数(例如扩展Rosenbrock函数),并解释其迭代过程。
解题过程循序渐进讲解
第一步:理解坐标下降法的基础
坐标下降法(Coordinate Descent)是一种迭代优化方法。在每次迭代中,它选择变量\(x\)的一个分量(一个坐标方向),固定其他所有分量不变,然后沿该坐标方向最小化目标函数。
- 对于一个选定的坐标索引\(i\),迭代更新为:
\[ x_i^{(k+1)} = \arg\min_{t \in \mathbb{R}} f\left(x_1^{(k)}, \dots, x_{i-1}^{(k)}, t, x_{i+1}^{(k)}, \dots, x_n^{(k)}\right) \]
或采用梯度步长近似:\(x_i^{(k+1)} = x_i^{(k)} - \alpha \cdot \frac{\partial f}{\partial x_i}(x^{(k)})\),其中\(\alpha\)为步长。
- 经典坐标下降法通常按固定顺序循环遍历所有坐标(如\(1,2,\dots,n,1,2,\dots\))。
为什么需要“自适应”选择坐标?
在传统循环坐标下降中,即使某些坐标方向上的梯度已经很小(表明该方向已接近最优),算法仍然会花费计算资源去更新它们。自适应坐标下降法则根据当前迭代的信息动态选择最“有潜力”下降的坐标,从而加速收敛。
第二步:设计自适应坐标选择规则
自适应规则的核心是评估每个坐标方向的“重要性”,并优先更新重要性高的坐标。常用的一种自适应规则基于梯度分量的大小:
-
梯度最大分量规则:
- 计算当前点\(x^{(k)}\)的梯度\(\nabla f(x^{(k)}) = \left( g_1, g_2, \dots, g_n \right)^\top\)。
- 选择梯度分量绝对值最大的坐标:\(i_k = \arg\max_{1 \le i \le n} |g_i|\)。
- 原理:梯度分量绝对值大意味着沿该方向函数变化率大,可能获得更大的下降。
-
概率采样规则(更适用于随机优化):
- 根据梯度分量绝对值的大小分配选择概率:\(p_i = \frac{|g_i|}{\sum_{j=1}^n |g_j|}\)。
- 然后随机采样一个坐标\(i\),其概率与\(|g_i|\)成正比。
- 优点:引入随机性可避免陷入某些循环模式,并适用于分布式计算。
-
近似函数下降量预测规则:
- 对每个坐标\(i\),估计沿该方向进行一次精确线搜索可能获得的函数下降量\(\Delta_i\)(例如,用二次模型近似)。
- 选择\(\Delta_i\)最大的坐标。
- 这种方法更精确但计算成本略高。
在本题中,我们采用梯度最大分量规则,因为它简单且在实践中常常有效。
第三步:算法步骤
我们设计自适应坐标下降法如下:
- 输入:初始点\(x^{(0)}\),容差\(\epsilon > 0\),最大迭代次数\(K_{\max}\)。
- 初始化:\(k = 0\)。
- 迭代:当\(k < K_{\max}\)且\(\|\nabla f(x^{(k)})\| > \epsilon\)时,执行:
a. 计算梯度:\(g = \nabla f(x^{(k)})\)。
b. 自适应选择坐标:\(i_k = \arg\max_{1 \le i \le n} |g_i|\)。
c. 沿坐标方向更新:
进行一维精确线搜索(或使用固定步长\(\alpha\),如\(\alpha=1/L\),其中\(L\)是梯度的Lipschitz常数估计):
\[t^* = \arg\min_{t \in \mathbb{R}} f\left(x^{(k)} + t e_{i_k}\right) \]
其中$e_{i_k}$是第$i_k$个标准基向量。
更新:$x^{(k+1)} = x^{(k)} + t^* e_{i_k}$。
d. \(k = k+1\)。
4. 输出:近似最优解\(x^{(k)}\)。
注意:如果精确线搜索成本高,也可采用回溯线搜索(Armijo条件)来保证充分下降。
第四步:应用于扩展Rosenbrock函数
考虑扩展Rosenbrock函数(n为偶数):
\[f(x) = \sum_{i=1}^{n/2} \left[ 100 (x_{2i} - x_{2i-1}^2)^2 + (1 - x_{2i-1})^2 \right] \]
该函数非凸,在\(x = (1,1,\dots,1)^\top\)处取得全局最小值\(0\),且存在狭窄弯曲的谷地,优化难度较大。
迭代过程示例(n=4简化说明):
- 初始点:\(x^{(0)} = (-1.2, 1, -1.2, 1)^\top\)。
- 计算梯度:\(\nabla f(x^{(0)}) = \left( \frac{\partial f}{\partial x_1}, \dots, \frac{\partial f}{\partial x_4} \right)\)。
通过计算可知,例如\(|g_1|\)较大。 - 选择坐标:\(i_0 = \arg\max_i |g_i|\),假设为\(i_0=1\)。
- 沿\(x_1\)方向进行一维最小化:
固定\(x_2,x_3,x_4\),求解\(\min_{t} f(x_1^{(0)}+t, x_2^{(0)}, x_3^{(0)}, x_4^{(0)})\),得到\(t^*\),更新\(x_1^{(1)} = x_1^{(0)} + t^*\)。 - 下一次迭代重新计算全梯度,再次选择梯度分量最大的坐标(可能是\(x_2\)或\(x_3\)等)。
- 由于Rosenbrock函数的“香蕉”形状,自适应选择通常会优先更新梯度较大的坐标(通常是奇数索引变量\(x_{2i-1}\)),从而更快地接近谷底,然后逐步调整偶数索引变量\(x_{2i}\)。
与循环坐标下降对比:
- 循环坐标下降会依次更新\(x_1,x_2,x_3,x_4\),即使某些坐标梯度已很小。
- 自适应方法跳过那些梯度很小的坐标,集中计算资源在“重要”方向上,因此通常能以更少的迭代次数(但每次迭代需计算全梯度)达到相同精度。
第五步:收敛性与注意事项
- 收敛性:对于光滑函数,如果每次更新都能沿坐标方向精确最小化,且坐标选择规则满足“基本方向循环覆盖”或“贪婪下降”条件,算法可收敛到驻点。
- 缺点:每次迭代需要计算全梯度以选择坐标,这在\(n\)很大时可能成为瓶颈。为此,有随机梯度版本(随机选取几个坐标估计梯度)或使用代理模型近似梯度。
- 加速技巧:可结合“坐标块”(一次更新多个坐标)或“动量项”加速。
总结:
自适应坐标下降法通过贪婪选择当前最陡的坐标方向,提高了传统坐标下降法的效率,特别适合中等维度、梯度计算成本可接受的问题。在扩展Rosenbrock函数上,它能够快速聚焦于梯度较大的变量,有效减少迭代次数,但需注意全梯度计算的开销。实践中,可根据问题结构设计更智能的自适应规则(如利用稀疏性、历史信息等)。