← 返回模块
Q2.5.2.2beta 可读 · 未来付费校验通过内容版本 2026-05-26

牛顿法与拟牛顿法

2.5.2 · 迭代法与正则化方法 · 数学与统计能力

周一开盘后 15 分钟,沪深300 ETF 期权(300ETF options on SSE)的隐含波动率(implied volatility, IV)整体上抬了 3 个 vol。你在一家私募的做市账户上挂着一组 50ETF 与 300ETF 近月平值 call,定价模型需要把每张合约的市场报价反推成 IV。上一节用梯度下降跑过同样的题:在某些深度虚值(out-of-the-money, OTM)合约上,损失函数等高线被压成细长椭圆,条件数(condition number)逼近 200——梯度法走了 400 多步还在沿山谷折返。你切到牛顿法,​​三步​​就把残差压到 101210^{-12}。这一节解释这种「三步收敛」从哪里来,以及当海森矩阵(Hessian matrix)变大、变病态时,你应该退到哪一种拟牛顿(quasi-Newton)变体。

二阶 Taylor 模型与牛顿方向

把目标函数 ff 在迭代点 xkx_k 处展到二阶:

mk(d)=f(xk)+f(xk)d+12d2f(xk)d.m_k(d) = f(x_k) + \nabla f(x_k)^\top d + \tfrac{1}{2}\, d^\top \nabla^2 f(x_k)\, d.

Hk:=2f(xk)H_k := \nabla^2 f(x_k) 为海森矩阵,它是一个对称矩阵(symmetric matrix)。三步推导:

  1. dmk(d)=0\nabla_d m_k(d) = 0,得 f(xk)+Hkd=0\nabla f(x_k) + H_k\, d = 0
  2. HkH_k 可逆,解出二次模型的唯一极小点 dk=Hk1f(xk)d_k = -H_k^{-1}\, \nabla f(x_k)
  3. 以它作为下一步迭代方向,得格式 xk+1=xk+dkx_{k+1} = x_k + d_k

牛顿方向(Newton direction)的紧凑形式即:

dk=[2f(xk)]1f(xk).d_k = -\bigl[\nabla^2 f(x_k)\bigr]^{-1}\, \nabla f(x_k).

与梯度下降相比,第一个结构性优势是​​仿射不变性​​(affine invariance):若做变量替换 y=Txy = T xTT 可逆),牛顿迭代生成的序列与原坐标系完全一致。梯度法不具备这一性质——所以梯度法对单位与尺度敏感,牛顿法不敏感。

局部二次收敛

在一个非退化极小点 xx^* 附近——即 H(x)H(x^*) 正定且 HH 在邻域内 Lipschitz 连续——牛顿迭代满足

xk+1xCxkx2.\|x_{k+1} - x^*\| \le C\, \|x_k - x^*\|^2.

这就是​​局部二次收敛​​(local quadratic convergence):误差每步「平方一次」。一个直观估计:若 xkx=102\|x_k - x^*\| = 10^{-2}C=1C = 1,下一步误差就是 10410^{-4},再下一步 10810^{-8}。而梯度下降在强凸 L-smooth 情形下也只是线性速率 ((κ1)/(κ+1))2k((\kappa - 1)/(\kappa + 1))^{2k}——这就是开篇 IV 反推故事里「三步收敛」的来源。

代价是另一侧:每步要解一个 n×nn \times n 线性系统 Hkdk=f(xk)H_k\, d_k = -\nabla f(x_k)。Cholesky 分解 O(n3)O(n^3),存储 O(n2)O(n^2)n=100n = 100 还行;n=104n = 10^4 的因子模型 MLE 直接崩盘——这是拟牛顿法存在的根本动机。

远离最优点时的失效

牛顿步在「锅底附近」很漂亮,远离最优点时三种失效模式轮番出现:

  • HkH_k ​不定​​(indefinite,存在负特征值,eigenvalue),Hk1f(xk)-H_k^{-1}\, \nabla f(x_k) 可能根本不是下降方向,反而把你推向鞍点。
  • HkH_k ​奇异或接近奇异​​,步长会爆炸。
  • 即便 HkH_k 半正定(positive semidefinite)但条件数极大,纯牛顿步也可能过冲。

工业上的三种标准修复:

  1. ​阻尼牛顿​​(damped Newton):把 xk+1=xk+dkx_{k+1} = x_k + d_k 改成 xk+1=xk+tkdkx_{k+1} = x_k + t_k\, d_k,用 Armijo 回溯线搜索决定 tkt_k。当 tk=1t_k = 1 满足充分下降条件时退化为纯牛顿;否则缩短步长。
  2. ​Levenberg–Marquardt 正则化​​:把 HkH_k 替换为 Hk+λIH_k + \lambda I,调 λ>0\lambda > 0 让组合矩阵正定。λ0\lambda \to 0 趋近牛顿;λ\lambda 大趋近缩放后的梯度下降。SABR 期权波动率曲面校准的工业默认就是 LM。
  3. ​海森修正​​(Hessian modification):通过修改 Cholesky 把 HkH_k 替换为最近的正定矩阵;用其特征分解(eigendecomposition)翻转负特征值的符号是另一种变体。

