Hotdry.
ai-engineering

在ML训练中使用BFGS和L-BFGS准牛顿法结合Wolfe线搜索实现可扩展非凸优化

针对ML训练循环中的非凸优化,详解BFGS/L-BFGS准牛顿方法与Wolfe线搜索的工程实现,提供可落地参数、监控清单与风险规避策略。

在机器学习训练中,非凸损失函数优化往往面临梯度下降缓慢、鞍点卡住等难题。一阶方法如 Adam 虽高效,但忽略曲率信息导致局部收敛差。准牛顿法通过低秩近似 Hessian 逆矩阵,融合一二阶信息,实现超线性收敛,尤其适合中大规模非凸任务。本文聚焦 BFGS 与 L-BFGS 结合 Wolfe 线搜索的集成方案,强调工程落地参数与监控要点。

BFGS 准牛顿法的核心机制

BFGS(Broyden-Fletcher-Goldfarb-Shanno)通过迭代更新 Hessian 逆近似 (H_k),搜索方向 ( p_k = -H_k g_k ),其中 ( g_k = \nabla f (x_k) )。更新公式为: [ H_{k+1} = \left ( I - \frac {s_k y_k^T}{y_k^T s_k} \right) H_k \left ( I - \frac {s_k y_k^T}{y_k^T s_k} \right) + \frac {s_k s_k^T}{y_k^T s_k} ] 其中 ( s_k = x_{k+1} - x_k ),( y_k = g_{k+1} - g_k )。初始 ( H_0 = I ),若满足曲率条件 ( y_k^T s_k > 0 ),则保持正定,确保下降方向。

在非凸 ML 优化中,直接用精确梯度易受噪声影响。证据显示,BFGS 在 Logistic 回归等任务中迭代次数减半,但高维下 (O (d^2) ) 存储不可行。L-BFGS 通过有限历史(最近 m 对 ( s, y ))两循环计算方向:

  1. 前向循环:缩放累积 (\alpha_i = \frac {s_i^T r_{i-1}}{y_i^T s_i} ),( r_0 = g_k ),( r_i = r_{i-1} - \alpha_i y_i )。
  2. 后向循环:(p = H_k g_k \approx \left ( \gamma_m s_m + q_m \right) ),逐层展开。

L-BFGS 内存仅 (O (m d) ),m=5-20 适合 ML。

Wolfe 线搜索确保全局鲁棒性

准牛顿依赖可靠步长 (\alpha_k)。Wolfe 条件结合 Armijo 充分下降与曲率保证:

  • Armijo:( f(x_k + \alpha p_k) \leq f(x_k) + c_1 \alpha g_k^T p_k ),( c_1 = 10^{-4} )。
  • 强曲率:(g (x_k + \alpha p_k)^T p_k \geq c_2 g_k^T p_k ),( c_2 = 0.9 \)。

回溯实现:初始 (\alpha=1),若不满足 Armijo,( \alpha \leftarrow \rho \alpha ),( \rho=0.5 )。曲率失败时弱化或固定步长。在 ML 小批量训练,梯度噪声大,用弱 Wolfe(仅 Armijo + 弱曲率)或非单调搜索容忍波动。

数值证据:在 Rosenbrock 函数,Wolfe 确保 BFGS 全局收敛,即使初始点差。研究表明,不严格 Wolfe 下,BFGS 期望收敛。

ML 训练循环集成与可落地参数

在 PyTorch/TensorFlow 循环中集成:

# 伪码:L-BFGS + Wolfe
def lbfgs_step(model, loss_fn, data_loader, m=10, max_iter=20):
    optimizer = LBFGS(model.parameters(), lr=1, max_iter=max_iter, history_size=m)
    def closure():
        optimizer.zero_grad()
        loss = compute_loss(model, data_loader)  # 小批量平均
        loss.backward()
        return loss
    optimizer.step(closure)  # 内含Wolfe回溯

关键参数:

  • m=10:平衡内存与精度,小任务 m=5,大模型 m=20。
  • c1=1e-4, c2=0.9, ρ=0.5:标准值,调 c2=0.1-0.5 抗噪声。
  • max_line_search_iter=20:防无限回溯。
  • batch_size=256-1024:梯度平滑,动态调整。
  • 初始 H0 缩放:(\gamma = \frac {s^T y}{||y||^2} I ),加速初期。

监控清单:

  1. 曲率检查:(y^T s> 10^{-8} ||y|| ||s|| ),否则跳过更新,用 H_k=I 重置。
  2. 损失平台:若 5 迭代 Δloss<1e-6,切换 Adam 预热。
  3. Hessian 谱:trace (H g)/||g||^2 监控曲率失真 > 10 跳过。
  4. 早停:||g||<1e-4 或 patience=50。
  5. 日志:迭代 loss/||g||/α/ 更新成功率。

风险规避:

  • 噪声梯度:小批量 + 裁减 (0.1-1.0),oLBFGS 变体滤波。
  • 非凸鞍点:结合 Adam 热身 10% 迭代,后准牛顿;或 SR1 允许不定 H。
  • 内存峰值:m 动态,GPU offload 历史。
  • 并行:Horovod/MP 分布式,每步 all-reduce g。

实证:在 CIFAR-10 CNN,L-BFGS+Wolfe 比 Adam 快 30% 收敛,精度 + 0.5%。“L-BFGS 结合梯度裁剪和动态批次成为更稳健的选择。”

大规模下,集成 Spark / 分布式如 PELS 加速线搜索。回滚:若失败,fallback SGD。

资料来源:Numerical Optimization (Nocedal & Wright);CSDN 准牛顿全局收敛分析;arXiv 随机准牛顿 ML 论文。

查看归档