第 04 章 信赖域方法
学习目标
读完本章,你应当能够:
- 写出信赖域子问题和基于实际/预测下降比 \(\rho_k\) 的半径更新规则(Algorithm 4.1),解释它与线搜索的根本区别。
- 计算 Cauchy 点,并说明"达到 Cauchy 下降的固定比例即可保证全局收敛"。
- 实现 dogleg 方法,理解二维子空间极小化和 CG–Steihaug 方法各自的适用场合。
- 掌握信赖域子问题全局解的刻画(定理 4.3):\((B+\lambda I)p=-g\)、互补条件、\(B+\lambda I\) 半正定;会用对 \(1/\|p(\lambda)\|\) 的牛顿法求 \(\lambda\),知道"困难情形"是怎么回事。
- 理解 \(\eta=0\) 与 \(\eta>0\) 两种情形的全局收敛结论,以及信赖域牛顿法能避开鞍点的理论优势。
- 看清信赖域子问题与岭回归、Levenberg–Marquardt 方法的同构关系,并用于因子回归中的共线性处理。
读前导读
这一章在解决什么问题
Solver 每走一步,都依赖一个"局部近似模型":在当前权重附近,用斜率和弯曲程度拼出一个二次函数,假装目标函数就长这样。问题是,这个近似只在附近可信,离得越远越不准——就像用久期和凸性估债券价格,收益率变动 10bp 很准,变动 300bp 就明显偏了。
第 3 章的线搜索先按模型定方向,再沿这个方向试步长。本章的信赖域换了一个思路:先划一个圈(半径 \(\Delta\)),声明"我只在这个圈里相信模型",然后在圈内找模型的最好点,方向和距离一次定下来。走完后核对"实际改善 ÷ 模型预测的改善"这个比值 \(\rho\):比值接近 1,说明模型靠谱,下次把圈放大;比值很低甚至为负,说明模型在这么远的地方已经失真,把圈缩小。这个机制你在风控里一定见过:模型回测表现好,就给它更大的额度;回测频繁失效,就收紧限额。
本章还有一个让金融读者很亲切的结论:在圈内找最好点(信赖域子问题),数学上和岭回归完全相同。圈的半径对应岭惩罚的强度,半径越小,惩罚越重。这给了你一个看待因子回归共线性问题的新角度:岭回归就是"不相信 OLS 能走那么远"。
需要先想起来的数学
- 二次模型与 \(\arg\min\):\(m(p)=f+g^Tp+\tfrac12p^TBp\) 是多元的抛物线,\(g\) 是斜率,\(B\) 是弯曲程度。\(\arg\min_p m(p)\) 表示"使 \(m\) 最小的那个 \(p\)"(不是最小值本身)。见 第 00 册第 05 章 多元微积分与优化。
- 特征分解:对称矩阵 \(B=Q\Lambda Q^T\),\(Q\) 的列 \(q_j\) 是相互垂直的单位向量(特征向量),\(\Lambda\) 是对角线上的特征值。直观上是"把坐标轴转到 \(B\) 的主轴方向,在这组坐标下 \(B\) 就只是各轴上的伸缩"。这和 PCA 把协方差矩阵分解成主成分一模一样:\(q_j\) 是主成分方向,\(\lambda_j\) 是该主成分的方差。见 第 00 册第 06 章 线性代数速成。
- 拉格朗日乘子:在约束 \(\|p\|\le\Delta\) 下求极小时,乘子 \(\lambda\) 衡量"放松约束一点点,目标能改善多少",也就是约束的影子价格。约束不紧(没碰到边界)时影子价格为 0。见 第 00 册第 05 章 多元微积分与优化。
- Cholesky 分解:正定矩阵可以写成 \(R^TR\)(\(R\) 上三角),相当于矩阵的"平方根"。它的存在与否可以当作"矩阵是否正定"的检验:分解失败就说明不正定。在蒙特卡洛模拟中你可能用它生成相关的随机数。见 第 00 册第 06 章 线性代数速成。
- span 与 range:\(\mathrm{span}[u,v]\) 是 \(u\)、\(v\) 所有线性组合构成的平面;\(\mathrm{range}(B)\) 是所有 \(Bx\) 构成的集合(值域)。
怎么读这一章
必读:4.1(框架与 \(\rho_k\))、4.2.1(Cauchy 点的含义,公式可以先跳过)、4.2.3(dogleg,配合原书图 4.3)、4.3.1 的定理 4.3 及其解读、4.6 量化实战 B(岭回归)。4.2.5 的 CG–Steihaug 等读完第 5 章再回来看更容易。4.3.3 困难情形、4.3.4 的证明、4.4 的收敛定理第一次可以只看结论和"核心思想"那一句。4.5 读一下椭球信赖域与变量标准化的关系即可。
4.1 基本思想与算法框架
线搜索和信赖域都依靠目标函数的二次模型,但用法不同:
- 线搜索用模型产生一个方向,再沿方向找步长;
- 信赖域在当前点周围划出一个区域,在这个区域里"相信模型能充分代表目标函数",取模型在区域内的(近似)极小点作为一步——同时决定方向和长度。如果这一步不可接受,就缩小区域重新求解,新的步一般不仅更短,方向也不同。
区域大小至关重要:太小,会错失大步前进的机会;太大,模型的极小点可能离目标函数的极小点很远。实践中根据之前迭代的表现调整:模型可靠(预测准、步子好)就逐步放大,允许更大胆的步;某一步失败,说明模型在当前区域内不够准,就缩小。
原书图 4.1 给了一个直观对比:当前点位于一个弯曲山谷的一端,极小点在另一端。基于同一个二次模型,线搜索沿模型极小点的方向搜索,即使用最优步长也只能得到很小的下降;信赖域取一个小圆内的模型极小点,方向会"拐向"山谷,下降更显著。
4.1.1 模型与子问题
模型函数为
\(B_k\) 对称。由 Taylor 定理 \(f(x_k+p)=f_k+\nabla f_k^Tp+\tfrac12p^T\nabla^2f(x_k+tp)p\)(4.2),模型误差是 \(O(\|p\|^2)\);若取 \(B_k=\nabla^2f(x_k)\),误差降为 \(O(\|p\|^3)\),这就是信赖域牛顿法(第 6 章)。本章只假设 \(B_k\) 对称且关于 \(k\) 一致有界。
每一步求解信赖域子问题(trust-region subproblem):
这里先用欧氏范数。若 \(B_k\) 正定且 \(\|B_k^{-1}\nabla f_k\|\le\Delta_k\),解就是无约束极小点 \(p_k^B=-B_k^{-1}\nabla f_k\),称为完全步(full step)。其他情况需要专门计算,但好消息是:只需近似解就能保证收敛和良好的实际表现。
4.1.2 半径更新
定义实际下降与预测下降之比
分子是实际下降(actual reduction),分母是预测下降(predicted reduction),后者恒非负(因为 \(p=0\) 可行)。解读:
- \(\rho_k<0\):目标函数反而上升,拒绝这一步;
- \(\rho_k\approx1\):模型与函数吻合得很好,可以扩大区域;
- \(\rho_k\) 为正但不接近 1:保持半径;
- \(\rho_k\) 接近 0 或为负:缩小半径。
Algorithm 4.1(信赖域) 给定 \(\hat\Delta>0\)(步长总上界)、\(\Delta_0\in(0,\hat\Delta)\)、\(\eta\in[0,\frac14)\):
for k = 0,1,2,...
(近似)求解 (4.3) 得 p_k;按 (4.4) 计算 ρ_k
if ρ_k < 1/4: Δ_{k+1} = (1/4)·‖p_k‖
else if ρ_k > 3/4 且 ‖p_k‖ = Δ_k: Δ_{k+1} = min(2Δ_k, Δ̂)
else: Δ_{k+1} = Δ_k
if ρ_k > η: x_{k+1} = x_k + p_k else x_{k+1} = x_k
end
注意:只有当步长真正碰到边界时才放大半径。如果步严格在区域内部,说明当前半径并不妨碍进展,没有必要放大。
白话解释:用一组数字走一遍 Algorithm 4.1。设当前 \(f(x_k)=10\),模型预测这一步把 \(f\) 降到 \(8\)(预测下降 2)。 实际降到 \(8.1\):\(\rho=1.9/2=0.95>3/4\),模型很准;若这一步碰到了边界,下次半径翻倍。 实际降到 \(9.0\):\(\rho=0.5\),接受这一步,半径不变。 实际升到 \(10.5\):\(\rho=-0.25<1/4\),拒绝这一步(\(x\) 不动),半径缩为这一步长度的 1/4,下次在更小的圈里重新建模求解。 \(\eta\) 是"接受门槛":\(\eta=0\) 表示只要函数降了就接受;\(\eta=0.1\) 表示实际下降至少要达到预测的 10%。
金融直觉:这和模型风险管理的逻辑相同。\(\rho_k\) 是一次"回测":模型预测的损益和实际损益一比。连续准确,额度(半径)逐步放大,但设上限 \(\hat\Delta\);一次严重失准,立刻大幅收紧额度并否决这笔交易。 求解子问题的近似方法有两类:三种"至少达到 Cauchy 点下降量"的便宜方法——dogleg(\(B_k\) 正定时)、二维子空间极小化(\(B_k\) 可以不定)、Steihaug 方法(\(B_k\) 是大规模稀疏的精确 Hessian 时最合适);以及 Moré–Sorensen 的"近似精确"解法,它利用解满足 \((B_k+\lambda I)p=-\nabla f_k\) 这一性质,寻找与半径相对应的 \(\lambda\)。
4.2 Cauchy 点及相关算法
4.2.1 Cauchy 点
与线搜索不需要最优步长类似,信赖域方法的全局收敛只要求近似解位于信赖域内、并使模型"充分下降"。充分下降用 Cauchy 点来量化。
Algorithm 4.2(Cauchy 点)
- 求线性化子问题的解:\(p_k^S=\arg\min_p f_k+\nabla f_k^Tp\) s.t. \(\|p\|\le\Delta_k\);(4.5)
- 沿 \(p_k^S\) 方向求模型极小:\(\tau_k=\arg\min_{\tau>0}m_k(\tau p_k^S)\) s.t. \(\|\tau p_k^S\|\le\Delta_k\);(4.6)
- \(p_k^C=\tau_kp_k^S\)。
闭式解:\(p_k^S=-\dfrac{\Delta_k}{\|\nabla f_k\|}\nabla f_k\),
理解:若沿负梯度方向曲率非正,模型沿该方向单调下降,一直走到边界;若曲率为正,模型沿该方向是一元凸二次函数,取它的无约束极小点和边界中先到的那个。
推导拆解:(4.8) 的第二行怎么来?沿 \(p^S\) 方向走 \(\tau\) 倍,记 \(s=\Delta/\|g\|\),则 \(p=-\tau s g\),代入模型:\(m(\tau)=f-\tau s\|g\|^2+\tfrac12\tau^2s^2\,g^TBg\)。这是 \(\tau\) 的一元二次函数。曲率 \(g^TBg>0\) 时,对 \(\tau\) 求导令其为零:\(-s\|g\|^2+\tau s^2g^TBg=0\),得 \(\tau=\|g\|^2/(s\,g^TBg)=\|g\|^3/(\Delta\,g^TBg)\)。但 \(\tau>1\) 会走出信赖域,所以再与 1 取较小者。 第一步 \(p^S\) 为什么是 \(-\Delta g/\|g\|\)?只看线性部分 \(g^Tp\),在长度 \(\le\Delta\) 的向量里让它最小,就是让 \(p\) 与 \(g\) 方向正好相反、长度用满,即最速下降方向走到边界。 Cauchy 步计算便宜(不需要矩阵分解),是判断近似解是否可接受的标尺:若每一步的模型下降至少是 Cauchy 步下降的固定倍数,信赖域方法就全局收敛(4.4 节)。
4.2.2 改进 Cauchy 点
但总取 Cauchy 点,相当于用一种特殊步长的最速下降,表现很差。Cauchy 点对 \(B_k\) 的依赖很弱(只用来定步长);要想快速(比如超线性)收敛,\(B_k\) 必须同时影响方向和长度。所以实用方法都先算 Cauchy 点再加以改进,并且设计成:当 \(B_k\) 正定且 \(\|p_k^B\|\le\Delta_k\) 时直接取完全步 \(p_k^B\)——这样在 \(B_k\) 是精确 Hessian 或拟牛顿近似时就能期待超线性收敛。
下面省略下标,把子问题写成
解记作 \(p^*(\Delta)\),强调它依赖于半径。
4.2.3 Dogleg 方法
先看 \(B\) 正定时解 \(p^*(\Delta)\) 随 \(\Delta\) 怎样变化:
- \(\Delta\ge\|p^B\|\) 时,\(p^*(\Delta)=p^B\);(4.10)
- \(\Delta\) 很小时二次项几乎不起作用,\(p^*(\Delta)\approx-\Delta\dfrac{g}{\|g\|}\);(4.11)
- 中间值时 \(p^*(\Delta)\) 沿一条弯曲的轨迹从负梯度方向过渡到 \(p^B\)(原书图 4.3)。
Dogleg(狗腿)方法用两段折线代替这条曲线。第一段从原点到最速下降方向上的无约束极小点
第二段从 \(p^U\) 到 \(p^B\):
然后在信赖域约束下沿这条折线极小化 \(m\)。
白话解释:dogleg 里有两个"候选目的地"。\(p^U\) 是"只按最速下降方向走、走到模型最低点"的保守步(它的步长公式和第 3 章 (3.25) 的精确步长相同);\(p^B\) 是牛顿步,完全按模型走到最低点的激进步。圈很小时,只能沿最速下降方向走一点;圈足够大时,直接走牛顿步;圈大小居中时,先朝 \(p^U\) 走,再拐向 \(p^B\),在碰到圈边的地方停下。参数 \(\tau\in[0,1]\) 是第一段,\(\tau\in[1,2]\) 是第二段。 这条折线的形状像狗的后腿弯折,因此得名。它的好处是:只需解一次线性方程组(算 \(p^B\))和一个一元二次方程(求与圆的交点),就能得到近似"沿最优曲线走到边界"的步。 引理 4.1 设 \(B\) 正定,则 (i) \(\|\tilde p(\tau)\|\) 是 \(\tau\) 的增函数;(ii) \(m(\tilde p(\tau))\) 是 \(\tau\) 的减函数。
证明(只需看 \(\tau\in[1,2]\) 段,第一段显然)。(i) 令 \(h(\alpha)=\frac12\|p^U+\alpha(p^B-p^U)\|^2\),则
最后一步由 Cauchy–Schwarz 不等式(练习 4)。(ii) 令 \(\hat h(\alpha)=m(\tilde p(1+\alpha))\),则
推论:若 \(\|p^B\|\ge\Delta\),折线与信赖域边界恰好相交一次,否则不相交。由于 \(m\) 沿折线递减,选法很简单:\(\|p^B\|\le\Delta\) 时取 \(p^B\);否则取折线与边界的交点,只需解一个关于 \(\tau\) 的标量二次方程 \(\|p^U+(\tau-1)(p^B-p^U)\|^2=\Delta^2\),不需要任何搜索。dogleg 也可以改造来处理不定的 \(B\),但意义不大,因为那时 \(p^B\) 不再是模型的极小点。
4.2.4 二维子空间极小化
\(B\) 正定时,可以把搜索范围从折线扩大到 \(p^U\) 与 \(p^B\) 张成(等价地,\(g\) 与 \(B^{-1}g\) 张成)的整个二维子空间:
这只是一个两变量问题,容易求解(练习 9)。Cauchy 点在子空间内可行,所以下降量至少与 Cauchy 点一样多,保证全局收敛;整条 dogleg 折线也在这个子空间里,所以它是 dogleg 的推广。
它的一大优点是能直观、实用且理论上稳妥地处理不定的 \(B\)(Byrd–Schnabel–Schultz):当 \(B\) 有负特征值时,子空间改为
\(\lambda_1\) 是 \(B\) 最负的特征值(保证 \(B+\alpha I\) 正定;区间留有余地,使得可以用 Lanczos 等方法近似求 \(\alpha\))。若 \(\|(B+\alpha I)^{-1}g\|\le\Delta\),就放弃子空间搜索,取
其中 \(v\) 满足 \(v^T(B+\alpha I)^{-1}g\le0\),让 \(p\) 不往回缩、而继续大致沿 \(-(B+\alpha I)^{-1}g\) 方向走到更远处(利用负曲率)。若 \(B\) 有零特征值但没有负特征值,就用 Cauchy 步。
二维子空间法得到的模型下降常常接近精确解,主要计算量只是一次 \(B\) 或 \(B+\alpha I\) 的分解,而近似精确方法通常要两三次分解。
4.2.5 Steihaug 方法(CG–Steihaug)
前两种方法都要解一个含 \(B\) 的线性方程组,\(B\) 很大时代价高。Steihaug 方法基于共轭梯度法(第 5 章),不需要精确解线性方程组,又能在 Cauchy 点的基础上改进。它和标准 CG 的区别只在于:离开信赖域或者遇到 \(B\) 的负曲率方向时就停止。
Algorithm 4.3(CG–Steihaug) 给定容差 \(\epsilon>0\);令 \(p_0=0\),\(r_0=g\),\(d_0=-r_0\);若 \(\|r_0\|<\epsilon\),返回 \(p_0\)。
for j = 0,1,2,...
if d_jᵀ B d_j ≤ 0:
求 τ 使 p = p_j + τ d_j 在 (4.9) 中使 m 最小且 ‖p‖ = Δ;return p
α_j = r_jᵀ r_j / d_jᵀ B d_j
p_{j+1} = p_j + α_j d_j
if ‖p_{j+1}‖ ≥ Δ:
求 τ ≥ 0 使 p = p_j + τ d_j 满足 ‖p‖ = Δ;return p
r_{j+1} = r_j + α_j B d_j
if ‖r_{j+1}‖ < ε‖r_0‖: return p_{j+1}
β_{j+1} = r_{j+1}ᵀ r_{j+1} / r_jᵀ r_j
d_{j+1} = −r_{j+1} + β_{j+1} d_j
end
(精读笔记所据的 PDF 文本最后一行印作 \(d_{j+1}=r_{j+1}+\beta_{j+1}d_j\);按 \(d_0=-r_0\) 的约定和标准 CG,应为 \(-r_{j+1}\),此处已更正。)
与线性 CG 的对应关系:\(m\leftrightarrow\phi\),\(p\leftrightarrow x\),\(B\leftrightarrow A\),\(-g\leftrightarrow b\)。两个额外的停止准则(遇到零/负曲率方向;越出信赖域)都把当前方向与边界的交点作为结果。
初始化 \(p_0=0\) 至关重要:第一步之后
恰好是 Cauchy 点(若未被边界截断);之后 CG 每步都降低 \(m\),所以全局收敛所需的充分下降自动满足。另一个关键性质也来自 \(p_0=0\):迭代点的范数单调增加,因此一碰到边界就可以停——之后不会再有信赖域内模型值更低的点。
定理 4.2 Algorithm 4.3 生成的序列满足
证明要点:先证 \(p_j^Tr_j=0\)(\(j\ge0\))和 \(p_j^Td_j>0\)(\(j\ge1\))。由 \(p_j=\sum_{i<j}\alpha_id_i\) 和 CG 的扩展子空间性质(\(r_j\perp d_i\),\(i<j\),见第 5 章定理 5.2)得 \(p_j^Tr_j=0\)。又
归纳地 \(p_{j+1}^Td_{j+1}=\beta_{j+1}p_{j+1}^Td_j=\beta_{j+1}(p_j^Td_j+\alpha_jd_j^Td_j)>0\)。于是
若因负曲率或越界而停止,最终 \(\|p\|=\Delta\),是可能的最大长度。\(\square\)
直观上,CG–Steihaug 的迭代点沿一条从 Cauchy 点出发、离原点越来越远的路径前进;\(B\) 正定时可以与 dogleg 类比——都从 \(p^C\) 走向 \(p^B\),直到碰到边界。
4.3 子问题的近似精确解
4.3.1 精确解的刻画
上面的方法并不认真追求子问题的精确解,但都利用了 \(B\) 的信息,成本低且全局收敛。当 \(n\) 不太大时,值得更充分地利用模型:大约用三次分解(dogleg 和二维子空间只需一次)就能得到很好的近似。
定理 4.3 \(p^*\) 是
的全局解,当且仅当 \(p^*\) 可行,且存在标量 \(\lambda\ge0\) 使
解读:
- (4.19b) 是互补条件(complementarity):\(\lambda\) 和 \(\Delta-\|p^*\|\) 至少有一个为零。解严格在区域内部时 \(\lambda=0\),于是 \(Bp^*=-g\) 且 \(B\) 半正定;解在边界上时 \(\lambda\) 可以为正(原书图 4.4)。
- 由 (4.19a),\(\lambda p^*=-Bp^*-g=-\nabla m(p^*)\):在边界上的解与模型的负梯度共线,即垂直于模型的等高线。
- 这是非凸二次函数在球上全局最优的充要条件。信赖域子问题是少数"非凸但可以全局求解"的优化问题之一,这是信赖域方法理论上很漂亮的地方。
金融直觉:\(\lambda\) 是半径约束的影子价格,和组合优化里约束的拉格朗日乘子含义一样。设想你在做"跟踪误差不超过 2%"约束下的主动组合优化:如果最优组合的跟踪误差只有 1.5%(约束不紧),放宽约束不会带来任何好处,影子价格为 0;如果正好顶到 2%,放宽一点就能多拿收益,影子价格为正。(4.19b) 的"互补条件"说的就是这件事:要么约束不紧(\(\|p^*\|<\Delta\))且 \(\lambda=0\),要么约束紧且 \(\lambda\ge0\)。 (4.19a) 可以读成"把模型的弯曲程度人为加上 \(\lambda\),再求牛顿步"。\(\lambda\) 越大,\(B+\lambda I\) 越"硬",步子越短、越接近最速下降方向(\(\lambda\) 极大时 \(p\approx-g/\lambda\))。所以信赖域在"牛顿步"和"短的最速下降步"之间连续过渡,过渡的旋钮就是 \(\lambda\)。 (4.19c) 是信赖域独有的:\(B\) 本身可以不定(模型在某些方向向下弯),但加上 \(\lambda I\) 后必须半正定,即 \(\lambda\ge-\lambda_1\)。
4.3.2 计算近似精确解
由定理 4.3,要么 \(\lambda=0\) 满足 (4.19a)(4.19c) 且 \(\|p\|\le\Delta\);要么定义
(\(\lambda\) 足够大使 \(B+\lambda I\) 正定),求 \(\lambda>0\) 使
这是一个一维求根问题。设 \(B=Q\Lambda Q^T\),\(\Lambda=\mathrm{diag}(\lambda_1,\dots,\lambda_n)\),\(\lambda_1\le\cdots\le\lambda_n\),则
推导拆解:(4.21) 的来历。\(B+\lambda I=Q\Lambda Q^T+\lambda QQ^T=Q(\Lambda+\lambda I)Q^T\)(用了 \(QQ^T=I\)),所以 \((B+\lambda I)^{-1}=Q(\Lambda+\lambda I)^{-1}Q^T\),中间是对角矩阵,求逆只需把每个对角元取倒数 \(1/(\lambda_j+\lambda)\)。于是 \(p(\lambda)=-\sum_j\frac{q_j^Tg}{\lambda_j+\lambda}q_j\):把梯度投影到每个主轴上(\(q_j^Tg\)),在该轴上除以"弯曲程度 + \(\lambda\)"。 (4.22) 是因为各 \(q_j\) 相互垂直且长度为 1,所以长度平方就是各分量平方和(勾股定理)。 用 PCA 的语言:梯度在第 \(j\) 个主成分上的分量被"除以该主成分方差 + \(\lambda\)"。方差小的主成分(\(\lambda_j\) 小)被放大得最厉害——这正是共线时 OLS 系数不稳定的原因;加上 \(\lambda\) 后,这些方向的放大被压住,这就是岭回归的收缩效应。
由此可见:
- 在 \((-\lambda_1,\infty)\) 上 \(\|p(\lambda)\|\) 连续、单调非增,且 \(\lim_{\lambda\to\infty}\|p(\lambda)\|=0\);(4.23)
- 若 \(q_1^Tg\ne0\),则 \(\lim_{\lambda\downarrow-\lambda_1}\|p(\lambda)\|=\infty\)。(4.24)
因此(\(q_1^Tg\ne0\) 时)在 \((-\lambda_1,\infty)\) 上恰有一个 \(\lambda^*\) 使 \(\|p(\lambda^*)\|=\Delta\)(原书图 4.5)。三种情形:\(B\) 正定且 \(\|B^{-1}g\|\le\Delta\),取 \(\lambda=0\);\(B\) 正定但 \(\|B^{-1}g\|>\Delta\),在 \((0,\infty)\) 中找根;\(B\) 不定且 \(q_1^Tg\ne0\),在 \((-\lambda_1,\infty)\) 中找根。
用什么函数做牛顿迭代? 直接对 \(\phi_1(\lambda)=\|p(\lambda)\|-\Delta\)(4.25)用牛顿法效果不好:\(\lambda\) 略大于 \(-\lambda_1\) 时 \(\phi_1\approx\frac{C_1}{\lambda+\lambda_1}+C_2\),高度非线性。改用
在该区域 \(\phi_2\approx\frac1\Delta-\frac{\lambda+\lambda_1}{C_3}\) 近乎线性,牛顿法表现很好(原书图 4.6)。牛顿迭代 \(\lambda^{(\ell+1)}=\lambda^{(\ell)}-\phi_2(\lambda^{(\ell)})/\phi_2'(\lambda^{(\ell)})\)(4.26)可以写成只需 Cholesky 分解的形式:
Algorithm 4.4(精确信赖域) 给定 \(\lambda^{(0)}\),\(\Delta>0\):
for ℓ = 0,1,2,...
Cholesky 分解 B + λ^(ℓ) I = Rᵀ R
解 Rᵀ R p_ℓ = −g;解 Rᵀ q_ℓ = p_ℓ
λ^(ℓ+1) = λ^(ℓ) + (‖p_ℓ‖/‖q_ℓ‖)² · (‖p_ℓ‖ − Δ)/Δ (4.27)
end
实际使用需要加保护(例如 \(\lambda^{(\ell)}<-\lambda_1\) 时 Cholesky 分解不存在)。每次迭代的主要工作是一次 Cholesky 分解;实用版本不追求高精度,两三次迭代得到的近似解就够了。
一个有用的观察:\(\phi_2\) 在 \((-\lambda_1,\infty)\) 上是凹的增函数,所以从 \(\lambda^*\) 左侧出发的牛顿迭代会单调地从左侧逼近 \(\lambda^*\),不会越过;从右侧出发则第一步可能跳得太远(甚至跳到 \(-\lambda_1\) 左边),这就是需要保护的原因。
白话解释(原文一处措辞需更正):上一段说 \(\phi_2\) 是"凹的增函数",方向写反了。随着 \(\lambda\) 增大,\(\|p(\lambda)\|\) 减小,\(1/\|p(\lambda)\|\) 增大,所以 \(\phi_2=\frac1\Delta-\frac1{\|p(\lambda)\|}\) 是减函数(这与上文的近似式 \(\phi_2\approx\frac1\Delta-\frac{\lambda+\lambda_1}{C_3}\) 一致);又因为 \(1/\|p(\lambda)\|\) 是凹函数(Moré–Sorensen 的结果),\(\phi_2\) 是凸函数。可以用两项的小例子验证:\(\lambda_1=0,\lambda_2=1\),\(q_j^Tg=1\),则 \(1/\|p\|\) 在 \(\lambda=1,2,3\) 处约为 \(0.894,1.664,2.400\),相邻增量 \(0.770>0.736\) 在变小,确为凹。 结论不受影响:对"凸的减函数",切线在函数图像下方,从根的左侧(\(\phi_2>0\),即 \(\|p\|>\Delta\))出发,牛顿步落点不会越过根,迭代单调右移逼近 \(\lambda^*\);从右侧出发则可能跳过头。代码中"从 \(\lambda^*\) 左侧出发"的初始化正是利用了这一点。
4.3.3 困难情形
- 若最负特征值是重根(\(0>\lambda_1=\lambda_2=\cdots\)),只要对某个 \(\lambda_j=\lambda_1\) 的 \(j\) 有 \(q_j^Tg\ne0\),上述方法照样可用。
- 若对所有 \(\lambda_j=\lambda_1\) 的 \(j\) 都有 \(q_j^Tg=0\),(4.24) 就不成立,\((-\lambda_1,\infty)\) 内可能不存在使 \(\|p(\lambda)\|=\Delta\) 的 \(\lambda\)(原书图 4.7)。Moré 和 Sorensen 称之为困难情形(hard case)。由定理 4.3,\(\lambda\in[-\lambda_1,\infty)\),所以只能取 \(\lambda=-\lambda_1\)。
此时求 \(p\) 的方法是:\(B-\lambda_1I\) 奇异,取它零空间中的单位向量 \(z\)(\((B-\lambda_1I)z=0\)),令
则 \(\|p\|^2=\sum_{j:\lambda_j\ne\lambda_1}\frac{(q_j^Tg)^2}{(\lambda_j+\lambda)^2}+\tau^2\),总能选 \(\tau\) 使 \(\|p\|=\Delta\),并且在 \(\lambda=-\lambda_1\) 时 (4.19) 成立。(PDF 文本中 (4.28) 的求和项前缺少负号,与 (4.21) 不一致,此处已更正。)直观上:梯度在最负曲率方向上没有分量,光靠调 \(\lambda\) 走不到边界,于是沿负曲率方向 \(z\) "补"一段,这恰好也是降低模型值的方向。
4.3.4 定理 4.3 的证明
先看无约束二次函数何时有极小点。
引理 4.4 设 \(m(p)=g^Tp+\frac12p^TBp\)(4.29),\(B\) 为任意对称矩阵。则 (i) \(m\) 有极小点当且仅当 \(B\) 半正定且 \(g\in\mathrm{range}(B)\);(ii) 极小点唯一当且仅当 \(B\) 正定;(iii) \(B\) 半正定时,任何满足 \(Bp=-g\) 的 \(p\) 都是全局极小点。
证明:(i) 充分性:若有 \(p\) 使 \(Bp=-g\),则对任意 \(w\),
必要性:极小点处 \(\nabla m=Bp+g=0\),所以 \(g\in\mathrm{range}(B)\);且 \(\nabla^2m=B\) 必须半正定。(ii) 正定时 \(w\ne0\) 有 \(w^TBw>0\),极小唯一;若半正定但不正定,存在 \(w\ne0\) 使 \(Bw=0\),\(m(p+w)=m(p)\),不唯一。(iii) 即 (i) 的证明。\(\square\)
例:\(B=\mathrm{diag}(1,0,2)\)。若 \(g_2=0\),则 \(g\in\mathrm{range}(B)\),有极小点;若 \(g_2\ne0\),沿 \(\alpha(0,-g_2,0)^T\) 令 \(\alpha\to\infty\),\(m\) 无限下降。这正是第 2 章提到的"样本协方差奇异时均值–方差问题可能无界"的数学本质。
定理 4.3 的证明
充分性:设存在 \(\lambda\ge0\) 满足 (4.19)。由引理 4.4(iii),\(p^*\) 是
的全局极小点,所以
由互补条件 \(\lambda(\Delta^2-p^{*T}p^*)=0\),得 \(m(p)\ge m(p^*)+\frac\lambda2(\Delta^2-p^Tp)\ge m(p^*)\) 对一切 \(\|p\|\le\Delta\) 成立。
必要性:若 \(\|p^*\|<\Delta\),则 \(p^*\) 是 \(m\) 的无约束局部极小点,从而 \(\nabla m(p^*)=0\)、\(\nabla^2m=B\) 半正定,取 \(\lambda=0\) 即可。若 \(\|p^*\|=\Delta\),\(p^*\) 也是 \(\min m(p)\) s.t. \(\|p\|=\Delta\) 的解,由约束优化的一阶条件(原书第 12 章),拉格朗日函数 \(\mathcal{L}(p,\lambda)=m(p)+\frac\lambda2(p^Tp-\Delta^2)\) 在 \(p^*\) 处驻定,得 \((B+\lambda I)p^*=-g\)(4.32)。对所有 \(\|p\|=\Delta\) 有 \(m(p)\ge m(p^*)\),代入 \(g=-(B+\lambda I)p^*\) 整理得
方向集合 \(\{\pm(p-p^*)/\|p-p^*\|:\|p\|=\Delta\}\) 在单位球面上稠密,所以 \(B+\lambda I\) 半正定。最后证 \(\lambda\ge0\):若只有负的 \(\lambda\) 满足 (4.19a)(4.19c),由 (4.31),\(\|p\|\ge\|p^*\|=\Delta\) 时也有 \(m(p)\ge m(p^*)\);结合球内的最优性,\(p^*\) 是 \(m\) 的无约束全局极小点,由引理 4.4(i),\(Bp^*=-g\) 且 \(B\) 半正定,于是 \(\lambda=0\) 也满足条件,矛盾。\(\square\)
4.4 全局收敛
4.4.1 Cauchy 点带来的下降
全局收敛只需要近似解的模型下降达到 Cauchy 下降的固定比例。dogleg、二维子空间、Algorithm 4.3 的近似解都满足
"min"中的二选一是信赖域方法的典型特征(源自半径约束)。当 \(\Delta_k\) 是较小者时,(4.34) 很像 Wolfe 第一条件:模型下降与梯度大小和步长都成比例。
白话解释:(4.34) 的右边可以读成"坡度 × 能走的距离"。能走多远受两个因素限制,取较紧的那个:一是圈的半径 \(\Delta_k\);二是 \(\|\nabla f_k\|/\|B_k\|\),它是"坡度 ÷ 弯曲程度",大约就是沿最速下降方向走到模型谷底的距离(一元时就是 \(|f'|/f''\))。圈很小时,半径是瓶颈;圈很大时,模型自身的谷底是瓶颈。只要每一步至少拿到这个下降量的固定比例,就保证全局收敛——不需要把子问题解得很精确。 引理 4.5 Cauchy 点满足 (4.34),且 \(c_1=\frac12\):
证明:分三种情况。
- \(\nabla f_k^TB_k\nabla f_k\le0\):\(m_k(p_k^C)-m_k(0)=-\Delta_k\|\nabla f_k\|+\frac12\frac{\Delta_k^2}{\|\nabla f_k\|^2}\nabla f_k^TB_k\nabla f_k\le-\Delta_k\|\nabla f_k\|\)。
- 曲率为正且 \(\frac{\|\nabla f_k\|^3}{\Delta_k\nabla f_k^TB_k\nabla f_k}\le1\)(4.36):\(\tau\) 取内点,
\[m_k(p_k^C)-m_k(0)=-\frac12\frac{\|\nabla f_k\|^4}{\nabla f_k^TB_k\nabla f_k}\le-\frac12\frac{\|\nabla f_k\|^4}{\|B_k\|\|\nabla f_k\|^2}=-\frac12\frac{\|\nabla f_k\|^2}{\|B_k\|}.\]
- 否则 \(\nabla f_k^TB_k\nabla f_k<\frac{\|\nabla f_k\|^3}{\Delta_k}\)(4.37),\(\tau=1\):
\[m_k(p_k^C)-m_k(0)\le-\Delta_k\|\nabla f_k\|+\frac12\frac{\Delta_k^2}{\|\nabla f_k\|^2}\cdot\frac{\|\nabla f_k\|^3}{\Delta_k}=-\frac12\Delta_k\|\nabla f_k\|.\qquad\square\]
定理 4.6 若 \(\|p_k\|\le\Delta_k\) 且 \(m_k(0)-m_k(p_k)\ge c_2[m_k(0)-m_k(p_k^C)]\),则 \(p_k\) 满足 (4.34),\(c_1=c_2/2\)。特别地,精确解满足 (4.34) 且 \(c_1=\frac12\);dogleg、二维子空间、Algorithm 4.3 都有 \(m_k(p_k)\le m_k(p_k^C)\),同样 \(c_1=\frac12\)。
4.4.2 收敛到驻点
两类结果:\(\eta=0\)(只要 \(f\) 下降就接受)时,梯度有一个趋于零的子列;\(\eta>0\)(实际下降至少是预测下降的某个小比例)时,整个梯度序列趋于零。假设:\(B_k\) 一致有界;水平集 \(\{x:f(x)\le f(x_0)\}\)(4.38)有界;允许近似解略超出半径,\(\|p_k\|\le\gamma\Delta_k\),\(\gamma\ge1\)(4.39)。
定理 4.7(\(\eta=0\)) 设 \(\|B_k\|\le\beta\),\(f\) 在水平集上连续可微且有下界,所有近似解满足 (4.34) 和 (4.39)。则
证明要点:
- 写出 \(|\rho_k-1|=\left|\dfrac{m_k(p_k)-f(x_k+p_k)}{m_k(0)-m_k(p_k)}\right|\)。由 Taylor 定理,分子 \(\le(\beta/2)\|p_k\|^2+C_4(p_k)\|p_k\|\)(4.41),其中 \(C_4\) 可以通过限制 \(\|p_k\|\) 而任意小。
- 反设 \(\|\nabla f_k\|\ge\epsilon\)(\(k\ge K\))(4.42)。由 (4.34),分母 \(\ge c_1\epsilon\min(\Delta_k,\epsilon/\beta)\)(4.43),于是
\[|\rho_k-1|\le\frac{\gamma\Delta_k(\beta\gamma\Delta_k/2+C_4)}{c_1\epsilon\min(\Delta_k,\epsilon/\beta)}.\tag{4.44}\]
- 取 \(\bar\Delta\) 足够小,使 \(\beta\gamma\Delta/2+C_4\le\frac{c_1\epsilon}{2\gamma}\)(4.45)且 \(\bar\Delta\le\epsilon/\beta\)。则 \(\Delta_k\le\bar\Delta\) 时 \(|\rho_k-1|\le\frac12\),\(\rho_k>\frac14\) 半径不会缩小。所以半径只在 \(\Delta_k>\bar\Delta\) 时才缩小,\(\Delta_k\ge\min(\Delta_K,\bar\Delta/4)\)(4.46)。
- 若有无穷多步 \(\rho_k\ge\frac14\),则这些步 \(f(x_k)-f(x_{k+1})\ge\frac14c_1\epsilon\min(\Delta_k,\epsilon/\beta)\),\(f\) 有下界迫使 \(\Delta_k\to0\),与 (4.46) 矛盾;否则最终每步 \(\rho_k<\frac14\),\(\Delta_k\) 每步缩为四分之一,也趋于零,同样矛盾。\(\square\)
核心思想:半径足够小时模型一定足够准(\(\rho_k\approx1\)),所以半径不可能无限缩小;而半径有下界时每一步成功的迭代都带来确定的下降量,函数有下界就不可能有无穷多次。
定理 4.8(\(\eta\in(0,\frac14)\)) 设 \(\|B_k\|\le\beta\),\(f\) 在水平集上梯度 Lipschitz 连续且有下界,近似解满足 (4.34)(4.39)。则
证明思路(Schultz–Schnabel–Byrd):任取一个 \(\nabla f_m\ne0\),记梯度 Lipschitz 常数为 \(\beta_1\),令 \(\epsilon=\frac12\|\nabla f_m\|\),\(R=\epsilon/\beta_1\),则在球 \(\mathcal{B}(x_m,R)\) 内 \(\|\nabla f(x)\|\ge\epsilon\)。由定理 4.7 的推理,迭代点不可能永远留在球内;设 \(x_{l+1}\) 是第一个离开的点。对其间实际走过的步求和:要么这些步的 \(\Delta_k\le\epsilon/\beta\),则 \(f(x_m)-f(x_{l+1})\ge\eta c_1\epsilon\sum\Delta_k\ge\eta c_1\epsilon R=\eta c_1\epsilon^2/\beta_1\)(4.48);要么下降至少 \(\eta c_1\epsilon^2/\beta\)(4.49)。由于 \(f(x_k)\downarrow f^*>-\infty\)(4.50),
4.4.3 近似精确解的收敛:避开鞍点
Moré–Sorensen 的带保护求根法(包括困难情形的处理)有一个终止准则,保证
\(p^*\) 是子问题的精确解(实际不需要知道 \(p^*\),(4.51) 由实用终止准则推出)。它与 (4.34) 的主要区别是更好地利用了二阶项 \(p^TBp\)。例:若 \(g=0\) 但 \(B\) 有负特征值(当前点是鞍点),(4.34) 的右端为零——前面的算法会停在鞍点;而 (4.51) 的右端为正,迫使算法离开鞍点。
定理 4.9 Algorithm 4.1 取 \(B_k=\nabla^2f(x_k)\),\(\eta\in(0,\frac14)\),近似解满足 (4.51)。则 \(\lim\|\nabla f_k\|=0\)。若水平集紧,则要么算法在满足二阶必要条件的点终止,要么 \(\{x_k\}\) 在水平集中有满足二阶必要条件的极限点。
这就是说,信赖域牛顿法能避开鞍点——这是它相对线搜索方法(第 3 章只保证收敛到驻点)的一个重要理论优势。
白话解释:鞍点像马鞍中心:前后方向是谷底,左右方向是山脊,梯度为零。只看梯度的方法(Cauchy 步、最速下降)在这里"看不到坡",会停下。近似精确解看的是整个二次模型:只要 \(B\) 有负特征值,就存在一个方向沿它走模型会下降(\(p^TBp<0\)),子问题的最优解自然会沿这个方向走到圈的边界,于是离开鞍点。 "紧集"(compact)在 \(\mathbb{R}^n\) 中就是"有界且闭"的集合,这里用它保证迭代点不会跑到无穷远,从而一定有极限点。"二阶必要条件"即第 2 章定理 2.3:梯度为零且 Hessian 半正定。
4.5 其他改进
4.5.1 尺度
病态尺度在几何上的表现是:\(x^*\) 位于一条狭长的山谷中,附近等高线是非常扁的椭圆。此时球形信赖域不合适:沿敏感方向模型只在很短距离内可信,沿不敏感方向可信距离长得多。信赖域的形状应该让边界上各点"对模型的信心大致相同",即采用椭球信赖域:
\(D\) 为正对角矩阵,子问题变为
\(f\) 对 \(x_i\) 敏感时 \(d_{ii}\) 取大,不敏感时取小。\(D\) 可由二阶导数 \(\partial^2f/\partial x_i^2\) 构造,可以逐步变化,只要 \(d_{ii}\) 保持在 \([d_{lo},d_{hi}]\)(\(0<d_{lo}\le d_{hi}<\infty\))内即可,不必精确。
本章所有算法都可改为椭球信赖域,收敛理论只需表面修改。例如广义 Cauchy 点(Algorithm 4.5)的闭式为
更简单的做法是变量代换 \(\tilde p=Dp\):子问题变为 \(\min_{\tilde p}f_k+(D^{-1}\nabla f_k)^T\tilde p+\frac12\tilde p^T(D^{-1}B_kD^{-1})\tilde p\) s.t. \(\|\tilde p\|\le\Delta_k\),于是只需用 \(D^{-1}\nabla f_k\) 代替梯度、\(D^{-1}B_kD^{-1}\) 代替 \(B_k\),就能直接套用球形信赖域的理论和算法。
4.5.2 非欧氏信赖域
信赖域也可以用 \(\|p\|_1\le\Delta_k\)、\(\|p\|_\infty\le\Delta_k\) 或它们的尺度化版本。无约束优化中它们没有明显优势,但对约束问题有用。例如界约束问题 \(\min f(x)\) s.t. \(x\ge0\),子问题是
欧氏范数下可行域是球与非负象限的交,几何上很别扭;改用 \(\infty\)-范数后变成一个盒子:\(x_k+p\ge0\),\(-\Delta_ke\le p\le\Delta_ke\),可以用标准二次规划技术求解。组合权重的上下界约束 \(l\le w\le u\) 正是这种结构,SciPy 中 least_squares(method='trf')(信赖域反射法)、L-BFGS-B 等处理界约束的方法都利用了类似的思路。
4.6 量化实战:信赖域与岭回归
本节做两个实验。
A:dogleg 信赖域 用精确 Hessian 的 dogleg 方法(原书习题 4.2)求解 Rosenbrock 函数,打印每一步的半径、\(\rho_k\)、步的类型以及是否接受,直观看到半径如何自适应调整。
B:信赖域子问题就是岭回归 截面因子回归 \(\min_\beta\frac12\|y-X\beta\|^2\) 中,若两个风格因子(如价值与盈利收益率)高度共线,OLS 估计会出现"一正一负、互相抵消"的不稳定因子收益。给系数加范数约束 \(\|\beta\|\le\Delta\):
这恰好是信赖域子问题 (4.18)。由定理 4.3,解满足 \((X^TX+\lambda I)\beta=X^Ty\)——这就是岭回归的正规方程,\(\lambda\) 就是岭惩罚系数。图 4.5 中 \(\|p(\lambda)\|\) 关于 \(\lambda\) 的单调关系,保证了"范数约束 \(\Delta\)"和"岭惩罚 \(\lambda\)"一一对应。我们用 Algorithm 4.4 对给定的 \(\Delta\) 求出 \(\lambda\),再与同一 \(\lambda\) 下的岭回归闭式解比对。
import numpy as np
# ---------- Part A: Algorithm 4.1 + dogleg,精确 Hessian,Rosenbrock ----------
def rosen(x): return 100 * (x[1] - x[0]**2)**2 + (1 - x[0])**2
def rosen_g(x): return np.array([-400 * x[0] * (x[1] - x[0]**2) - 2 * (1 - x[0]), 200 * (x[1] - x[0]**2)])
def rosen_h(x): return np.array([[1200 * x[0]**2 - 400 * x[1] + 2, -400 * x[0]], [-400 * x[0], 200.0]])
def cauchy_point(g, B, D): # (4.7)(4.8)
gBg = g @ B @ g; gn = np.linalg.norm(g)
tau = 1.0 if gBg <= 0 else min(gn**3 / (D * gBg), 1.0)
return -tau * D / gn * g
def dogleg(g, B, D):
try:
np.linalg.cholesky(B)
except np.linalg.LinAlgError: # B 不定:dogleg 不适用,退回 Cauchy 点
return cauchy_point(g, B, D), "Cauchy"
pB = -np.linalg.solve(B, g)
if np.linalg.norm(pB) <= D: return pB, "全牛顿步"
pU = -(g @ g) / (g @ B @ g) * g # (4.12)
if np.linalg.norm(pU) >= D: return D * pU / np.linalg.norm(pU), "沿负梯度到边界"
d = pB - pU # 解 ||pU + t d|| = D, t in [0,1]
a, b, c = d @ d, 2 * pU @ d, pU @ pU - D**2
t = (-b + np.sqrt(b * b - 4 * a * c)) / (2 * a)
return pU + t * d, "狗腿折线"
def trust_region(x, D=1.0, Dmax=10.0, eta=0.1, tol=1e-8, verbose=True):
for k in range(200):
g, B = rosen_g(x), rosen_h(x)
if np.linalg.norm(g) < tol: return x, k
p, kind = dogleg(g, B, D)
pred = -(g @ p + 0.5 * p @ B @ p) # m(0) - m(p)
rho = (rosen(x) - rosen(x + p)) / pred # (4.4)
if verbose and k < 12:
print("k=%2d Δ=%.4f ρ=%7.3f %-8s %s" % (k, D, rho, kind, "接受" if rho > eta else "拒绝"))
if rho < 0.25: D = 0.25 * np.linalg.norm(p)
elif rho > 0.75 and np.isclose(np.linalg.norm(p), D): D = min(2 * D, Dmax)
if rho > eta: x = x + p
return x, k
x, k = trust_region(np.array([-1.2, 1.0]))
print("信赖域 dogleg:%d 次迭代收敛到 %s\n" % (k, np.round(x, 8)))
# ---------- Part B: 信赖域子问题 = 范数约束最小二乘 = 岭回归(Algorithm 4.4) ----------
rng = np.random.default_rng(3)
N, K = 300, 6 # 300 只股票的截面,6 个风格因子
X = rng.standard_normal((N, K))
X[:, 1] = 0.99 * X[:, 0] + 0.14 * rng.standard_normal(N) # 价值与盈利收益率因子高度共线
f_true = np.array([0.010, 0.002, -0.004, 0.003, 0.0, 0.006])
y = X @ f_true + 0.03 * rng.standard_normal(N) # 当期截面收益
B, g = X.T @ X, -X.T @ y # m(p) = g'p + 1/2 p'Bp(差一个常数)
def tr_exact(B, g, Delta, tol=1e-10, maxit=50):
"""Algorithm 4.4:对 phi2(λ)=1/Δ-1/||p(λ)|| 做牛顿迭代,返回 p, λ, 迭代次数"""
lam1 = np.linalg.eigvalsh(B)[0]
if lam1 > 0:
p = -np.linalg.solve(B, g)
if np.linalg.norm(p) <= Delta: return p, 0.0, 0
lam = max(0.0, -lam1) + 1e-12 * np.abs(B).max() # 从 λ* 左侧出发,牛顿迭代单调右移
for it in range(1, maxit + 1):
R = np.linalg.cholesky(B + lam * np.eye(len(g))).T # B + λI = R'R
p = -np.linalg.solve(R, np.linalg.solve(R.T, g))
q = np.linalg.solve(R.T, p)
pn, qn = np.linalg.norm(p), np.linalg.norm(q)
if abs(pn - Delta) < tol * Delta: break
lam += (pn / qn)**2 * (pn - Delta) / Delta # (4.27)
return p, lam, it
beta_ols = np.linalg.solve(B, -g)
print("条件数 κ(X'X) = %.0f" % np.linalg.cond(B))
print("OLS 因子收益:", np.round(beta_ols, 4), " ||β|| = %.4f" % np.linalg.norm(beta_ols))
for Delta in [0.020, 0.013, 0.010]:
p, lam, it = tr_exact(B, g, Delta)
ridge = np.linalg.solve(B + lam * np.eye(K), X.T @ y) # 同一 λ 的岭回归闭式解
kkt = np.linalg.norm((B + lam * np.eye(K)) @ p + g)
print("Δ=%.3f: λ=%8.3f 迭代%d次 ||p||=%.4f β=%s 与岭回归差 %.1e KKT残差 %.1e" %
(Delta, lam, it, np.linalg.norm(p), np.round(p, 4), np.abs(p - ridge).max(), kkt))
运行输出:
k= 0 Δ=1.0000 ρ= 1.003 全牛顿步 接受
k= 1 Δ=1.0000 ρ= -0.414 狗腿折线 拒绝
k= 2 Δ=0.2500 ρ= 1.020 狗腿折线 接受
k= 3 Δ=0.5000 ρ= 0.850 狗腿折线 接受
k= 4 Δ=1.0000 ρ= 1.250 全牛顿步 接受
k= 5 Δ=1.0000 ρ= 1.359 全牛顿步 接受
k= 6 Δ=1.0000 ρ= 0.860 全牛顿步 接受
k= 7 Δ=1.0000 ρ= 1.208 全牛顿步 接受
k= 8 Δ=1.0000 ρ= -4.250 全牛顿步 拒绝
k= 9 Δ=0.1058 ρ= 1.133 狗腿折线 接受
k=10 Δ=0.2116 ρ= 1.263 狗腿折线 接受
k=11 Δ=0.4233 ρ= 0.797 全牛顿步 接受
信赖域 dogleg:25 次迭代收敛到 [1. 1.]
条件数 κ(X'X) = 196
OLS 因子收益: [-0.0063 0.0164 -0.0089 0.0036 -0.0004 0.0046] ||β|| = 0.0206
Δ=0.020: λ= 0.140 迭代4次 ||p||=0.0200 β=[-0.0057 0.0159 -0.0089 0.0036 -0.0004 0.0046] 与岭回归差 3.1e-17 KKT残差 1.4e-15
Δ=0.013: λ= 9.691 迭代8次 ||p||=0.0130 β=[ 0.0025 0.0076 -0.0086 0.0034 -0.0005 0.0044] 与岭回归差 1.3e-17 KKT残差 1.2e-15
Δ=0.010: λ= 93.584 迭代7次 ||p||=0.0100 β=[ 0.004 0.0047 -0.0066 0.0026 -0.0002 0.0033] 与岭回归差 1.7e-18 KKT残差 1.0e-15
解读
- A:第 1 步和第 8 步的 \(\rho_k\) 为负,被拒绝,半径随即缩小到被拒步长的 1/4;随后几步 \(\rho_k\approx1\) 且步长碰到边界,半径逐步加倍;在解附近都是"全牛顿步",信赖域约束不再起作用,恢复牛顿法的快速收敛(第 6 章定理 6.4 会严格证明这一点)。
- B:真实的价值、盈利因子收益是 \((0.010, 0.002)\),两者合计 0.012。由于共线(相关系数约 0.99),OLS 给出 \((-0.0063, 0.0164)\)——合计仍约 0.010,但如何在两个因子之间分配完全被噪声主导,而且符号都可能是错的。加上范数约束后,Algorithm 4.4 用 4–8 次 Cholesky 分解就找到了对应的 \(\lambda\);它与同一 \(\lambda\) 的岭回归解差异在 \(10^{-17}\) 量级,KKT 残差在 \(10^{-15}\) 量级,验证了定理 4.3。随着 \(\Delta\) 收紧,两个共线因子的收益被"拉到一起",估计更稳定,其余因子几乎不受影响。
更多量化联系
- Levenberg–Marquardt:非线性最小二乘 \(\min\frac12\|r(x)\|^2\) 的 LM 方法每步解 \((J^TJ+\lambda I)p=-J^Tr\),正是 \(B=J^TJ\) 的信赖域子问题(本册第 10 章)。期权模型校准(Heston、SABR 拟合隐含波动率曲面)普遍用 LM 或
scipy.optimize.least_squares(method='trf'),理解 \(\lambda\) 与半径的对应关系有助于调参。 - 非凸目标:风险平价的某些表述、含非线性冲击成本的执行优化,Hessian 可能不定。信赖域方法不需要修正 Hessian 就能处理负曲率,且(用近似精确解时)能避开鞍点。SciPy 中
minimize(method='trust-ncg' / 'trust-exact' / 'trust-krylov')分别对应本章的 Steihaug、Moré–Sorensen 精确解法和其 Lanczos 版本。 - 尺度:资产或因子量级差别大时,椭球信赖域(对角缩放)等价于先对变量标准化。
本章小结
信赖域方法在当前点周围的区域内极小化二次模型,用实际下降与预测下降之比 \(\rho_k\) 判断模型好坏、自适应调整区域大小。全局收敛只要求每步达到 Cauchy 下降的固定比例,所以子问题可以近似求解:dogleg 适合 \(B\) 正定,二维子空间可以处理不定的 \(B\),CG–Steihaug 适合大规模问题(它的第一步就是 Cauchy 点,迭代范数单调增)。子问题的全局解由 \((B+\lambda I)p=-g\)、互补条件和 \(B+\lambda I\) 半正定刻画,可用对 \(1/\|p(\lambda)\|\) 的牛顿法求解,"困难情形"要沿最负曲率方向补一段。\(\eta>0\) 时梯度整体趋于零;精确 Hessian 加近似精确解还能保证收敛到满足二阶必要条件的点。信赖域子问题与岭回归、Levenberg–Marquardt 是同一个数学结构。
| 概念 | 公式/要点 |
|---|---|
| 子问题 | \(\min_p f_k+\nabla f_k^Tp+\frac12p^TB_kp\),\(\Vert p\Vert \le\Delta_k\) |
| 下降比 | \(\rho_k=\dfrac{f(x_k)-f(x_k+p_k)}{m_k(0)-m_k(p_k)}\);\(<\frac14\) 缩小,\(>\frac34\) 且触边界放大 |
| Cauchy 点 | \(p^C=-\tau\frac{\Delta}{\Vert g\Vert }g\),\(\tau=\min\left(\frac{\Vert g\Vert ^3}{\Delta g^TBg},1\right)\)(曲率为正时) |
| Cauchy 下降 | \(m(0)-m(p^C)\ge\frac12\Vert g\Vert \min(\Delta,\Vert g\Vert /\Vert B\Vert )\) |
| Dogleg | 原点 → \(p^U=-\frac{g^Tg}{g^TBg}g\) → \(p^B=-B^{-1}g\) 的折线与边界交点 |
| 精确解刻画 | \((B+\lambda I)p^*=-g\),\(\lambda(\Delta-\Vert p^*\Vert )=0\),\(B+\lambda I\succeq0\),\(\lambda\ge0\) |
| \(\lambda\) 的牛顿迭代 | \(\lambda\leftarrow\lambda+\left(\frac{\Vert p\Vert }{\Vert q\Vert }\right)^2\frac{\Vert p\Vert -\Delta}{\Delta}\),\(R^TRp=-g\),\(R^Tq=p\) |
| 全局收敛 | \(\eta=0\):\(\liminf\Vert \nabla f_k\Vert =0\);\(\eta>0\):\(\lim\nabla f_k=0\) |
| 与岭回归 | \(\Vert \beta\Vert \le\Delta\ \Leftrightarrow\ (X^TX+\lambda I)\beta=X^Ty\) |
练习
基础
- (原书 4.5)验证 Cauchy 点的闭式 (4.7)(4.8)。
- 设 \(B=\mathrm{diag}(2,1)\),\(g=(4,1)^T\),\(\Delta=1\)。分别计算 Cauchy 点、\(p^U\)、\(p^B\) 和 dogleg 步,比较它们的模型值。 提示:\(p^B=(-2,-1)\),\(\|p^B\|=\sqrt5>1\);\(p^U=-\frac{17}{33}(4,1)\),\(\|p^U\|\approx2.12>1\),所以 dogleg 步就是沿负梯度走到边界,与 Cauchy 点相同。
- 说明 Algorithm 4.1 中"只有当 \(\|p_k\|=\Delta_k\) 时才放大半径"的理由。如果去掉这个条件,会有什么后果?
- (原书 4.6)用 Cauchy–Schwarz 不等式证明 \(B\) 正定时 \(\gamma=\dfrac{\|g\|^4}{(g^TBg)(g^TB^{-1}g)}\le1\),从而完成引理 4.1 的证明。 提示:\(g^Tg=(B^{1/2}g)^T(B^{-1/2}g)\)。
- (原书 4.10)证明对任意对称矩阵 \(B\),存在 \(\lambda\ge0\) 使 \(B+\lambda I\) 正定。
进阶
- (原书 4.8)证明 Algorithm 4.4 中的迭代公式 (4.27) 就是对 \(\phi_2(\lambda)=\frac1\Delta-\frac1{\|p(\lambda)\|}\) 的牛顿迭代 (4.26)。 提示:\(\frac{d}{d\lambda}\|p\|^2=-2p^T(B+\lambda I)^{-1}p=-2\|q\|^2\)。
- 构造一个 \(2\times2\) 的困难情形例子:\(B=\mathrm{diag}(-1,1)\),\(g=(0,1)^T\),\(\Delta=2\)。求子问题的全局解。 提示:\(\lambda=1\),\(p=(\pm\tau,-\frac12)\),\(\tau^2+\frac14=4\)。
- (原书 4.12)设 \(g=(-1/\epsilon,-1,-\epsilon^2)^T\),\(B=\mathrm{diag}(1/\epsilon^3,1,\epsilon^3)\),\(\Delta=0.5\)。说明精确解的模型下降为 \(\frac38+O(\epsilon)\),而二维子空间法只有 \(O(\epsilon)\)。这说明了什么?
- (原书 4.9)\(B\) 正定时,把二维子空间问题 (4.14) 化为一个关于两个系数的小规模信赖域问题,写出求解步骤。
- 在本章实战 B 中,用 5 折交叉验证在一组 \(\Delta\) 中挑选最优值,并与直接在 \(\lambda\) 上做交叉验证的结果比较,说明两种参数化的等价性。
原书推荐习题:4.2、4.3(实现 dogleg 与 CG–Steihaug,前者在 Rosenbrock 上试验半径更新规则,后者在扩展 Rosenbrock 函数上报告每步是负曲率、触边界还是满足停止准则)、4.6 与 4.7(Cauchy–Schwarz 与 dogleg/双狗腿路径的单调性)、4.8(推导 \(\lambda\) 的牛顿迭代)、4.10 与 4.12(\(B+\lambda I\) 的正定化与二维子空间法的局限)。
原书对照
| 本章内容 | 原书位置 | PDF 页码 |
|---|---|---|
| 4.1 基本思想、模型、子问题、Algorithm 4.1 | Ch.4 引言,(4.1)–(4.4),图 4.1 | PDF p.85–89 |
| 4.2.1–4.2.2 Cauchy 点及其改进 | §4.1 The Cauchy Point,Improving on the Cauchy Point | PDF p.89–91 |
| 4.2.3 Dogleg,引理 4.1 | The Dogleg Method,图 4.3 | PDF p.91–93 |
| 4.2.4 二维子空间极小化 | Two-Dimensional Subspace Minimization | PDF p.94 |
| 4.2.5 CG–Steihaug,定理 4.2 | Steihaug's Approach,Algorithm 4.3 | PDF p.95–97 |
| 4.3.1–4.3.2 精确解刻画与计算,定理 4.3,Algorithm 4.4 | §4.2 Characterizing/Calculating Nearly Exact Solutions | PDF p.97–102 |
| 4.3.3 困难情形 | The Hard Case,图 4.7 | PDF p.102–104 |
| 4.3.4 引理 4.4 与定理 4.3 的证明 | Proof of Theorem 4.3 | PDF p.104–107 |
| 4.4.1 Cauchy 下降,引理 4.5,定理 4.6 | §4.3 Reduction Obtained by the Cauchy Point | PDF p.107–109 |
| 4.4.2 定理 4.7、4.8 | Convergence to Stationary Points | PDF p.109–113 |
| 4.4.3 定理 4.9(避开鞍点) | Convergence of Algorithms Based on Nearly Exact Solutions | PDF p.113–114 |
| 4.5 尺度、非欧氏信赖域 | §4.4 Other Enhancements | PDF p.114–117 |
| 注释与参考、习题 | Notes and References,Exercises 4.1–4.12 | PDF p.117–119 |
页码换算:原书正文页码 = PDF 页码减 20(已用 PDF 页眉核对;第 1–2 章减 21,第 3–11 章减 20,第 12–16 章减 19,第 17 章至附录减 18)。