周一开盘后 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 多步还在沿山谷折返。你切到牛顿法,三步就把残差压到 10−12。这一节解释这种「三步收敛」从哪里来,以及当海森矩阵(Hessian matrix)变大、变病态时,你应该退到哪一种拟牛顿(quasi-Newton)变体。
二阶 Taylor 模型与牛顿方向
把目标函数 f 在迭代点 xk 处展到二阶:
mk(d)=f(xk)+∇f(xk)⊤d+21d⊤∇2f(xk)d.
记 Hk:=∇2f(xk) 为海森矩阵,它是一个对称矩阵(symmetric matrix)。三步推导:
- 令 ∇dmk(d)=0,得 ∇f(xk)+Hkd=0。
- 当 Hk 可逆,解出二次模型的唯一极小点 dk=−Hk−1∇f(xk)。
- 以它作为下一步迭代方向,得格式 xk+1=xk+dk。
牛顿方向(Newton direction)的紧凑形式即:
dk=−[∇2f(xk)]−1∇f(xk).
与梯度下降相比,第一个结构性优势是仿射不变性(affine invariance):若做变量替换 y=Tx(T 可逆),牛顿迭代生成的序列与原坐标系完全一致。梯度法不具备这一性质——所以梯度法对单位与尺度敏感,牛顿法不敏感。
局部二次收敛
在一个非退化极小点 x∗ 附近——即 H(x∗) 正定且 H 在邻域内 Lipschitz 连续——牛顿迭代满足
∥xk+1−x∗∥≤C∥xk−x∗∥2.
这就是局部二次收敛(local quadratic convergence):误差每步「平方一次」。一个直观估计:若 ∥xk−x∗∥=10−2 且 C=1,下一步误差就是 10−4,再下一步 10−8。而梯度下降在强凸 L-smooth 情形下也只是线性速率 ((κ−1)/(κ+1))2k——这就是开篇 IV 反推故事里「三步收敛」的来源。
代价是另一侧:每步要解一个 n×n 线性系统 Hkdk=−∇f(xk)。Cholesky 分解 O(n3),存储 O(n2)。n=100 还行;n=104 的因子模型 MLE 直接崩盘——这是拟牛顿法存在的根本动机。
远离最优点时的失效
牛顿步在「锅底附近」很漂亮,远离最优点时三种失效模式轮番出现:
- 若 Hk 不定(indefinite,存在负特征值,eigenvalue),−Hk−1∇f(xk) 可能根本不是下降方向,反而把你推向鞍点。
- 若 Hk 奇异或接近奇异,步长会爆炸。
- 即便 Hk 半正定(positive semidefinite)但条件数极大,纯牛顿步也可能过冲。
工业上的三种标准修复:
- 阻尼牛顿(damped Newton):把 xk+1=xk+dk 改成 xk+1=xk+tkdk,用 Armijo 回溯线搜索决定 tk。当 tk=1 满足充分下降条件时退化为纯牛顿;否则缩短步长。
- Levenberg–Marquardt 正则化:把 Hk 替换为 Hk+λI,调 λ>0 让组合矩阵正定。λ→0 趋近牛顿;λ 大趋近缩放后的梯度下降。SABR 期权波动率曲面校准的工业默认就是 LM。
- 海森修正(Hessian modification):通过修改 Cholesky 把 Hk 替换为最近的正定矩阵;用其特征分解(eigendecomposition)翻转负特征值的符号是另一种变体。
病态二次型上的对比
取一个最小可复现例子:
f(x)=21(x12+100x22),x0=(10,1).
这是对称正定二次型,条件数 κ=100。梯度下降配合精确线搜索,沿狭长山谷反复折返;牛顿法一步直击底部:
| 迭代 k | 梯度法 ∥xk−x∗∥ | 牛顿法 ∥xk−x∗∥ |
|---|
| 0 | 10.05 | 10.05 |
| 1 | 9.90 | 0 |
| 10 | 8.19 | — |
| 50 | 3.66 | — |
对二次型而言 f 就是它的二阶 Taylor 展开,海森矩阵 H=diag(1,100) 已精确,一步即到位。把 κ 调到 1 时两种方法都立刻收敛;把它调到 104,梯度法每减半一次误差要 350 多步,而牛顿仍然 1 步。
Formula Explorer
((kappa - 1) / (kappa + 1))^k
拟牛顿法:BFGS 与 L-BFGS
当 n 大到无法存或解 Hk,拟牛顿法用一个矩阵 Bk 近似 Hk(或 Hk−1),且只用一阶信息更新。核心约束是割线条件(secant condition):
Bk+1sk=yk,sk=xk+1−xk,yk=∇f(xk+1)−∇f(xk).
直觉:上一步的位移 sk 经过 Bk+1 映回梯度增量 yk,这是一阶差商对二阶导的最简近似。BFGS 用秩二更新保持 Bk 对称且正定:
Bk+1=Bk+yk⊤skykyk⊤−sk⊤BkskBksksk⊤Bk.
L-BFGS(limited-memory BFGS)只存最近 m 对 (sk,yk)(典型 m=5–20),用两轮递归直接算出 Bkv 而无需显式构造 Bk,单步代价 O(mn)、存储 O(mn)。这就是 scipy.optimize.minimize(method="L-BFGS-B") 在量化工程里被反复调用的原因:因子 MLE、贝叶斯先验 MAP、神经网络因子模型微调——能用一阶梯度的目标都先丢给它。
在量化里落到哪里
- 1 维牛顿:300ETF 与 50ETF 期权的 IV 反推,每天每张活跃合约都跑一次;f 是 Black–Scholes 价格残差,Vega 充当海森(1 维下即二阶导)。
- 阻尼牛顿 / LM:SABR、Heston 等参数曲面校准,n=4–10,海森条件数常在 104 之上。
- L-BFGS:私募的多因子最大似然估计、宏观因子贝叶斯回归、深度因子模型微调;n 通常 104 到 106,工业默认。
Exercise
取 f(x)=21x⊤Ax−b⊤x,其中 A=(4113)、b=(1,2)⊤、x0=(0,0)⊤。求一次牛顿步后的 x1,并验证 x1 就是 f 的最小值点。
提示
对二次型
f(x)=21x⊤Ax−b⊤x,先写出
∇f(x)=Ax−b 和
∇2f(x)=A——注意海森矩阵在二次型上是常数,与
x 无关。
提示
套用
x1=x0−A−1∇f(x0)。
x0=(0,0) 时梯度恰为
−b,所以
x1=A−1b。
detA=11,直接解
Ax=b 得
x1=(1/11,7/11),代回检验
∇f(x1)=Ax1−b=0。
下一站:当 n 与样本量再大一个量级
到这里你已经能在 n≤106 的光滑无约束目标上选出一种「二阶或仿二阶」方法:低维校准走牛顿/LM,中高维 MLE 走 L-BFGS。但现代机器学习训练有第二条压力线——样本量 N 也巨大,每次评估 ∇f 都要扫一遍数据集。L-BFGS 在 N=107 的因子面板上每步要花几分钟,根本扛不住。下一节进入随机优化:随机梯度下降(stochastic gradient descent, SGD)、小批量、动量与 Adam——用估计偏差换吞吐,把每步代价从 O(N) 压到 O(B),B≪N。