Skip to content

对应 note_8_quasinewton.pdf。这一章回答一个实际问题:Newton 法快,但 Hessian 太贵;能不能只用梯度差来“学”一个 Hessian 或逆 Hessian?答案就是 quasi-Newton,核心是 secant equation、Wolfe line search、DFP/BFGS/L-BFGS。

0. 一句话理解这一章

拟牛顿法 = 用最近两次迭代的位移 sk 和梯度变化 yk 拟合曲率,逐步构造 Bk2f(xk)Hk[2f(xk)]1,从而用接近 Newton 的方向但避免显式 Hessian。

1. 知识地图

                    Newton 法瓶颈
              Hessian 计算/存储/分解太贵


                    Quasi-Newton
        d_k = -B_k^{-1}∇f(x_k) 或 d_k=-H_k∇f(x_k)


                    Secant equation
                    s_k=x_{k+1}-x_k
                  y_k=∇f(x_{k+1})-∇f(x_k)
             B_{k+1}s_k=y_k 或 H_{k+1}y_k=s_k


                  Curvature condition
                      s_k^T y_k>0
              Wolfe line search 保证它成立


                       更新公式
                  DFP / BFGS / L-BFGS


                        相关方法
      BB 步长 / Gauss-Newton / Levenberg-Marquardt

2. Secant equation:拟牛顿的核心

定义

sk=xk+1xk,yk=f(xk+1)f(xk).

f 近似二次,则有

yk2f(xk)sk.

因此希望新的 Hessian 近似满足

Bk+1sk=yk.

如果直接近似逆 Hessian,则写成

Hk+1yk=sk.

这两条就是 secant equation

曲率条件

为了让 Bk+10Hk+10,必须有

skTyk>0.

对强凸函数,这个量天然倾向于为正;对一般目标函数,要靠 Wolfe line search 保证。

3. 为什么用 Wolfe 而不是只用 Armijo

拟牛顿方向 pk 一般配 Wolfe 条件:

f(xk+tkpk)f(xk)+c1tkf(xk)Tpk,f(xk+tkpk)Tpkc2f(xk)Tpk,0<c1<c2<1.

第一条是 Armijo sufficient decrease;第二条是 curvature condition。

由第二条可得

ykTsk=tk(f(xk+1)f(xk))Tpktk(c21)f(xk)Tpk>0,

因为 pk 是下降方向,f(xk)Tpk<0。这就是 Wolfe 在 quasi-Newton 中不可替代的原因。

4. DFP 与 BFGS 更新

4.1 DFP

DFP 从 Hessian 近似 Bk 的“最小改动 + secant equation”出发。讲义给出的 B-形式是

Bk+1=(IρkykskT)Bk(IρkskykT)+ρkykykT,ρk=1ykTsk.

其逆 Hessian 形式常写为

Hk+1=HkHkykykTHkykTHkyk+skskTykTsk.

4.2 BFGS

BFGS 更常用。逆 Hessian 近似的更新为

Hk+1=(IρkskykT)Hk(IρkykskT)+ρkskskT,ρk=1ykTsk.

对应的 Hessian 近似更新:

Bk+1=BkBkskskTBkskTBksk+ykykTykTsk.

要记住的性质

  • Hk0skTyk>0,则 Hk+10
  • 方向 dk=Hkf(xk) 是下降方向;
  • 配 Wolfe 条件有全局收敛结果;
  • 在适当条件下 BFGS 可超线性收敛。

5. BFGS 实现建议

讲义给出的实际设置:

常用选择
初始步长先试 tk=1
Wolfe 参数c1=104,c2=0.9
初始逆 Hessian 近似可用 γI,例如 γ=skTykykTyk
终止|f(xk)|ϵ

注意:BFGS 每步要存一个 dense HkBk,存储和乘法都可能是 O(n2)。大规模问题用 L-BFGS。

6. 收敛性结论

6.1 Zoutendijk 定理

若方向满足 Wolfe 条件、f 下有界、f 在 level set 上 Lipschitz,则

k=0cos2θkf(xk)2<,

其中 θk 是搜索方向 pk 与负梯度 f(xk) 的夹角。

直观解释:

  • 若方向没有越来越接近“正交于负梯度”,则梯度必须趋于 0;
  • BFGS 的证明核心之一就是排除方向长期变坏。

6.2 BFGS 全局收敛

在强凸、Hessian 有上下界等标准假设下,BFGS 生成的序列收敛到唯一最优解。

讲义的证明用到了矩阵函数

ψ(B)=tr(B)logdetB,

通过控制 ψ(Bk) 来说明 Bk 不会退化到让方向完全失效。

6.3 超线性收敛

2fx 附近 Lipschitz,且 BFGS 迭代满足相应可和性条件,则

xk+1x=o(xkx).

这就是 BFGS 在实践中很快的理论来源。

7. L-BFGS

BFGS 存 dense Hk,大规模时不现实。L-BFGS 只保存最近 m

(si,yi),i=km,,k1.

这样每步计算 Hkf(xk) 的成本和存储都是

O(mn),

其中 m 通常远小于 n

Two-loop recursion

核心思想:不用显式形成 Hk,只通过最近 m(si,yi) 递推计算 Hkq

记忆版流程:

  1. qf(xk)
  2. 从新到旧扫一遍,计算 αi=ρisiTq,并令 qqαiyi
  3. 乘初始矩阵 rHk0q
  4. 从旧到新扫一遍,计算 β=ρiyiTr,并令 rr+si(αiβ)
  5. 方向 dk=r

