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 拟合曲率,逐步构造 Bk≈∇2f(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+1−xk,yk=∇f(xk+1)−∇f(xk).

若 f 近似二次,则有

yk≈∇2f(xk)sk.

因此希望新的 Hessian 近似满足

Bk+1sk=yk.

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

Hk+1yk=sk.

这两条就是 secant equation。

曲率条件 ​

为了让 Bk+1≻0 或 Hk+1≻0,必须有

skTyk>0.

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

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

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

f(xk+tkpk)≤f(xk)+c1tk∇f(xk)Tpk,∇f(xk+tkpk)Tpk≥c2∇f(xk)Tpk,0<c1<c2<1.

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

由第二条可得

ykTsk=tk(∇f(xk+1)−∇f(xk))Tpk≥tk(c2−1)∇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=Hk−HkykykTHkykTHkyk+skskTykTsk.

4.2 BFGS ​

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

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

对应的 Hessian 近似更新:

Bk+1=Bk−BkskskTBkskTBksk+ykykTykTsk.

要记住的性质:

  • 若 Hk≻0 且 skTyk>0,则 Hk+1≻0;
  • 方向 dk=−Hk∇f(xk) 是下降方向;
  • 配 Wolfe 条件有全局收敛结果;
  • 在适当条件下 BFGS 可超线性收敛。

5. BFGS 实现建议 ​

讲义给出的实际设置:

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

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

6. 收敛性结论 ​

6.1 Zoutendijk 定理 ​

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

∑k=0∞cos2⁡θk∥∇f(xk)∥2<∞,

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

直观解释:

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

6.2 BFGS 全局收敛 ​

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

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

ψ(B)=tr(B)−log⁡detB,

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

6.3 超线性收敛 ​

若 ∇2f 在 x∗ 附近 Lipschitz,且 BFGS 迭代满足相应可和性条件,则

∥xk+1−x∗∥=o(∥xk−x∗∥).

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

7. L-BFGS ​

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

(si,yi),i=k−m,…,k−1.

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

O(mn),

其中 m 通常远小于 n。

Two-loop recursion ​

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

记忆版流程:

  1. q←∇f(xk)。
  2. 从新到旧扫一遍,计算 αi=ρisiTq,并令 q←q−αiyi。
  3. 乘初始矩阵 r←Hk0q。
  4. 从旧到新扫一遍,计算 β=ρiyiTr,并令 r←r+si(αi−β)。
  5. 方向 dk=−r。

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

8. Barzilai-Borwein (BB) 梯度法 ​

BB 方法仍是梯度法:

xk+1=xk−tk∇f(xk),

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

两种常见 BB 步长:

tkBB1=sk−1Tsk−1sk−1Tyk−1,tkBB2=sk−1Tyk−1yk−1Tyk−1.

直观:用 tI 或 t−1I 去近似 Hessian / inverse Hessian 的 secant relation。

注意:

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

9. Gauss-Newton 与 Levenberg-Marquardt ​

考虑非线性最小二乘:

minx12∥g(x)∥2.

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

xk+1=arg⁡minx12∥g(xk)+Jk(x−xk)∥2.

对应方向:

dk=−(JkTJk)−1JkTg(xk),

前提是 Jk 满列秩。

与 Newton 的关系:

∇2(12∥g(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=Q−1 给出 Newton-like 一步收敛;为拟牛顿思想铺垫
hw9.5logistic regression 编程可以把 damped Newton / Newton-CG 与 BFGS/L-BFGS 思路对比:精确二阶 vs 近似二阶
hw10.1BFGS 的 B-更新 B+=B−BssTBsTBs+yyTsTy证明对称、secant equation B+s=y、半正定/正定;说明 sTy>0 不能去掉
hw10.2pk=−Hk∇f(xk) 与 Wolfe curvature condition证明下降方向;由 Wolfe 推 skTyk>0;构造任意步长导致 skTyk<0 的反例;解释 BFGS 更新失败
hw10.3手算 L-BFGS two-loop recursion按“先从新到旧,再从旧到新”的两轮递推算 Hkgk;比较 m=20,n=106 时 2mn 存储 vs full BFGS 的 n2
hw10.4Barzilai-Borwein 两个步长从 mint|s−ty|2 和 mint|1ts−y|2 推 BB1/BB2;用 Rayleigh quotient 证 1/M≤tk≤1/m
hw10.5logistic regression 上实现 BFGS + strong Wolfe写 ∇F(w);用 H-形式 BFGS;若 ykTsk≤10−12 跳过更新;比较三组 LIBSVM 数据收敛

11. 解题招式 ​

招式 1:先写 sk,yk ​

任何拟牛顿题先写:

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

再写 secant equation:

Bk+1sk=yk或Hk+1yk=sk.

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

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

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

招式 3:比较复杂度 ​

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

12. 自检清单 ​

  • [ ] sk,yk 的定义能马上写出来吗?
  • [ ] Secant equation 是 Bk+1sk=yk 还是 Bk+1yk=sk?能区分 B 和 H 吗?
  • [ ] 为什么需要 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. 把 Bk 和 Hk 搞反:Bk≈∇2f,Hk≈(∇2f)−1。
  2. 只用 Armijo 不够:Armijo 保证下降,但不保证 skTyk>0,拟牛顿更需要 Wolfe。
  3. BFGS 不是“无条件正定”:必须有 Hk≻0 和 skTyk>0。
  4. L-BFGS 不是低秩 Hessian:它是不显式形成 Hk,只保存有限历史对。
  5. BB 不是线搜索得到的最优步长:它是 secant equation 的标量近似,可能非单调。
  6. Gauss-Newton 不是通用 Newton 替代品:它专门利用最小二乘结构,残差小的时候尤其有效。

14. 接下来怎么学 ​

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