自适应记忆梯度法(Adaptive Memory Gradient Method)基础题
问题描述:
考虑一个无约束非线性优化问题:
\[ \min_{x \in \mathbb{R}^n} f(x) \]
其中目标函数 \(f: \mathbb{R}^n \to \mathbb{R}\) 是连续可微的,但可能非凸,且其梯度 \(\nabla f(x)\) 可计算。
自适应记忆梯度法(AMG)是一种拟牛顿类方法,它利用前几步的迭代信息(如梯度差和位移差)自适应地构造一个标量或对角矩阵来近似Hessian矩阵的逆,从而在每步迭代中生成下降方向。与标准的BB(Barzilai-Borwein)方法只使用上一步信息不同,AMG通过加权组合多个历史信息来调整步长,以提高收敛速度和稳定性。
本题要求:
- 推导AMG方法的基本更新公式,特别是如何利用历史信息计算自适应步长。
- 给出算法的完整步骤,包括初始化、方向计算、步长选择(或线搜索策略)、迭代更新和终止条件。
- 对一个具体函数(如扩展Rosenbrock函数:\(f(x) = \sum_{i=1}^{n-1} [100(x_{i+1} - x_i^2)^2 + (1 - x_i)^2]\))进行数值模拟,初始点取 \(x_0 = (-1.2, 1, -1.2, 1, \dots) \in \mathbb{R}^{10}\),分析AMG的收敛行为。
解题过程:
1. 方法原理
自适应记忆梯度法的核心思想:利用最近 \(m\) 步的梯度差 \(y_k = \nabla f(x_{k+1}) - \nabla f(x_k)\) 和位移差 \(s_k = x_{k+1} - x_k\),构造一个对角矩阵 \(D_k\)(或标量 \(\alpha_k\))来近似Hessian逆,使得拟牛顿条件 \(D_k y_{k-i} \approx s_{k-i}\) 对多个历史对 \((s_{k-i}, y_{k-i})\) 在加权意义下最好地满足。
常用形式是标量步长 \(\alpha_k\) 的更新,通过最小化加权误差:
\[ \min_{\alpha} \sum_{i=0}^{m-1} w_i (\alpha y_{k-i} - s_{k-i})^2 \]
其中权重 \(w_i\) 通常按指数衰减(如 \(w_i = \rho^i\),\(0 < \rho < 1\)),赋予近期信息更高重要性。求解该最小二乘问题得到:
\[ \alpha_k = \frac{\sum_{i=0}^{m-1} w_i s_{k-i}^\top y_{k-i}}{\sum_{i=0}^{m-1} w_i \|y_{k-i}\|^2} \]
这可以看作多个BB步长的加权平均,其中第 \(i\) 个历史对应的BB步长为 \(\alpha_{k-i}^{BB1} = \frac{s_{k-i}^\top y_{k-i}}{\|y_{k-i}\|^2}\)。
另一种变体是直接使用对角矩阵 \(D_k = \text{diag}(d_k)\),通过类似加权拟合确定每个分量,但标量形式更简单常用。
2. 算法步骤
步骤0:初始化
- 选择初始点 \(x_0\),记忆长度 \(m\),权重衰减因子 \(\rho \in (0,1)\)(如 \(\rho=0.8\)),线搜索参数 \(\beta \in (0,1)\),\(\sigma \in (0,0.5)\),梯度容差 \(\epsilon\)。
- 计算初始梯度 \(g_0 = \nabla f(x_0)\),设置初始步长 \(\alpha_0 = 1 / \|g_0\|\)(或其他启发式值)。
- 初始化历史队列 \(S = [\,]\),\(Y = [\,]\) 分别存储最近的 \(m\) 对 \(s_k, y_k\)。
步骤1:检查终止条件
若 \(\|g_k\| < \epsilon\),则输出 \(x_k\) 作为近似极小点;否则继续。
步骤2:计算搜索方向
采用负梯度方向:\(d_k = -g_k\)。(注意:AMG主要调整步长,方向仍为梯度下降;也可结合共轭梯度思想调整方向,但基础版用梯度方向。)
步骤3:自适应步长计算
若历史对数 \(\ell = \min(k, m) \geq 1\):
- 权重 \(w_i = \rho^{\ell-1-i}\) 对 \(i=0,\dots,\ell-1\)(最近权重最大)。
- 计算加权分子 \(A = \sum_{i=0}^{\ell-1} w_i s_{k-1-i}^\top y_{k-1-i}\) 与分母 \(B = \sum_{i=0}^{\ell-1} w_i \|y_{k-1-i}\|^2\)。
- 步长 \(\alpha_k = A / B\),若 \(B=0\) 或 \(\alpha_k \leq 0\) 则置 \(\alpha_k = 1\)(回退)。
若 \(\ell = 0\)(第一步),用初始步长或BB1步长 \(\alpha_k = \frac{s_0^\top y_0}{\|y_0\|^2}\)(需先有一次迭代才能计算,因此第一步常使用固定步长或回溯线搜索直接确定步长)。
步骤4:线搜索(确保下降)
虽然 \(\alpha_k\) 由历史信息预估,但为保证全局收敛,通常结合非精确线搜索(如Armijo条件):
令 \(\alpha = \alpha_k\),重复 \(\alpha = \beta \alpha\) 直到满足
\[ f(x_k + \alpha d_k) \leq f(x_k) + \sigma \alpha g_k^\top d_k \]
得到可接受步长 \(\alpha_k^*\)。
步骤5:更新迭代点
\[ x_{k+1} = x_k + \alpha_k^* d_k \]
计算新梯度 \(g_{k+1} = \nabla f(x_{k+1})\)。
步骤6:更新历史信息
计算 \(s_k = x_{k+1} - x_k\),\(y_k = g_{k+1} - g_k\)。
将 \((s_k, y_k)\) 加入队列,若队列长度超过 \(m\),则移除最旧的一对。
步骤7:循环
令 \(k := k+1\),返回步骤1。
3. 数值模拟示例(扩展Rosenbrock函数)
- 维度 \(n=10\),初始点 \(x_0 = (-1.2, 1, -1.2, 1, \dots)\)(交替取值)。
- 参数设置:\(m=5\),\(\rho=0.8\),\(\beta=0.5\),\(\sigma=0.4\),\(\epsilon=10^{-6}\)。
- 实现细节:在步骤3中,若 \(k=0\)(第一次迭代),直接用 \(\alpha_0 = 0.001\)(小步长启动);从 \(k=1\) 开始使用历史信息计算 \(\alpha_k\)。
- 预期行为:
- 初期因函数高度非凸、曲率变化大,步长会自适应调整,可能震荡但线搜索保障下降。
- 随着迭代,历史信息加权平均使步长更稳定,接近最优曲率,收敛速度优于固定步长梯度法。
- 与标准BB法(仅用最近一对 \((s_{k-1}, y_{k-1})\))相比,AMG通过多步加权平滑了步长波动,可能减少线搜索次数,加速收敛。
- 可观察的指标:梯度范数 \(\|g_k\|\) 下降曲线、函数值下降轨迹、步长 \(\alpha_k\) 变化情况。
总结:自适应记忆梯度法通过利用多步历史信息加权拟合步长,平衡了近期与远期曲率信息,在非凸优化中能更稳健地逼近最佳步长,同时保持梯度下降的简单性。结合线搜索可保证全局收敛,适用于中等规模、梯度可计算的问题。