非线性规划中的自适应记忆梯度下降法(Adaptive Memory Gradient Descent, AMGD)基础题
我将为你讲解“自适应记忆梯度下降法”的基础题目,这是一种结合了梯度下降与历史梯度信息自适应调整步长和方向的优化方法,适用于求解大规模、非凸、光滑的无约束优化问题。
题目描述:
考虑无约束非线性规划问题:
\[\min_{x \in \mathbb{R}^n} f(x) \]
其中目标函数 \(f: \mathbb{R}^n \to \mathbb{R}\) 是连续可微的,但可能是非凸的。假设我们无法获得 \(f\) 的二阶 Hessian 矩阵信息,或者问题维度 \(n\) 很大使得二阶方法计算成本过高。我们需要设计一种自适应记忆梯度下降法,利用前几步的梯度信息来动态调整搜索方向和步长,在保证收敛的前提下提高收敛速度。
具体地,给定初始点 \(x_0\),最大迭代次数 \(K\),容忍误差 \(\epsilon\)。在每一步迭代 \(k\) 中,需要:
- 计算当前梯度 \(g_k = \nabla f(x_k)\)。
- 利用前 \(m\) 步的梯度信息(记忆长度 \(m\)),构造一个自适应的搜索方向 \(d_k\)。
- 通过一种自适应策略确定步长 \(\alpha_k\)。
- 更新迭代点:\(x_{k+1} = x_k + \alpha_k d_k\)。
- 检查终止条件(如梯度范数 \(\|g_k\| < \epsilon\) 或达到最大迭代次数)。
请解释自适应记忆梯度下降法的原理、具体更新公式、步长选择策略、收敛性条件,并用一个简单的二维非凸函数示例说明其迭代过程。
解题过程讲解:
1. 方法背景与核心思想
梯度下降法(Gradient Descent, GD)是优化中最基础的一阶方法,其更新公式为:
\[x_{k+1} = x_k - \alpha_k \nabla f(x_k) \]
其中步长 \(\alpha_k\) 可以通过线搜索确定。但标准 GD 在非凸、病态问题上可能收敛缓慢,因为它只使用了当前梯度,没有利用历史信息。
自适应记忆梯度下降法(AMGD)的核心改进是:在每一步,不仅使用当前梯度,还利用前 \(m\) 步的梯度(“记忆”),通过加权组合或校正机制,构造一个改进的搜索方向 \(d_k\),并自适应调整步长 \(\alpha_k\),从而可能加速收敛、避免振荡。
2. 搜索方向的构造
一种常见的构造方式是基于“梯度差分”的记忆思想,类似共轭梯度法(CG)但更灵活。设记忆长度为 \(m\)(通常 \(m\) 较小,如 5~10),定义:
\[s_{k-1} = x_k - x_{k-1}, \quad y_{k-1} = g_k - g_{k-1} \]
(即上一步的位移和梯度变化)
在标准共轭梯度法中,搜索方向是:
\[d_k = -g_k + \beta_k d_{k-1} \]
其中 \(\beta_k\) 是标量参数(如 Fletcher-Reeves 公式)。
在 AMGD 中,我们可以引入多个历史梯度信息,例如扩展为:
\[d_k = -g_k + \sum_{i=1}^{\min(k, m)} \gamma_{k,i} \, d_{k-i} \]
但更实用的简化是:只使用上一步的方向,但自适应地调整 \(\beta_k\) 的计算,使其能够根据历史梯度变化动态调整。
3. 自适应步长策略
步长 \(\alpha_k\) 的选择对收敛至关重要。AMGD 中常用的一种自适应策略是 回溯线搜索(Backtracking Line Search) 结合 Armijo 条件:
- 给定初始试验步长 \(\bar{\alpha}_k\)(可设为上一步步长 \(\alpha_{k-1}\) 或一个估计值)。
- 参数:收缩因子 \(\rho \in (0,1)\),Armijo 系数 \(c \in (0,1)\)。
- 重复 \(\alpha = \rho^j \bar{\alpha}_k\) 直到满足下降条件:
\[ f(x_k + \alpha d_k) \le f(x_k) + c \, \alpha \, g_k^\top d_k \]
- 然后令 \(\alpha_k = \alpha\)。
这个策略确保每一步都有足够的函数下降。
4. 自适应记忆参数 \(\beta_k\) 的更新
为了体现“自适应记忆”,我们可以设计 \(\beta_k\) 使其能根据梯度变化自动调整。一种简单的自适应方式是采用 Dai–Yuan (DY) 公式的变体:
\[\beta_k^{\text{DY}} = \frac{\|g_k\|^2}{d_{k-1}^\top y_{k-1}} \]
但分母可能为零或负,需要保护。AMGD 中可以采用以下启发式自适应规则:
若 \(d_{k-1}^\top y_{k-1} > 0\) 且 \(\|y_{k-1}\|\) 较大,说明曲率变化明显,可以取较小的 \(\beta_k\) 以避免过大扰动;否则,可参考 FR 公式:\(\beta_k = \frac{\|g_k\|^2}{\|g_{k-1}\|^2}\)。
更系统的自适应规则可以是:
\[\beta_k = \max\left(0, \; \min\left( \frac{\|g_k\|^2}{d_{k-1}^\top y_{k-1}}, \; \frac{\|g_k\|^2}{\|g_{k-1}\|^2} \right) \right) \]
并在分母接近零时回退到最速下降(\(\beta_k = 0\))。
5. 完整算法步骤
给定:初始点 \(x_0\),记忆长度 \(m\),初始步长 \(\alpha_0 > 0\),参数 \(c, \rho\),容差 \(\epsilon\),最大迭代 \(K\)。
- 计算梯度 \(g_0 = \nabla f(x_0)\),设初始方向 \(d_0 = -g_0\)。
- 对 \(k = 0, 1, 2, \dots, K-1\) 执行:
a. 用回溯线搜索求步长 \(\alpha_k\) 满足 Armijo 条件。
b. 更新:\(x_{k+1} = x_k + \alpha_k d_k\)。
c. 计算新梯度 \(g_{k+1} = \nabla f(x_{k+1})\)。
d. 若 \(\|g_{k+1}\| < \epsilon\),终止。
e. 计算位移 \(s_k = x_{k+1} - x_k\),梯度差 \(y_k = g_{k+1} - g_k\)。
f. 根据自适应规则计算 \(\beta_{k+1}\)(例如如上式)。
g. 更新搜索方向:\(d_{k+1} = -g_{k+1} + \beta_{k+1} d_k\)。 - 输出最终解 \(x_{k+1}\)。
6. 收敛性条件
对于光滑且下界有界的函数 \(f\),如果采用 Armijo 线搜索且方向 \(d_k\) 满足充分下降条件(即存在常数 \(c_1 > 0\) 使得 \(-g_k^\top d_k \ge c_1 \|g_k\|^2\)),并且步长 \(\alpha_k\) 满足 Wolfe 条件或 Armijo 条件,则算法产生的序列满足:
\[\liminf_{k \to \infty} \|g_k\| = 0 \]
即梯度范数趋于零,达到一阶临界点。
在 AMGD 中,如果我们设计的 \(\beta_k\) 使得 \(d_k\) 保持与负梯度足够对齐,并且步长选择合理,通常可以保证收敛。
7. 二维示例演示
考虑非凸函数:\(f(x) = (x_1 - 1)^4 + (x_2 - 2)^2 + 0.1(x_1^2 + x_2^2)\),起点 \(x_0 = (0, 0)\),记忆长度 \(m=1\),参数 \(c=0.1, \rho=0.5, \epsilon=10^{-4}\)。
迭代过程简化说明:
- 第 0 步:\(g_0 = [-4, -4]\),\(d_0 = -g_0 = [4, 4]\),线搜索得 \(\alpha_0 \approx 0.1\),\(x_1 = [0.4, 0.4]\)。
- 第 1 步:\(g_1 = [-2.35, -3.2]\),\(s_0 = [0.4, 0.4]\),\(y_0 = [1.65, 0.8]\),计算 \(\beta_1\)(用自适应规则),得 \(d_1 = -g_1 + \beta_1 d_0\),继续迭代。
随着迭代,搜索方向会根据历史梯度自动调整,在曲率大的方向减小步长,在平坦方向增大步长,从而更稳定地逼近最优解 \(x^* \approx (0.74, 1.85)\)。
总结:
自适应记忆梯度下降法通过利用前几步的梯度信息,动态调整搜索方向和步长,在保持一阶方法低计算成本的同时,改善了标准梯度下降的收敛性能。其核心在于自适应地计算 \(\beta_k\) 和步长,确保充分下降和收敛。该方法特别适用于大规模、非凸、梯度计算成本较高的问题。