随机化Hessian近似拟牛顿法在无约束优化问题中的应用
1. 题目描述
我们考虑一个无约束优化问题:
\[\min_{x \in \mathbb{R}^n} f(x), \]
其中 \(f: \mathbb{R}^n \to \mathbb{R}\) 是一个光滑且二阶连续可微的目标函数。在许多实际问题中(例如机器学习、信号处理、科学计算),目标函数可能非常复杂,其Hessian矩阵(二阶导数矩阵)\(\nabla^2 f(x)\) 计算成本极高,或者根本无法显式计算。此时,经典的牛顿法(需要精确Hessian)不可行,而拟牛顿法(如BFGS、DFP)通过构造Hessian的近似矩阵来逼近牛顿方向,成为主流选择。
然而,对于高维问题(\(n\) 很大),存储和更新完整的 \(n \times n\) Hessian近似矩阵的代价仍然很高。随机化Hessian近似拟牛顿法 的核心思想是:利用随机采样技术,仅通过部分梯度信息或函数值信息,构造一个低秩或结构化的Hessian近似,从而大幅降低计算和存储成本,同时保持较快的收敛速度。
该算法结合了拟牛顿法的超线性收敛特性和随机算法的可扩展性,适用于大规模无约束优化问题。
2. 算法核心思想
在牛顿法中,迭代更新为:
\[x_{k+1} = x_k - [\nabla^2 f(x_k)]^{-1} \nabla f(x_k). \]
拟牛顿法则用一个近似矩阵 \(B_k \approx \nabla^2 f(x_k)\) 代替精确Hessian,并通过拟牛顿条件(割线方程)更新 \(B_k\):
\[B_{k+1} s_k = y_k, \]
其中 \(s_k = x_{k+1} - x_k\), \(y_k = \nabla f(x_{k+1}) - \nabla f(x_k)\)。
随机化Hessian近似 的关键是:
- 不显式计算完整Hessian,而是利用随机梯度估计或随机子采样来构造近似。
- 常用的方法包括:
- 随机拟牛顿法(Stochastic Quasi-Newton):在每次迭代中,基于一个随机采样的子数据集估计梯度和Hessian-向量乘积。
- 低秩Hessian近似:利用随机投影或随机采样技术,构建一个低秩矩阵近似Hessian。
- 随机有限差分法:通过随机方向上的差分来近似Hessian-向量乘积。
本题目重点介绍第一种方法(随机拟牛顿法),它在大规模机器学习中应用广泛。
3. 算法步骤详解
我们以随机L-BFGS(Limited-memory BFGS with stochastic gradients)为例,介绍随机化Hessian近似拟牛顿法的实现过程。
步骤1:问题设置与假设
假设目标函数具有有限和形式:
\[f(x) = \frac{1}{N} \sum_{i=1}^N f_i(x), \]
其中每个 \(f_i\) 对应一个数据样本的损失函数。当 \(N\) 很大时,精确计算梯度 \(\nabla f(x) = \frac{1}{N} \sum_{i=1}^N \nabla f_i(x)\) 代价高昂。因此,我们使用随机梯度:
\[g_k = \frac{1}{|S_k|} \sum_{i \in S_k} \nabla f_i(x_k), \]
其中 \(S_k\) 是随机采样的一个minibatch(批量大小 \(b \ll N\))。
步骤2:拟牛顿更新公式回顾
标准BFGS的Hessian近似更新公式为:
\[B_{k+1} = B_k - \frac{B_k s_k s_k^T B_k}{s_k^T B_k s_k} + \frac{y_k y_k^T}{y_k^T s_k}, \]
其中 \(s_k = x_{k+1} - x_k\), \(y_k = \nabla f(x_{k+1}) - \nabla f(x_k)\)。
在随机设定中,我们用随机梯度差 \(\tilde{y}_k = g_{k+1} - g_k\) 代替 \(y_k\),但直接使用会导致近似误差累积。因此,需要引入梯度差异的修正策略。
步骤3:随机L-BFGS算法流程
- 初始化:选择初始点 \(x_0\),初始Hessian近似 \(B_0 = \gamma I\)(通常 \(\gamma > 0\)),内存大小 \(m\)(存储最近的 \(m\) 对 \((s_j, y_j)\))。
- 对迭代 \(k = 0, 1, 2, \dots\) 执行:
- 采样:随机选取一个minibatch \(S_k\)。
- 计算随机梯度:\(g_k = \frac{1}{b} \sum_{i \in S_k} \nabla f_i(x_k)\)。
- 计算搜索方向:\(p_k = -H_k g_k\),其中 \(H_k\) 是通过L-BFGS递归算法从存储的 \(m\) 对 \((s_j, y_j)\) 中构造的Hessian逆近似。
- 线搜索:沿方向 \(p_k\) 执行回溯线搜索,确定步长 \(\alpha_k\),满足如Armijo条件。
- 更新迭代点:\(x_{k+1} = x_k + \alpha_k p_k\)。
- 采样新minibatch \(S_{k+1}\),计算新随机梯度 \(g_{k+1}\)。
- 计算差异对:
\[ s_k = x_{k+1} - x_k, \quad \tilde{y}_k = g_{k+1} - g_k. \]
- 修正梯度差异(可选):为避免噪声影响,可对 \(\tilde{y}_k\) 进行正则化或采用重叠采样。
- 更新内存:将 \((s_k, \tilde{y}_k)\) 加入内存,若内存已满,则丢弃最旧的一对。
步骤4:Hessian逆近似的递归构造(L-BFGS双循环递归)
L-BFGS并不显式存储矩阵 \(B_k\) 或 \(H_k\),而是通过最近 \(m\) 对 \((s_j, y_j)\) 递归计算矩阵-向量乘积 \(H_k g_k\)。具体过程(双循环递归)如下:
- 设 \(q = g_k\)。
- 从最新到最旧遍历内存中的对 \((s_j, y_j)\):
\[ \rho_j = \frac{1}{y_j^T s_j}, \quad \alpha_j = \rho_j s_j^T q, \quad q = q - \alpha_j y_j. \]
- 令 \(r = H_k^0 q\),其中初始Hessian逆近似通常取 \(H_k^0 = \frac{s_{k-1}^T y_{k-1}}{y_{k-1}^T y_{k-1}} I\)(标量缩放的单位矩阵)。
- 从最旧到最新遍历内存中的对 \((s_j, y_j)\):
\[ \beta = \rho_j y_j^T r, \quad r = r + s_j (\alpha_j - \beta). \]
- 输出 \(r\) 作为 \(H_k g_k\)。
步骤5:收敛性与采样策略
- 由于随机梯度的噪声,算法通常只能收敛到目标函数的稳定点(对于非凸问题)或全局最优解附近(对于凸问题)。
- 为了改善收敛,常见的策略包括:
- 增加批量大小 \(b\) 随着迭代逐渐增大。
- 采用梯度聚合方法(如SVRG、SAGA)来减少随机梯度的方差。
- 定期使用全梯度(计算所有样本的梯度)来校正Hessian近似。
4. 算法优势与挑战
-
优势:
- 低存储成本:L-BFGS只需存储 \(O(mn)\) 的数据,\(m\) 通常很小(如10-20)。
- 超线性收敛潜力:在强凸且光滑问题中,随机L-BFGS可达到近似超线性收敛速度。
- 适用于大规模问题:随机采样使每次迭代成本与数据规模 \(N\) 无关。
-
挑战:
- 随机噪声:梯度差异 \(\tilde{y}_k\) 中的噪声可能导致Hessian近似不准确,甚至破坏正定性。
- 参数调节:需要仔细选择批量大小、内存大小 \(m\)、步长策略等。
- 非凸问题:在非凸优化中,算法的收敛保证较弱,可能陷入局部极小。
5. 应用实例
考虑逻辑回归问题:
\[\min_{w \in \mathbb{R}^d} \frac{1}{N} \sum_{i=1}^N \log(1 + \exp(-y_i w^T x_i)) + \frac{\lambda}{2} \|w\|^2, \]
其中 \((x_i, y_i)\) 是训练样本。随机L-BFGS在此问题上的步骤为:
- 每次迭代随机采样一个minibatch的样本。
- 计算该batch的梯度 \(g_k\) 和梯度差异 \(\tilde{y}_k\)。
- 利用L-BFGS递归构造搜索方向 \(p_k\)。
- 更新权重 \(w\)。
实验表明,随机L-BFGS通常比随机梯度下降(SGD)收敛更快,尤其当问题条件数较大时。
6. 总结
随机化Hessian近似拟牛顿法通过结合拟牛顿法的快速收敛和随机采样的高效性,为大规模无约束优化提供了实用工具。其核心是在随机梯度框架下,利用有限的记忆更新来近似Hessian信息,从而在计算成本、存储成本和收敛速度之间取得平衡。