基于数值Hessian矩阵拟牛顿优化中的导数值差分公式构造与误差控制
1. 题目背景
在无约束优化问题中,拟牛顿法(如BFGS、DFP方法)通过构造目标函数Hessian矩阵的近似来避免直接计算二阶导数。当目标函数 \(f(x)\) 的解析二阶导数不可得时,常使用数值微分方法,通过一阶导数的差分来近似Hessian矩阵。本题要求:构造用于拟牛顿法更新中计算梯度的数值差分公式(尤其是用于构建Hessian近似),分析其截断误差与舍入误差,并设计自适应步长策略以在优化迭代中平衡误差。
2. 问题描述
设目标函数 \(f: \mathbb{R}^n \to \mathbb{R}\) 连续可微,其梯度 \(g(x) = \nabla f(x)\) 可计算(解析或通过自动微分),但Hessian矩阵 \(H(x)\) 无法直接获得。在拟牛顿法每次迭代中,需通过梯度信息构造Hessian近似 \(B_k\)。一种常见做法是基于梯度差分的拟牛顿条件:
\[B_{k+1} s_k = y_k, \]
其中 \(s_k = x_{k+1} - x_k\),\(y_k = g(x_{k+1}) - g(x_k)\)。但若梯度 \(g(x)\) 本身也需数值计算(例如通过函数值差分),则 \(y_k\) 的精度直接影响 \(B_k\) 的近似质量。
本题聚焦于:如何设计高精度的数值梯度差分公式,并自适应控制差分步长 \(h\),使得在优化过程中既能抑制截断误差(随 \(h\) 减小而减小),又能避免舍入误差(随 \(h\) 减小而增大)的放大,从而稳定拟牛顿法的收敛性。
3. 梯度数值差分公式的构造
- 中心差分公式(二阶精度):对梯度分量 \(g_i(x) = \frac{\partial f}{\partial x_i}\),使用中心差分:
\[ \hat{g}_i(x) = \frac{f(x + h e_i) - f(x - h e_i)}{2h}, \]
其中 \(e_i\) 是第 \(i\) 个单位向量。截断误差为 \(O(h^2)\),优于前向差分的一阶精度 \(O(h)\)。
- 用于Hessian近似的梯度差分:在拟牛顿法中,梯度差分 \(y_k = g(x_{k+1}) - g(x_k)\) 若用数值梯度计算,则:
\[ \hat{y}_k = \hat{g}(x_{k+1}) - \hat{g}(x_k). \]
若每个梯度使用中心差分计算,则 \(\hat{y}_k\) 的误差来自两次差分操作的误差叠加。
4. 误差分析
- 截断误差:对中心差分,基于泰勒展开可得:
\[ \hat{g}_i(x) = g_i(x) + \frac{h^2}{6} \frac{\partial^3 f}{\partial x_i^3}(\xi) \quad (\xi \in [x-h, x+h]). \]
因此,\(\hat{y}_k\) 的截断误差量级为 \(O(h^2)\)。若Hessian近似要求误差在 \(O(\epsilon)\)(机器精度相关),则需 \(h^2 \sim \epsilon\)。
- 舍入误差:由于函数值 \(f(x)\) 的计算有舍入误差 \(\delta_f \approx \epsilon_{\text{machine}} |f|\),中心差分的舍入误差放大为:
\[ \text{舍入误差} \approx \frac{\delta_f}{h} \sim \frac{\epsilon_{\text{machine}} |f|}{h}. \]
因此总误差 \(E(h) \approx C_1 h^2 + C_2 \epsilon_{\text{machine}} / h\),其中 \(C_1, C_2\) 为常数。
5. 最优步长选择
- 最小化总误差 \(E(h)\):令 \(\frac{dE}{dh} = 2C_1 h - C_2 \epsilon_{\text{machine}} / h^2 = 0\),解得最优步长:
\[ h_{\text{opt}} \propto \epsilon_{\text{machine}}^{1/3}. \]
对于双精度(\(\epsilon_{\text{machine}} \approx 10^{-16}\)),\(h_{\text{opt}} \approx 10^{-5} \sim 10^{-6}\)(乘以函数尺度因子)。但此步长固定,未考虑优化迭代中函数尺度变化。
- 自适应步长策略:
- 基于函数尺度的调整:在每次计算梯度时,估计函数尺度 \(|f(x)|\) 和梯度范数 \(\|g(x)\|\)。设相对误差容限 \(\tau\)(如 \(10^{-8}\)),则步长可设为:
\[ h = \sqrt{\tau} \cdot \max(|x_i|, 1) \quad \text{或} \quad h = \epsilon_{\text{machine}}^{1/3} \cdot \max(|f(x)|, 1)^{1/3}. \]
- 迭代中动态调整:在拟牛顿法迭代中,当 \(\|s_k\|\) 较大时(远离最优点),可适当增大 \(h\) 以降低计算成本;当接近最优点时,减小 \(h\) 以提高精度。可设计启发式规则:
\[ h_{\text{new}} = h_{\text{old}} \cdot \min\left(2, \max\left(0.5, \frac{\|s_k\|}{\|s_{k-1}\|}\right)\right). \]
- 误差反馈控制:通过比较不同步长(如 \(h\) 和 \(h/2\))计算的梯度差分,估计当前误差。若误差超过阈值,则缩小步长;若误差远小于阈值,则放大步长以节省计算量。
6. 在拟牛顿法中的集成
- 在BFGS或DFP更新中,使用数值梯度差分 \(\hat{y}_k\) 时,需确保 \(\hat{y}_k\) 满足拟牛顿条件足够精确,否则可能破坏 \(B_k\) 的正定性。可加入条件判断:若 \(s_k^T \hat{y}_k\) 过小(可能导致数值不稳定),则忽略本次更新或重置 \(B_k\) 为单位矩阵。
- 实际实现中,常结合自动微分(如有)计算精确梯度,仅对Hessian近似使用数值差分。若必须全数值梯度,建议采用中心差分,并定期用更小步长校验梯度一致性。
7. 示例计算
考虑函数 \(f(x) = x_1^4 + \sin(x_2)\) 在 \(x = (1, 2)^T\) 处,使用中心差分计算梯度。取 \(h = 10^{-5}\),则:
- 精确梯度:\(g = (4x_1^3, \cos(x_2)) = (4, \cos(2)) \approx (4, -0.4161468)\)。
- 数值梯度:
\[ \hat{g}_1 = \frac{f(1+h,2)-f(1-h,2)}{2h} \approx \frac{(1+h)^4 - (1-h)^4}{2h} \approx 4.0000000004, \]
\[ \hat{g}_2 = \frac{\sin(2+h) - \sin(2-h)}{2h} \approx \cos(2) \approx -0.4161468365. \]
误差在 \(10^{-9}\) 量级,满足多数优化需求。
8. 总结
本题展示了在拟牛顿优化中构造数值梯度差分的方法,通过中心差分获得二阶精度,分析了截断误差与舍入误差的平衡,并设计了自适应步长策略以适应优化迭代的动态尺度。此方法可提升Hessian近似的稳定性,尤其适用于梯度无法解析求导的黑盒优化问题。