基于改进的Barzilai-Borwein步长的自适应梯度法进阶题:非凸、非Lipschitz连续梯度情形
题目描述
我们考虑以下无约束非线性优化问题:
\[\min_{x \in \mathbb{R}^n} f(x) \]
其中,目标函数 \(f: \mathbb{R}^n \rightarrow \mathbb{R}\) 是连续可微的,但可能非凸,且其梯度 \(\nabla f\) 并不满足全局Lipschitz连续性条件。这意味着不存在一个常数 \(L > 0\),使得对所有 \(x, y\) 有 \(\|\nabla f(x) - \nabla f(y)\| \le L \|x - y\|\)。在这种情况下,标准的梯度下降法及其变体(如BB方法)的收敛性分析和步长选择会面临挑战。
你的任务是:设计一种基于Barzilai-Borwein(BB)步长思想的自适应梯度法,使其能够处理目标函数梯度非Lipschitz连续的情形,并分析其在一个具体的非凸、非光滑(但梯度存在)示例函数上的数值行为。具体示例如下:
考虑函数 \(f(x) = x^2 + 3 \sin^2(x) + 0.01|x|^{2.5}\),定义在 \(x \in \mathbb{R}\)。虽然函数本身连续可微,但其二阶导数(Hessian)无界,导致梯度变化率(Lipschitz常数)在 \(|x| \to \infty\) 时趋于无穷。
解题过程循序渐进讲解
步骤1:回顾标准BB步长及其在非Lipschitz情形下的问题
Barzilai-Borwein方法是一种拟牛顿思想的两点步长法。在迭代中,令 \(s_k = x_{k} - x_{k-1}\), \(y_k = \nabla f(x_k) - \nabla f(x_{k-1})\)。标准BB步长有两种形式:
- 长BB步长: \(\alpha_k^{BB1} = \frac{s_k^T s_k}{s_k^T y_k}\)
- 短BB步长: \(\alpha_k^{BB2} = \frac{s_k^T y_k}{y_k^T y_k}\)
BB步长试图近似于牛顿法中的 Hessian 逆的标量版本,通常能比固定步长梯度下降更快收敛。然而,在非Lipschitz梯度情形下,\(y_k\) 可能非常大或非常小,导致 \(\alpha_k^{BB}\) 可能变得极端(极大或接近零),从而引起数值不稳定,甚至发散。
步骤2:设计自适应机制以控制步长
为了解决上述问题,我们需要对BB步长进行自适应调整和界限控制。核心思想是:监测每次迭代中梯度的局部变化,并动态限制步长,防止其过大或过小。
一种改进的自适应BB步长策略如下:
- 计算原始BB步长候选值:例如,采用长BB步长 \(\alpha_k^{BB1}\) 作为基准。
- 估计局部 Lipschitz 常数:利用最近两次迭代的信息,计算一个局部Lipschitz常数估计值:
\[ L_k^{est} = \frac{\|y_k\|}{\|s_k\|}, \quad \text{如果} \|s_k\| \neq 0 \]
在非Lipschitz区域,\(L_k^{est}\) 会变得很大。
3. 步长界限调整:为防止步长过大导致发散,设置一个与局部曲率估计相关的上界。一个常见的安全步长上界是 \(2 / L_k^{est}\)(来源于梯度下降的收敛理论,当 Lipschitz 常数存在时)。但我们这里 \(L_k^{est}\) 可能不稳定,因此采用更保守的调整:
\[ \alpha_k^{max} = \min\left( \alpha_{max}, \frac{1}{\sqrt{\epsilon + L_k^{est}}} \right) \]
\[ \alpha_k^{min} = \max\left( \alpha_{min}, \epsilon \right) \]
其中 \(\alpha_{max}, \alpha_{min}\) 是用户定义的绝对最大、最小步长(例如 1e4 和 1e-8),\(\epsilon > 0\) 是一个小常数(如 1e-8)防止除零。
4. 步长投影:将原始BB步长投影到这个区间内:
\[ \alpha_k = \operatorname{Proj}_{[\alpha_k^{min}, \alpha_k^{max}]}(\alpha_k^{BB1}) = \min(\alpha_k^{max}, \max(\alpha_k^{min}, \alpha_k^{BB1})) \]
- 引入回溯线搜索(备选):如果投影后的步长仍导致函数值上升(非单调),则回退到一种保守步长,例如采用带Armijo条件的回溯线搜索,但使用当前步长作为初始尝试。
步骤3:算法伪代码
基于以上设计,算法流程如下:
- 输入:初始点 \(x_0\),初始步长 \(\alpha_0 > 0\),绝对步长界限 \(\alpha_{max} > \alpha_{min} > 0\),常数 \(\epsilon > 0\),最大迭代次数 \(K\),容许误差 \(tol\)。
- 计算梯度 \(g_0 = \nabla f(x_0)\),令 \(k = 1\)。
- 当 \(k \le K\) 且 \(\|g_{k-1}\| > tol\) 时,执行循环:
a. 计算搜索方向 \(d_k = -g_{k-1}\)(最速下降方向)。
b. 如果 \(k=1\),则令步长 \(\alpha_k = \alpha_0\)。
c. 否则,计算 \(s_k = x_{k-1} - x_{k-2}\), \(y_k = g_{k-1} - g_{k-2}\)。
d. 如果 \(s_k^T y_k > \epsilon \|s_k\|^2\)(保证正定性,避免负步长),则计算 \(\alpha_k^{BB1} = \frac{s_k^T s_k}{s_k^T y_k}\);否则令 \(\alpha_k^{BB1} = \alpha_{k-1}\)。
e. 估计局部Lipschitz常数:如果 \(\|s_k\| > \epsilon\),则 \(L_k^{est} = \|y_k\| / \|s_k\|\);否则 \(L_k^{est} = 1/\alpha_{k-1}\)。
f. 计算自适应界限:
\(\alpha_k^{max} = \min( \alpha_{max}, 1 / (\epsilon + \sqrt{L_k^{est}}) )\)
\(\alpha_k^{min} = \max( \alpha_{min}, \epsilon )\)
g. 投影步长:\(\alpha_k = \min(\alpha_k^{max}, \max(\alpha_k^{min}, \alpha_k^{BB1}))\)。
h. 尝试步:计算候选点 \(x_k^+ = x_{k-1} + \alpha_k d_k\),计算 \(f_k^+ = f(x_k^+)\)。
i. 非单调检测:如果 \(f_k^+ > f(x_{k-1}) - 10^{-4} \alpha_k \|g_{k-1}\|^2\)(即不满足充分下降条件),则启动回溯:
- 令 \(\alpha_k := 0.5 \alpha_k\),重新计算 \(x_k^+\) 和 \(f_k^+\),直到满足充分下降条件或步长小于 \(\alpha_k^{min}\)。
j. 接受迭代:\(x_k = x_k^+\), \(f_k = f_k^+\),计算新梯度 \(g_k = \nabla f(x_k)\)。
k. \(k = k+1\)。 - 输出 \(x_k\) 作为近似极小点。
步骤4:应用于给定示例函数
对于 \(f(x) = x^2 + 3 \sin^2(x) + 0.01|x|^{2.5}\),其梯度为:
\[f'(x) = 2x + 6 \sin x \cos x + 0.01 \cdot 2.5 \cdot \operatorname{sign}(x) |x|^{1.5} = 2x + 3 \sin(2x) + 0.025 \operatorname{sign}(x) |x|^{1.5} \]
该梯度是连续的,但当 \(|x|\) 很大时,项 \(0.025 |x|^{1.5}\) 增长快于线性,因此梯度变化率(即二阶导数)无界,不满足全局 Lipschitz 连续性。
用上述自适应BB算法求解:
- 从初始点 \(x_0 = 5.0\) 开始,设置 \(\alpha_0=1, \alpha_{max}=10^3, \alpha_{min}=10^{-8}, \epsilon=10^{-8}, K=1000, tol=10^{-6}\)。
- 在迭代过程中,当 \(x\) 较大时,\(L_k^{est}\) 会很大,从而使得 \(\alpha_k^{max}\) 自动变小,避免因步长过大而越过狭窄山谷或引起振荡。
- 由于函数非凸,有多个局部极小点。算法可能会收敛到某个局部极小点,例如在 \(x \approx 0\) 附近(全局极小点附近)或 \(x \approx \pm \pi\) 附近的局部极小点,具体取决于初始点。
- 回溯线搜索保证了每次迭代的充分下降,即使BB步长估计不佳,也能通过缩短步长保证稳定性。
步骤5:数值行为分析
- 稳定性:自适应界限和回溯机制确保了即使在梯度变化剧烈的区域,步长也不会失控,避免了发散。
- 收敛性:由于保证了充分下降条件,且梯度连续,算法在理论上能收敛到一个驻点(梯度为零的点),尽管是非凸情况。对于非Lipschitz梯度,标准收敛定理不直接适用,但通过步长有界和充分下降,通常仍能观测到数值收敛。
- 效率:在梯度变化相对平缓的区域,BB步长能提供较快的收敛速度;在陡峭区域,自适应机制将其限制在安全范围内,虽然可能减慢进度,但保证了稳定性。
- 与标准梯度下降对比:固定步长的梯度下降需要非常保守的步长才能保证全局收敛,导致在平缓区域进展缓慢。而自适应BB方法能动态调整,在多数区域更快。
总结
本题目展示了如何改进经典的BB步长策略,通过引入基于局部Lipschitz常数估计的自适应界限和回溯线搜索,使其能够处理梯度非Lipschitz连续的非凸优化问题。这种自适应机制平衡了快速收敛和数值稳定性,是处理复杂目标函数的一种实用策略。