病态二次型上的对比

取一个最小可复现例子:

f(x)=12(x12+100x22),x0=(10,1).f(x) = \tfrac{1}{2}\bigl(x_1^2 + 100\, x_2^2\bigr), \quad x_0 = (10, 1).

这是对称正定二次型,条件数 κ=100\kappa = 100。梯度下降配合精确线搜索,沿狭长山谷反复折返;牛顿法一步直击底部:

迭代 kk梯度法 xkx\|x_k - x^*\|牛顿法 xkx\|x_k - x^*\|
010.0510.0510.0510.05
19.909.9000
108.198.19
503.663.66

对二次型而言 ff ​就是​​它的二阶 Taylor 展开,海森矩阵 H=diag(1,100)H = \mathrm{diag}(1, 100) 已精确,一步即到位。把 κ\kappa 调到 11 时两种方法都立刻收敛;把它调到 10410^4,梯度法每减半一次误差要 350 多步,而牛顿仍然 1 步。

Formula Explorer

((kappa - 1) / (kappa + 1))^k

拟牛顿法:BFGS 与 L-BFGS

nn 大到无法存或解 HkH_k,拟牛顿法用一个矩阵 BkB_k 近似 HkH_k(或 Hk1H_k^{-1}),且只用一阶信息更新。核心约束是​​割线条件​​(secant condition):

Bk+1sk=yk,sk=xk+1xk,yk=f(xk+1)f(xk).B_{k+1}\, s_k = y_k, \qquad s_k = x_{k+1} - x_k, \quad y_k = \nabla f(x_{k+1}) - \nabla f(x_k).

直觉:上一步的位移 sks_k 经过 Bk+1B_{k+1} 映回梯度增量 yky_k,这是一阶差商对二阶导的最简近似。BFGS 用​​秩二更新​​保持 BkB_k 对称且正定:

Bk+1=Bk+ykykykskBkskskBkskBksk.B_{k+1} = B_k + \frac{y_k y_k^\top}{y_k^\top s_k} - \frac{B_k s_k s_k^\top B_k}{s_k^\top B_k s_k}.

L-BFGS(limited-memory BFGS)只存最近 mm(sk,yk)(s_k, y_k)(典型 m=520m = 5\text{–}20),用两轮递归直接算出 BkvB_k\, v 而无需显式构造 BkB_k,单步代价 O(mn)O(mn)、存储 O(mn)O(mn)。这就是 scipy.optimize.minimize(method="L-BFGS-B") 在量化工程里被反复调用的原因:因子 MLE、贝叶斯先验 MAP、神经网络因子模型微调——能用一阶梯度的目标都先丢给它。

在量化里落到哪里

  • ​1 维牛顿​​:300ETF 与 50ETF 期权的 IV 反推,每天每张活跃合约都跑一次;ff 是 Black–Scholes 价格残差,Vega 充当海森(1 维下即二阶导)。
  • ​阻尼牛顿 / LM​​:SABR、Heston 等参数曲面校准,n=410n = 4\text{–}10,海森条件数常在 10410^4 之上。
  • ​L-BFGS​​:私募的多因子最大似然估计、宏观因子贝叶斯回归、深度因子模型微调;nn 通常 10410^410610^6,工业默认。

Exercise

f(x)=12xAxbxf(x) = \tfrac{1}{2}\, x^\top A x - b^\top x,其中 A=(4113)A = \begin{pmatrix} 4 & 1 \\ 1 & 3 \end{pmatrix}b=(1,2)b = (1, 2)^\topx0=(0,0)x_0 = (0, 0)^\top。求一次牛顿步后的 x1x_1,并验证 x1x_1 就是 ff 的最小值点。

提示
对二次型 f(x)=12xAxbxf(x) = \tfrac{1}{2}\, x^\top A x - b^\top x,先写出 f(x)=Axb\nabla f(x) = A x - b2f(x)=A\nabla^2 f(x) = A——注意海森矩阵在二次型上是常数,与 xx 无关。
提示
套用 x1=x0A1f(x0)x_1 = x_0 - A^{-1}\, \nabla f(x_0)x0=(0,0)x_0 = (0, 0) 时梯度恰为 b-b,所以 x1=A1bx_1 = A^{-1} bdetA=11\det A = 11,直接解 Ax=bA x = bx1=(1/11,7/11)x_1 = (1/11, 7/11),代回检验 f(x1)=Ax1b=0\nabla f(x_1) = A x_1 - b = 0

下一站:当 nn 与样本量再大一个量级

到这里你已经能在 n106n \le 10^6 的光滑无约束目标上选出一种「二阶或仿二阶」方法:低维校准走牛顿/LM,中高维 MLE 走 L-BFGS。但现代机器学习训练有第二条压力线——​​样本量​ NN 也巨大,每次评估 f\nabla f 都要扫一遍数据集。L-BFGS 在 N=107N = 10^7 的因子面板上每步要花几分钟,根本扛不住。下一节进入随机优化:随机梯度下降(stochastic gradient descent, SGD)、小批量、动量与 Adam——用估计偏差换吞吐,把每步代价从 O(N)O(N) 压到 O(B)O(B)BNB \ll N