非线性规划中的自适应步长梯度投影法进阶题:处理非光滑、非凸约束优化问题
1. 题目描述
考虑以下非线性约束优化问题:
\[\min_{x \in \mathbb{R}^n} f(x) \]
\[ \text{s.t.} \quad c_i(x) \leq 0, \quad i = 1, 2, \dots, m \]
其中,目标函数 \(f: \mathbb{R}^n \to \mathbb{R}\) 是非凸且非光滑的(例如,是Lipschitz连续但梯度不一定处处存在的函数,如带有 \(L_1\) 范数惩罚项)。约束函数 \(c_i(x)\) 是连续可微的,但其可行域 \(\mathcal{X} = \{x \mid c_i(x) \leq 0\}\) 可能是非凸的。我们要求解此问题,但常规的梯度法(需要梯度存在)和投影法(需要投影计算容易)都面临挑战。本题要求设计一个自适应步长的梯度投影法的变体,使其能处理目标函数非光滑、可行域非凸的情况,并分析其关键步骤与收敛行为。
2. 解题过程
步骤1:问题分析与挑战识别
- 目标函数非光滑:例如,\(f(x) = g(x) + \lambda \|x\|_1\),其中 \(g\) 光滑,\(\|x\|_1 = \sum |x_j|\) 非光滑。梯度投影法需要计算梯度 \(\nabla f\),但 \(\|x\|_1\) 在 \(x_j=0\) 处不可导。
- 可行域非凸:约束 \(c_i(x) \leq 0\) 非凸,意味着从当前点 \(x^k\) 出发,沿负梯度方向移动后,投影到可行域 \(\mathcal{X}\) 上的操作(即 \(P_\mathcal{X}(x)\))可能不是单值映射,或者计算极其困难(因为需要求解一个子优化问题)。
- 步长选择:梯度投影法通常需要步长满足某些条件(如 Lipschitz 常数)以保证收敛,但在非光滑情形下,Lipschitz 常数可能未知或不存在,需要自适应调整。
步骤2:算法框架构建——近似梯度与代理投影
我们无法直接使用标准梯度投影迭代 \(x^{k+1} = P_\mathcal{X}(x^k - \alpha_k \nabla f(x^k))\),因为 \(\nabla f\) 可能不存在,且 \(P_\mathcal{X}\) 难算。需要引入两个关键改进:
- 用次梯度代替梯度:对于非光滑凸函数,我们可以使用次梯度 \(\partial f(x)\)(满足 \(f(y) \geq f(x) + g^T(y-x), \forall y, g \in \partial f(x)\))。对于非凸非光滑函数,我们可以使用Clarke次梯度(广义梯度)\(\partial_C f(x)\),它是普通梯度的推广。在实际计算中,我们可以用一个“近似梯度” \(g^k\),它是通过当前点附近函数值估计得到的一个下降方向,比如通过光滑化技术或有限差分得到一个梯度估计。
- 用线性化约束的投影代替精确投影:由于可行域 \(\mathcal{X}\) 非凸,精确投影 \(P_\mathcal{X}\) 难求。我们采用序列线性化的思想:在当前点 \(x^k\),将约束线性化:
\[ c_i(x) \approx c_i(x^k) + \nabla c_i(x^k)^T (x - x^k) \leq 0 \]
于是,在 $x^k$ 附近,我们用一个**多面体集合**(线性不等式约束)来近似可行域:
\[ \tilde{\mathcal{X}}_k = \{ x \mid c_i(x^k) + \nabla c_i(x^k)^T (x - x^k) \leq 0, i=1,\dots,m \} \]
投影到这个多面体上是一个**二次规划(QP)**问题,可以高效求解。
步骤3:自适应步长策略
在非光滑情况下,我们不知道 Lipschitz 常数。可以采用回溯线搜索(backtracking line search) 来自适应确定步长 \(\alpha_k\)。但这里,由于是投影法,我们通常结合谱梯度步长(Barzilai-Borwein, BB步长) 和充分下降条件。
- BB步长:即使对于非光滑问题,BB步长也能提供较好的尺度信息。有两种形式:
\[ \alpha_k^{BB1} = \frac{s_{k-1}^T s_{k-1}}{s_{k-1}^T y_{k-1}}, \quad \alpha_k^{BB2} = \frac{s_{k-1}^T y_{k-1}}{y_{k-1}^T y_{k-1}} \]
其中 \(s_{k-1} = x^k - x^{k-1}\), \(y_{k-1} = g^k - g^{k-1}\),\(g^k\) 是当前点的(近似)次梯度。通常我们取 \(\alpha_k = \min(\alpha_{\max}, \max(\alpha_{\min}, \alpha_k^{BB1}))\) 来保证步长在一定范围内。
- 充分下降条件:在确定了试探步长后,我们需要验证移动后是否充分下降。一个常用的条件是 Armijo型条件 的变体:令 \(d^k = P_{\tilde{\mathcal{X}}_k}(x^k - \alpha_k g^k) - x^k\) 为搜索方向,然后检查:
\[ f(x^k + \beta^m d^k) \leq f(x^k) + \sigma \beta^m (g^k)^T d^k \]
其中 \(\beta \in (0,1)\), \(\sigma \in (0,1)\),\(m\) 是使不等式成立的最小非负整数。然后取步长 \(\alpha_k' = \beta^m \alpha_k\)。这确保了每次迭代有充分的函数值下降。
步骤4:完整算法步骤
- 初始化:选取初始点 \(x^0 \in \mathcal{X}\)(可行),初始步长 \(\alpha_0 > 0\),参数 \(\eta \in (0,1)\), \(\sigma \in (0,1)\), \(\alpha_{\min}, \alpha_{\max} > 0\),容忍度 \(\epsilon > 0\),置 \(k=0\)。
- 计算近似梯度:在当前点 \(x^k\),计算目标函数的一个(Clarke)次梯度或近似梯度 \(g^k \in \partial_C f(x^k)\)。对于 \(f(x) = g(x) + \lambda \|x\|_1\),可以取 \(g^k = \nabla g(x^k) + \lambda \xi^k\),其中 \(\xi^k \in \partial \|x^k\|_1\)(即 \(\xi^k_j = \mathrm{sign}(x^k_j)\) 若 \(x^k_j \neq 0\),否则 \(\xi^k_j \in [-1,1]\))。
- 构造线性化可行集:构建多面体近似:
\[ \tilde{\mathcal{X}}_k = \{ x \mid c_i(x^k) + \nabla c_i(x^k)^T (x - x^k) \leq 0, i=1,\dots,m \} \]
- 计算搜索方向:求解投影子问题(一个QP):
\[ z^k = \arg\min_{z \in \tilde{\mathcal{X}}_k} \frac{1}{2} \|z - (x^k - \alpha_k g^k)\|^2 \]
令搜索方向 \(d^k = z^k - x^k\)。
5. 自适应步长调整:通过回溯线搜索找到步长缩放因子。令 \(m=0\)。
- 当 \(f(x^k + \beta^m d^k) > f(x^k) + \sigma \beta^m (g^k)^T d^k\) 且 \(x^k + \beta^m d^k \in \mathcal{X}\)(或至少满足线性化约束)时,令 \(m = m+1\)。
- 令 \(\alpha_k' = \beta^m \alpha_k\), \(x^{k+1} = x^k + \alpha_k' d^k\)。
- 更新步长:计算 \(s_k = x^{k+1} - x^k\), \(y_k = g^{k+1} - g^k\)。然后计算BB步长候选:
\[ \alpha_{k+1}^{\mathrm{BB}} = \frac{s_k^T s_k}{s_k^T y_k} \quad \text{或} \quad \frac{s_k^T y_k}{y_k^T y_k} \]
限制 \(\alpha_{k+1} = \min(\alpha_{\max}, \max(\alpha_{\min}, \alpha_{k+1}^{\mathrm{BB}}))\)。
7. 检查终止:如果 \(\|d^k\| < \epsilon\) 或 \(|f(x^{k+1}) - f(x^k)| < \epsilon (1+|f(x^k)|)\),则停止并输出 \(x^{k+1}\)。否则,令 \(k = k+1\),返回步骤2。
步骤5:关键点与收敛性说明
- 可行性保持:由于我们投影到线性化约束集 \(\tilde{\mathcal{X}}_k\),而 \(x^k\) 本身满足线性化约束(因为 \(c_i(x^k)+0 \leq 0\)),所以投影点 \(z^k \in \tilde{\mathcal{X}}_k\)。但线性化约束只是原约束的近似,所以 \(z^k\) 不一定满足原约束 \(c_i(z^k) \leq 0\)。不过,由于我们采用回溯线搜索,并且通常要求试验点 \(x^k + \beta^m d^k\) 满足原约束(或通过添加松弛暂时允许轻微不可行),最终迭代点会逐渐回到可行域或在其边界附近。这就是“近似投影”的思想。
- 处理非光滑:通过使用次梯度(或近似梯度)\(g^k\) 代替梯度,算法能处理目标函数的非光滑性。但注意,非光滑点的次梯度选择不唯一,可能影响收敛路径。
- 自适应步长:BB步长提供了曲率信息,能加速收敛;回溯线搜索确保了充分下降,这对非光滑问题的收敛至关重要。
- 收敛性:在目标函数 \(f\) 是局部Lipschitz且下半连续,可行域 \(\mathcal{X}\) 是闭集的较温和条件下,可以证明算法产生的序列的任何极限点都是Clarke静止点(即 \(0 \in \partial_C f(x^*) + N_\mathcal{X}(x^*)\),其中 \(N_\mathcal{X}\) 是可行域的常规法锥)。但全局收敛到全局最优解不能保证,因为问题是非凸的。
总结:本题的算法是梯度投影法的一个进阶变体,通过结合次梯度处理非光滑,序列线性化处理非凸约束,以及BB步长+回溯搜索实现自适应步长,从而能够处理一类较复杂的非光滑非凸约束优化问题。其核心思想是将复杂问题在每一步简化成一个易处理的子问题(QP),并保证迭代的可行性与下降性。