考试/作业重点通常不是手写完整代码,而是知道为什么 L-BFGS 不存 Hk、成本是 O(mn)、需要保存 si,yi

8. Barzilai-Borwein (BB) 梯度法

BB 方法仍是梯度法:

xk+1=xktkf(xk),

但步长 tk 用 secant equation 的标量近似得到。

两种常见 BB 步长:

tkBB1=sk1Tsk1sk1Tyk1,tkBB2=sk1Tyk1yk1Tyk1.

直观:用 tIt1I 去近似 Hessian / inverse Hessian 的 secant relation。

注意:

  • BB 常常比固定步长 GD 快很多;
  • 它通常不是单调下降;
  • 实践中常把步长截断到 [tmin,tmax],再配 nonmonotone line search。

9. Gauss-Newton 与 Levenberg-Marquardt

考虑非线性最小二乘:

minx12g(x)2.

Gauss-Newton 每步解线性化后的最小二乘:

xk+1=argminx12g(xk)+Jk(xxk)2.

对应方向:

dk=(JkTJk)1JkTg(xk),

前提是 Jk 满列秩。

与 Newton 的关系:

2(12g(x)2)=J(x)TJ(x)+igi(x)2gi(x).

Gauss-Newton 丢掉第二项。若残差 g(x) 很小,这个近似很好。

JkTJk 奇异或病态,使用 Levenberg-Marquardt:

dk=(JkTJk+μkI)1JkTg(xk).

10. 作业题型对照

作业题面考点
A8.2预条件梯度法P=Q1 给出 Newton-like 一步收敛;为拟牛顿思想铺垫
hw9.5logistic regression 编程可以把 damped Newton / Newton-CG 与 BFGS/L-BFGS 思路对比:精确二阶 vs 近似二阶
hw10.1BFGS 的 B-更新 B+=BBssTBsTBs+yyTsTy证明对称、secant equation B+s=y、半正定/正定;说明 sTy>0 不能去掉
hw10.2pk=Hkf(xk) 与 Wolfe curvature condition证明下降方向;由 Wolfe 推 skTyk>0;构造任意步长导致 skTyk<0 的反例;解释 BFGS 更新失败
hw10.3手算 L-BFGS two-loop recursion按“先从新到旧,再从旧到新”的两轮递推算 Hkgk;比较 m=20,n=1062mn 存储 vs full BFGS 的 n2
hw10.4Barzilai-Borwein 两个步长mint|sty|2mint|1tsy|2 推 BB1/BB2;用 Rayleigh quotient 证 1/Mtk1/m
hw10.5logistic regression 上实现 BFGS + strong WolfeF(w);用 H-形式 BFGS;若 ykTsk1012 跳过更新;比较三组 LIBSVM 数据收敛

11. 解题招式

招式 1:先写 sk,yk

任何拟牛顿题先写:

sk=xk+1xk,yk=f(xk+1)f(xk).

再写 secant equation:

Bk+1sk=ykHk+1yk=sk.

招式 2:正定性只看曲率条件

若题目问 BFGS 更新是否保持正定,回答结构:

  1. 假设 Hk0
  2. Wolfe 保证 skTyk>0
  3. BFGS 更新由两个 PSD 项组成并满足 secant equation;
  4. 因此 Hk+10

招式 3:比较复杂度

方法每步主要代价存储典型使用
NewtonHessian + 解线性系统,dense 可到 O(n3)O(n2)中小规模、高精度
BFGS矩阵向量乘/更新 O(n2)O(n2)中等规模
L-BFGSO(mn)O(mn)大规模 smooth 问题
BBO(n) 级别额外成本O(n)轻量加速 GD
Gauss-NewtonJTJd=JTg取决于 J非线性最小二乘

12. 自检清单

  • [ ] sk,yk 的定义能马上写出来吗?
  • [ ] Secant equation 是 Bk+1sk=yk 还是 Bk+1yk=sk?能区分 BH 吗?
  • [ ] 为什么需要 skTyk>0
  • [ ] Wolfe 条件第二条如何推出 skTyk>0
  • [ ] BFGS 的 H-更新公式能认出来吗?
  • [ ] L-BFGS 为什么只需要 O(mn)?若存 m(si,yi),总共是多少个实数?
  • [ ] BB 两个步长公式能写出一个吗?
  • [ ] BB 步长在强凸二次上为什么落在 [1/M,1/m]
  • [ ] Gauss-Newton 与 Newton 的 Hessian 差在哪一项?

13. 常见陷阱

  1. BkHk 搞反Bk2fHk(2f)1
  2. 只用 Armijo 不够:Armijo 保证下降,但不保证 skTyk>0,拟牛顿更需要 Wolfe。
  3. BFGS 不是“无条件正定”:必须有 Hk0skTyk>0
  4. L-BFGS 不是低秩 Hessian:它是不显式形成 Hk,只保存有限历史对。
  5. BB 不是线搜索得到的最优步长:它是 secant equation 的标量近似,可能非单调。
  6. Gauss-Newton 不是通用 Newton 替代品:它专门利用最小二乘结构,残差小的时候尤其有效。

14. 接下来怎么学

本章学完后,你应该能从“精确二阶”过渡到“近似二阶”。下一章 9_次梯度与次梯度法 会切换到不可微凸优化:没有梯度、没有 Hessian 时,如何仍然写最优性条件并设计算法。