量化交易中文教材

第 13b 章 贝叶斯正则化与有效参数个数

对应原书第 13 章后半部分(13.5–13.7 节及 P13.1–P13.3、P13.5)。第 13a 章留下两个问题:正则化比 \(\alpha/\beta\) 怎么选?提前停止和正则化看起来完全不同,为什么效果相近?本章用两个工具回答它们。

第一个工具是贝叶斯框架(MacKay [MacK92]):把权值看成随机变量,误差平方和对应高斯噪声的似然,权值平方和对应零均值高斯先验,正则化解就是最大后验估计;再往上一层,用"证据"最大化从数据中估计 \(\alpha\) 和 \(\beta\),不需要验证集。第二个工具是线性分析([SjLj94]):在二次误差曲面上,提前停止和正则化的解可以写成同一形式,迭代次数相当于正则化强度的倒数;两者都只沿 Hessian 的大特征值方向"用掉"参数,由此得到有效参数个数 \(\gamma\) 的精确定义。

量化读者会发现,本章的数学与岭回归、收缩估计、Black–Litterman 模型完全同构。贝叶斯推断的一般理论见第 03 册第 11 章。

学习目标

读完本章,你应当能够:

  1. 用贝叶斯法则计算后验概率,理解先验在其中的决定性作用(医学检测例)。
  2. 推导第一层贝叶斯框架:高斯噪声似然 + 高斯先验 ⇒ 最大后验估计 = 最小化 \(\beta E_D+\alpha E_W\);说明 \(\alpha,\beta\) 与权值先验方差、噪声方差的关系。
  3. 推导第二层贝叶斯框架:用拉普拉斯近似计算证据,得到 \(\alpha=\gamma/(2E_W)\)、\(\beta=(N-\gamma)/(2E_D)\)。
  4. 执行贝叶斯正则化算法 GNBR,并解释训练后得到的 \(\gamma\) 的含义。
  5. 在二次误差曲面上推导提前停止与正则化的近似等价关系 \(\alpha k\approx1/(2\rho)\)。
  6. 用 Hessian 特征值写出有效参数个数 \(\gamma=\sum_i\beta\lambda_i/(\beta\lambda_i+2\alpha)\),并计算具体例子。
  7. 把这些结论用于量化:预期收益的收缩估计、因子模型的贝叶斯岭回归与模型复杂度评估。

读前导读

这一章在解决什么问题。 上一章留下两个实际问题:正则化强度 \(\alpha/\beta\) 到底取多少?为什么提前停止和正则化效果差不多?本章给出两个答案。

第一个答案来自贝叶斯统计。你在 CFA 里学过贝叶斯公式,大概用来算"给定某信号,公司违约的条件概率"。本章把它用在模型参数上:先给权值一个先验("权值大概是接近 0 的小数"),再用数据更新成后验。结果是:后验最可能的权值,恰好就是上一章正则化目标函数的最优解。这让 \(\alpha\) 和 \(\beta\) 有了明确含义:\(\beta\) 对应噪声有多大,\(\alpha\) 对应你对"权值应该很小"有多大把握。更进一步,可以让数据自己"投票"决定 \(\alpha,\beta\),不需要切出验证集——这对样本短的金融数据很珍贵。如果你熟悉 Black–Litterman,会发现它是同一个结构:均衡收益是先验,投资者观点是数据,后验是两者按精度(方差的倒数)加权的平均。

第二个答案来自线性代数:在二次误差曲面上,把权值按 Hessian 的特征向量方向拆开,提前停止和正则化都是"信息多的方向先学、信息少的方向压着不动"。由此得到有效参数个数 \(\gamma\):一个 40 个因子的模型,数据可能只支持 7 个方向,\(\gamma\approx7\)。

需要先想起来的数学。

  • 正态密度与取对数。 一维 \(N(\mu,\sigma^2)\) 密度 \(\dfrac{1}{\sqrt{2\pi\sigma^2}}\exp\big(-\dfrac{(x-\mu)^2}{2\sigma^2}\big)\)。独立样本的联合密度是各密度的乘积,取对数后乘积变成求和、指数消失,最大化对数似然就等于最小化平方和。例:\(\sigma^2=1\) 时 \(-\log\) 密度 \(=\tfrac12(x-\mu)^2+\) 常数。见 第 00 册第 07 章 概率中的分析工具。
  • 高斯积分。 \(\displaystyle\int_{-\infty}^{\infty}e^{-hx^2/2}dx=\sqrt{2\pi/h}\)。多维版本 \(\displaystyle\int e^{-\frac12\mathbf{x}^T\mathbf{H}\mathbf{x}}d\mathbf{x}=(2\pi)^{n/2}(\det\mathbf{H})^{-1/2}\)。这是"拉普拉斯近似"唯一用到的积分。见 第 00 册第 03 章 积分 和 第 00 册第 05 章 多元微积分与优化(重积分部分)。
  • 二阶泰勒展开。 在极小点 \(\mathbf{x}^*\) 附近 \(F(\mathbf{x})\approx F(\mathbf{x}^*)+\tfrac12(\mathbf{x}-\mathbf{x}^*)^T\mathbf{H}(\mathbf{x}-\mathbf{x}^*)\),一阶项因梯度为零而消失。与"价格变动 ≈ 久期项 + 凸性项"同理,只是这里一阶项为零。见 第 00 册第 02 章 导数与泰勒展开 和第 05 章。
  • 特征值、迹、行列式。 对称矩阵的迹(对角元之和)= 特征值之和;行列式 = 特征值之积;逆矩阵的特征值是原特征值的倒数;\(\mathbf{A}+c\mathbf{I}\) 的特征值是 \(\lambda_i+c\)。例:\(\mathbf{A}=\mathrm{diag}(1,3)\),迹 4、行列式 3,\(\mathbf{A}^{-1}\) 的迹 \(1+1/3\)。见 第 00 册第 06 章 线性代数速成。
  • 对数的求导。 \(\dfrac{d}{d\alpha}\log(c+2\alpha)=\dfrac{2}{c+2\alpha}\)(链式法则:外层 \(\log\) 的导数是 \(1/u\),内层 \(u=c+2\alpha\) 的导数是 2)。13b.3.3 节的推导反复用到它。见第 02 章。

怎么读这一章。 必读 13b.1、13b.2(第一层贝叶斯:正则化 = 最大后验,以及 P13.2 的收缩估计)、13b.6(有效参数个数)和 13b.7 量化实战。13b.3 的证据推导较长,第一次可以只记住结论式 13.23 和"直观检查"那一段(噪声方差估计 = 残差平方和 / (样本数 − 有效参数数))。13b.5 提前停止与正则化的等价性,建议先读 13b.5.3 的结论和 13b.5.4 的图形描述,再回头看推导。


13b.1 贝叶斯法则

Thomas Bayes 是 18 世纪英国的长老会牧师和业余数学家,他最重要的工作在身后才发表。对随机事件 \(A\)、\(B\),

\[P(A|B)=\frac{P(B|A)P(A)}{P(B)} \tag{13.5}\]

\(P(A)\) 是先验概率(prior),即知道 \(B\) 之前对 \(A\) 的认识;\(P(A|B)\) 是后验概率(posterior),即得知 \(B\) 之后对 \(A\) 的认识;\(P(B|A)\) 通常由描述 \(A\) 与 \(B\) 关系的系统知识给出;\(P(B)\) 是 \(B\) 的边际概率,起归一化作用。

医学检测例。 人群患病率 1%;检测对患者有 80% 的概率给出阳性;对健康人有 10% 的概率误报阳性。一个人检测阳性,他真正患病的概率是多少?多数人(包括许多医生)会猜很高。令 \(A\) = 患病、\(B\) = 阳性:

\[P(B)=P(B|A)P(A)+P(B|\bar A)P(\bar A)=0.8\times0.01+0.1\times0.99=0.107\]
\[P(A|B)=\frac{0.8\times0.01}{0.107}=0.0748\]

阳性者只有 7.5% 的概率真正患病。关键在于先验:患病的先验几率只有 1/100。若先验高得多,后验也会显著提高。先验必须准确反映先验知识。

量化研究中这个例子几乎原样出现:"回测显著"就是阳性,"策略真的有效"就是患病。如果真正有效的策略在所有被测试的想法中只占很小比例,那么一个回测显著的策略真正有效的概率远低于直觉——这是第 03 册第 10b、11 章讨论的核心。

贝叶斯方法的优点是可以通过先验注入先验知识。对网络训练,先验知识是"被逼近的函数是平滑的",即权值不应太大(第 13a 章图 13.5);诀窍是把这一知识写成合适的先验分布。


13b.2 第一层:权值的最大后验估计

13b.2.1 框架

把网络的全部权值和偏置 \(\mathbf{x}\) 看成随机变量,选择在给定数据下后验概率最大的权值:

\[P(\mathbf{x}|D,\alpha,\beta,M)=\frac{P(D|\mathbf{x},\beta,M)\,P(\mathbf{x}|\alpha,M)}{P(D|\alpha,\beta,M)} \tag{13.10}\]

\(D\) 是训练数据,\(\alpha,\beta\) 是两个密度函数的参数,\(M\) 是所选的模型(网络结构)。

似然函数 \(P(D|\mathbf{x},\beta,M)\):给定权值时数据出现的概率密度。若式 13.2 中的噪声独立、服从高斯分布,

\[P(D|\mathbf{x},\beta,M)=\frac{1}{Z_D(\beta)}\exp(-\beta E_D),\qquad \beta=\frac{1}{2\sigma^2_\varepsilon},\qquad Z_D(\beta)=(2\pi\sigma^2_\varepsilon)^{N/2}=(\pi/\beta)^{N/2} \tag{13.11–13.12}\]

推导拆解:式 13.11 从正态密度直接得来。每个误差分量 \(e_i=t_i-a_i\) 独立服从 \(N(0,\sigma^2_\varepsilon)\),联合密度是 \(N\) 个密度相乘:

\[\prod_{i=1}^N\frac{1}{\sqrt{2\pi\sigma^2_\varepsilon}}\exp\Big(-\frac{e_i^2}{2\sigma^2_\varepsilon}\Big)=\frac{1}{(2\pi\sigma^2_\varepsilon)^{N/2}}\exp\Big(-\frac{1}{2\sigma^2_\varepsilon}\sum_ie_i^2\Big)\]
(指数相乘 = 指数里相加。)把 \(\dfrac{1}{2\sigma^2_\varepsilon}\) 记为 \(\beta\),\(\sum e_i^2\) 记为 \(E_D\),就是 \(\exp(-\beta E_D)/Z_D\)。先验式 13.13 是同一个计算,把 \(e_i\) 换成权值 \(x_i\)、\(\sigma_\varepsilon\) 换成 \(\sigma_w\)。\(\beta\) 和 \(\alpha\) 其实就是"精度"(方差倒数)的一半。

\(\sigma^2_\varepsilon\) 是噪声每个分量的方差,\(E_D\) 是误差平方和,\(N=Q\times S^M\)。极大似然法选使似然最大的权值,在高斯情形下等价于最小化 \(E_D\)。所以通常的平方误差训练,就是"假设噪声高斯"下的极大似然估计,记为 \(\mathbf{x}^{ML}\)。

先验密度 \(P(\mathbf{x}|\alpha,M)\):收集数据之前对权值的认识。若认为权值是以零为中心的小数,取零均值高斯先验:

\[P(\mathbf{x}|\alpha,M)=\frac{1}{Z_W(\alpha)}\exp(-\alpha E_W),\qquad \alpha=\frac{1}{2\sigma^2_w},\qquad Z_W(\alpha)=(\pi/\alpha)^{n/2} \tag{13.13–13.14}\]

\(\sigma^2_w\) 是每个权值的先验方差,\(E_W=\sum_ix_i^2\),\(n\) 是权值和偏置的总数。

证据 \(P(D|\alpha,\beta,M)\):归一化项,与 \(\mathbf{x}\) 无关。求最大后验权值时不必管它,但估计 \(\alpha,\beta\) 时它是主角。

代入得后验

\[P(\mathbf{x}|D,\alpha,\beta,M)=\frac{\frac{1}{Z_W(\alpha)Z_D(\beta)}\exp\big(-(\beta E_D+\alpha E_W)\big)}{\text{归一化因子}}=\frac{1}{Z_F(\alpha,\beta)}\exp(-F(\mathbf{x})) \tag{13.15}\]

\(F(\mathbf{x})=\beta E_D+\alpha E_W\) 正是第 13a 章的正则化指标。最大化后验密度等价于最小化正则化性能指标。 正则化可以由"噪声高斯 + 权值高斯先验"的贝叶斯假设推出来,其解称为最可能(most probable)权值 \(\mathbf{x}^{MP}\),即最大后验(MAP)估计。

推导拆解:关键一步是"指数相乘 = 指数相加":\(e^{-\beta E_D}\cdot e^{-\alpha E_W}=e^{-(\beta E_D+\alpha E_W)}\)。\(\exp(-F)\) 是 \(F\) 的单调递减函数,所以让后验最大,就是让 \(F\) 最小;与 \(\mathbf{x}\) 无关的常数 \(Z_W,Z_D\) 和分母不影响最优点的位置。换一种更常用的说法:对后验取负对数,\(-\log(\text{后验})=F(\mathbf{x})+\text{常数}\),"负对数似然 + 负对数先验 = 数据拟合项 + 惩罚项"。

金融直觉:这就是 Black–Litterman 的结构。均衡收益是先验(\(E_W\) 项,以 0 或均衡值为中心),投资者观点是数据(\(E_D\) 项),两项的权重是各自的精度。观点越可靠(\(\beta\) 越大),后验越贴近观点;对均衡越有信心(\(\alpha\) 越大),后验越贴近均衡。

13b.2.2 \(\alpha\) 与 \(\beta\) 的意义

  • \(\beta=1/(2\sigma^2_\varepsilon)\) 与测量噪声方差成反比。噪声越大,\(\beta\) 越小,正则化比 \(\alpha/\beta\) 越大,迫使权值变小、网络函数更平滑——噪声大时就该多平均。
  • \(\alpha=1/(2\sigma^2_w)\) 与权值的先验方差成反比。先验方差大表示我们对权值很没把握、它可能很大,于是 \(\alpha\) 小、\(\alpha/\beta\) 小,允许网络函数有更多变化。

例(P13.2)——信号加噪声。 观测 \(t_i=x+\varepsilon_i\),\(i=1,\dots,Q\),\(\varepsilon_i\) 独立、零均值、方差 \(\sigma^2\) 的高斯噪声。

似然 \(P(D|x)=\prod_if(t_i|x)=\dfrac{1}{Z(\beta)}\exp(-\beta E_D)\),\(E_D=\sum_i(t_i-x)^2\)。令 \(dE_D/dx=-2(\sum_it_i-Qx)=0\):

\[x^{ML}=\frac1Q\sum_{i=1}^Qt_i\quad\text{(样本均值)}\]

加上先验 \(x\sim N(0,\sigma_x^2)\),即 \(\alpha=1/(2\sigma_x^2)\)、\(E_W=x^2\),最小化 \(\beta\sum_i(t_i-x)^2+\alpha x^2\):\(-2\beta(\sum_it_i-Qx)+2\alpha x=0\),

\[x^{MP}=\frac{\beta\sum_{i=1}^Qt_i}{\beta Q+\alpha}\]

\(\alpha\to0\)(先验方差无穷大)时 \(x^{MP}\to x^{ML}\):对先验毫无把握时只信数据。原书数值:\(\sigma_x^2=2\),\(\sigma^2=1\),\(Q=1\),\(t_1=1\),即 \(\beta=0.5\)、\(\alpha=0.25\),\(x^{MP}=0.5/0.75\approx0.667\),\(x^{ML}=1\)。测量方差小于先验方差,所以 \(x^{MP}\) 更靠近 \(x^{ML}\) 而不是先验均值 0。这就是收缩估计(shrinkage):

\[x^{MP}=\underbrace{\frac{\beta Q}{\beta Q+\alpha}}_{\text{收缩系数}}\,x^{ML}+\frac{\alpha}{\beta Q+\alpha}\cdot0\]

例(P13.1)——极大似然不一定是"平均"。 随机变量在 \([0,x]\) 上均匀分布,取 \(Q\) 个独立样本 \(t_i\)。似然为 \(P(D|x)=1/x^Q\)(当 \(x\ge\max t_i\)),否则为 0。它在 \(x=\max(t_i)\) 处最大,所以 \(x^{ML}=\max(t_i)\)。注意这个估计有偏:它永远不超过真值。


13b.3 第二层:从数据中估计 \(\alpha\) 和 \(\beta\)

13b.3.1 证据

把 \(\alpha,\beta\) 也当作要估计的量,再用一次贝叶斯法则:

\[P(\alpha,\beta|D,M)=\frac{P(D|\alpha,\beta,M)\,P(\alpha,\beta|M)}{P(D|M)} \tag{13.16}\]

若对 \(\alpha,\beta\) 取均匀先验,最大化后验就是最大化 \(P(D|\alpha,\beta,M)\)——它正是第一层式 13.10 的分母,即证据。由式 13.10 解出它:

\[P(D|\alpha,\beta,M)=\frac{P(D|\mathbf{x},\beta,M)P(\mathbf{x}|\alpha,M)}{P(\mathbf{x}|D,\alpha,\beta,M)}=\frac{\frac{1}{Z_D(\beta)}e^{-\beta E_D}\cdot\frac{1}{Z_W(\alpha)}e^{-\alpha E_W}}{\frac{1}{Z_F(\alpha,\beta)}e^{-F(\mathbf{x})}}=\frac{Z_F(\alpha,\beta)}{Z_D(\beta)Z_W(\alpha)} \tag{13.17}\]

(指数项正好抵消,所以结果与 \(\mathbf{x}\) 无关,可以在任意 \(\mathbf{x}\) 处算。)\(Z_D,Z_W\) 已知,只需估计 \(Z_F\)。

白话解释:证据是"给定超参数 \(\alpha,\beta\),这组数据出现的概率",它对所有可能的权值做了平均:\(P(D|\alpha,\beta)=\int P(D|\mathbf{x},\beta)P(\mathbf{x}|\alpha)\,d\mathbf{x}\)。它自带奥卡姆剃刀:\(\alpha\) 太小(先验太宽),先验把概率摊在大量用不上的权值组合上,平均下来数据的概率反而低;\(\alpha\) 太大(先验太窄),权值被压得拟合不了数据,概率也低。证据在中间某处最大。用金融话说:一个可以解释任何走势的"万能"策略,对"恰好发生的这段走势"给出的概率很小,因为它把概率分散给了所有可能的走势;证据偏好"恰好够用"的模型。

式 13.17 的技巧是把贝叶斯公式倒过来用:后验 = 似然 × 先验 / 证据,所以证据 = 似然 × 先验 / 后验。三者都写成 \(\exp(\cdot)/Z\) 的形式,指数部分 \(-\beta E_D-\alpha E_W\) 与 \(-F\) 相同而抵消,只剩归一化常数。

13b.3.2 拉普拉斯近似

在极小点 \(\mathbf{x}^{MP}\) 附近目标函数近似为二次型(梯度为零):

\[F(\mathbf{x})\approx F(\mathbf{x}^{MP})+\tfrac12(\mathbf{x}-\mathbf{x}^{MP})^T\mathbf{H}^{MP}(\mathbf{x}-\mathbf{x}^{MP}) \tag{13.18}\]

\(\mathbf{H}=\beta\nabla^2E_D+\alpha\nabla^2E_W\) 是 \(F\) 的 Hessian。代入后验式 13.15,后验近似为以 \(\mathbf{x}^{MP}\) 为中心、协方差为 \((\mathbf{H}^{MP})^{-1}\) 的高斯密度。与高斯密度的标准形式

\[P(\mathbf{x})=\frac{1}{\sqrt{(2\pi)^n\,|(\mathbf{H}^{MP})^{-1}|}}\exp\big(-\tfrac12(\mathbf{x}-\mathbf{x}^{MP})^T\mathbf{H}^{MP}(\mathbf{x}-\mathbf{x}^{MP})\big)\]

对比归一化常数,得

\[Z_F(\alpha,\beta)\approx(2\pi)^{n/2}\big(\det(\mathbf{H}^{MP})^{-1}\big)^{1/2}\exp\big(-F(\mathbf{x}^{MP})\big) \tag{13.22}\]

推导拆解:\(Z_F\) 是 \(\exp(-F(\mathbf{x}))\) 对全部 \(\mathbf{x}\) 的积分(使后验积分为 1 的常数)。用一维情形看清楚每一步:

  1. 二阶泰勒展开(一阶项为零,因为 \(x^{MP}\) 是极小点):\(F(x)\approx F^{MP}+\tfrac12h(x-x^{MP})^2\),\(h=F''(x^{MP})\)。
  2. 代入:\(\int e^{-F(x)}dx\approx e^{-F^{MP}}\int e^{-h(x-x^{MP})^2/2}dx\)。
  3. 高斯积分:后一个积分等于 \(\sqrt{2\pi/h}\)(它就是方差为 \(1/h\) 的正态密度的归一化常数)。

所以 \(Z_F\approx e^{-F^{MP}}\sqrt{2\pi}\,h^{-1/2}\)。多维时 \(h\) 换成 Hessian 矩阵,\(h^{-1/2}\) 换成 \((\det\mathbf{H})^{-1/2}\),\(\sqrt{2\pi}\) 变成 \((2\pi)^{n/2}\),就是式 13.22。直观含义:\(Z_F\) ≈ 峰高 × 峰宽。曲率越大,峰越窄,\(\det\mathbf{H}\) 越大,\(Z_F\) 越小。

13b.3.3 推导最优 \(\alpha,\beta\)(P13.3)

对式 13.17 取对数,代入 \(Z_D=(\pi/\beta)^{N/2}\)、\(Z_W=(\pi/\alpha)^{n/2}\) 和式 13.22:

\[\log P(D|\alpha,\beta,M)=\frac n2\log2\pi-\frac12\log\det\mathbf{H}^{MP}-F(\mathbf{x}^{MP})-\frac N2\log\frac\pi\beta-\frac n2\log\frac\pi\alpha\]

需要 \(\log\det\mathbf{H}\) 对 \(\alpha,\beta\) 的导数。\(\nabla^2E_W=2\mathbf{I}\),记 \(\mathbf{B}=\nabla^2E_D\),则 \(\mathbf{H}=\beta\mathbf{B}+2\alpha\mathbf{I}\)。若 \(b_i\) 是 \(\mathbf{B}\) 的特征值,\(\mathbf{H}\) 的特征值为 \(\beta b_i+2\alpha\),行列式是特征值之积:

\[\frac{\partial}{\partial\alpha}\Big(\frac12\log\det\mathbf{H}\Big)=\frac12\sum_i\frac{2}{\beta b_i+2\alpha}=\mathrm{tr}(\mathbf{H}^{-1}),\qquad \frac{\partial}{\partial\beta}\Big(\frac12\log\det\mathbf{H}\Big)=\frac12\sum_i\frac{b_i}{\beta b_i+2\alpha}\]

定义

\[\gamma\equiv n-2\alpha\,\mathrm{tr}(\mathbf{H}^{-1})=\sum_i\frac{\beta b_i}{\beta b_i+2\alpha}\]

则第二个导数等于 \(\gamma/(2\beta)\)。另外,\(F(\mathbf{x}^{MP})=\beta E_D+\alpha E_W\) 对 \(\alpha\)、\(\beta\) 的导数分别为 \(E_W\)、\(E_D\)(\(\mathbf{x}^{MP}\) 随 \(\alpha,\beta\) 移动带来的隐式导数项乘以梯度,而梯度在极小点为零)。令对数证据的导数为零:

推导拆解:这几行用了三个小工具。

  1. 行列式转为求和:\(\det\mathbf{H}=\prod_i(\beta b_i+2\alpha)\),取对数后乘积变求和:\(\log\det\mathbf{H}=\sum_i\log(\beta b_i+2\alpha)\)。这样就能逐项求导,避免直接对矩阵行列式求导。(这一步假设 \(\mathbf{B}\) 的特征值 \(b_i\) 本身不随 \(\alpha,\beta\) 变化,严格说 \(\mathbf{x}^{MP}\) 移动时 \(\mathbf{B}\) 也会变,这里忽略了这一项,是 MacKay 框架的标准近似。)
  2. 对数求导:\(\dfrac{\partial}{\partial\alpha}\log(\beta b_i+2\alpha)=\dfrac{2}{\beta b_i+2\alpha}\),\(\dfrac{\partial}{\partial\beta}\log(\beta b_i+2\alpha)=\dfrac{b_i}{\beta b_i+2\alpha}\)(链式法则,内层对 \(\alpha\) 的导数是 2,对 \(\beta\) 的导数是 \(b_i\))。
  3. 包络定理:\(F(\mathbf{x}^{MP}(\alpha,\beta);\alpha,\beta)\) 对 \(\alpha\) 的全导数 = 直接偏导 \(E_W\) + \(\nabla F\cdot\partial\mathbf{x}^{MP}/\partial\alpha\)。第二项中 \(\nabla F=\mathbf{0}\)(极小点),所以只剩 \(E_W\)。这和"最优组合的效用对某个参数的导数,只需看直接效应、不必管权重的重新调整"是同一道理。

关于 \(\gamma\) 的两种写法为什么相等:\(n-2\alpha\sum_i\dfrac{1}{\beta b_i+2\alpha}=\sum_i\Big(1-\dfrac{2\alpha}{\beta b_i+2\alpha}\Big)=\sum_i\dfrac{\beta b_i}{\beta b_i+2\alpha}\),把 \(n\) 拆成 \(n\) 个 1 即可。

  • 对 \(\alpha\):\(-\mathrm{tr}(\mathbf{H}^{-1})-E_W+\dfrac{n}{2\alpha}=0\ \Rightarrow\ 2\alpha E_W=n-2\alpha\,\mathrm{tr}(\mathbf{H}^{-1})=\gamma\);
  • 对 \(\beta\):\(-\dfrac{\gamma}{2\beta}-E_D+\dfrac{N}{2\beta}=0\)。

于是

\[\boxed{\alpha^{MP}=\frac{\gamma}{2E_W(\mathbf{x}^{MP})},\qquad \beta^{MP}=\frac{N-\gamma}{2E_D(\mathbf{x}^{MP})},\qquad \gamma=n-2\alpha^{MP}\,\mathrm{tr}\big((\mathbf{H}^{MP})^{-1}\big)} \tag{13.23}\]

\(\gamma\) 称为有效参数个数(effective number of parameters),取值在 0 到 \(n\) 之间,衡量网络中有多少参数被有效地用来降低误差(13b.6 节详细解释)。

直观检查。 第二式等价于 \(\hat\sigma^2_\varepsilon=1/(2\beta)=E_D/(N-\gamma)\):噪声方差的估计是残差平方和除以"样本数减有效参数个数",与线性回归中 \(\hat\sigma^2=\mathrm{RSS}/(N-p)\) 的自由度修正完全一致。第一式等价于 \(\hat\sigma^2_w=1/(2\alpha)=E_W/\gamma\):权值的先验方差用"被有效使用的那 \(\gamma\) 个参数"的平均平方来估计。


13b.4 贝叶斯正则化算法(GNBR)

式 13.23 需要 \(F\) 在极小点的 Hessian。Foresee 与 Hagan [FoHa97] 用 Gauss–Newton 近似:用 Levenberg–Marquardt 算法找极小时,\(\mathbf{J}^T\mathbf{J}\) 现成可得(第 12 章),额外计算极少。步骤如下:

  1. 初始化:权值随机,计算 \(E_D,E_W\);令 \(\gamma=n\),用式 13.23 算出 \(\alpha,\beta\)。
  2. 用 LM 算法对 \(F(\mathbf{x})=\beta E_D+\alpha E_W\) 走一步。
  3. 用 Gauss–Newton 近似 \(\mathbf{H}=\nabla^2F\approx2\beta\mathbf{J}^T\mathbf{J}+2\alpha\mathbf{I}_n\) 计算 \(\gamma=n-2\alpha\,\mathrm{tr}(\mathbf{H}^{-1})\)。
  4. 更新 \(\alpha=\gamma/(2E_W)\),\(\beta=(N-\gamma)/(2E_D)\)。
  5. 重复 1–3 直到收敛。

每次重估 \(\alpha,\beta\),目标函数都会改变,极小点也在移动;若每一步大体朝着下一个极小点走,估计会越来越准,最终目标函数在后续迭代中不再显著变化,即收敛。使用 GNBR 时,先把训练数据映射到 \([-1,1]\) 左右的区间效果最好。

原书例。 用 GNBR 训练 1-20-1 网络(与图 13.4、13.6 同一组带噪正弦数据)。结果(图 13.7)拟合了底层函数而没有拟合噪声,效果与图 13.6 中手工选择的 \(\alpha/\beta=0.01\) 相近;训练结束时 \(\alpha/\beta=0.0137\),\(\gamma=5.2\),而网络共有 61 个权值和偏置。训练过程中(图 13.8)训练误差 \(E_D\) 不一定每步下降,\(\alpha/\beta\) 和 \(\gamma\) 的中间值没有特别意义,但最终值有意义。

解读。 有效参数约 5 个,远少于总参数 61 个,说明本来可以用小得多的网络。大网络有两个缺点:可能过拟合;计算输出更费时。GNBR 解决了前者——61 个参数的网络表现得像只有 5 个参数;后者只在响应时间要求苛刻时才重要。反过来,如果有效参数个数接近总参数个数,说明网络可能不够大,应增大网络重新训练。这给了选择网络规模的一个实用规则。


13b.5 提前停止与正则化的关系

两种方法出发点迥异,却都通过限制权值、得到有效参数更少的网络来改进泛化。下面在二次误差曲面上(单层线性网络,或任何网络在极小点附近)证明二者近似等价 [SjLj94]。

13b.5.1 提前停止的解

单层线性网络的误差是二次函数(第 10 章):

\[E_D=c+\mathbf{d}^T\mathbf{x}+\tfrac12\mathbf{x}^T\mathbf{A}\mathbf{x},\qquad \nabla E_D=\mathbf{A}\mathbf{x}+\mathbf{d},\qquad \mathbf{x}^{ML}=-\mathbf{A}^{-1}\mathbf{d} \tag{13.24–13.27}\]

(极小点也是极大似然解,故记为 \(\mathbf{x}^{ML}\)。)学习率为 \(\alpha\) 的最速下降(这里的 \(\alpha\) 是学习率,与正则化参数同名)可改写为

\[\mathbf{x}_{k+1}=\mathbf{x}_k-\alpha\mathbf{A}(\mathbf{x}_k-\mathbf{x}^{ML})=\mathbf{M}\mathbf{x}_k+[\mathbf{I}-\mathbf{M}]\mathbf{x}^{ML},\qquad \mathbf{M}=\mathbf{I}-\alpha\mathbf{A} \tag{13.28–13.29}\]

从初值 \(\mathbf{x}_0\)(通常是零附近的小随机数)递推:\(\mathbf{x}_1=\mathbf{M}\mathbf{x}_0+[\mathbf{I}-\mathbf{M}]\mathbf{x}^{ML}\),\(\mathbf{x}_2=\mathbf{M}^2\mathbf{x}_0+\mathbf{M}[\mathbf{I}-\mathbf{M}]\mathbf{x}^{ML}+[\mathbf{I}-\mathbf{M}]\mathbf{x}^{ML}=\mathbf{M}^2\mathbf{x}_0+[\mathbf{I}-\mathbf{M}^2]\mathbf{x}^{ML}\),一般地

\[\boxed{\mathbf{x}_k=\mathbf{M}^k\mathbf{x}_0+[\mathbf{I}-\mathbf{M}^k]\mathbf{x}^{ML}} \tag{13.32}\]

它说明 \(k\) 次迭代后,权值从初值向极大似然解走了多远。

推导拆解:更快的看法是换成"离终点的距离"。令 \(\mathbf{e}_k=\mathbf{x}_k-\mathbf{x}^{ML}\),式 13.28 两边减去 \(\mathbf{x}^{ML}\) 得 \(\mathbf{e}_{k+1}=(\mathbf{I}-\alpha\mathbf{A})\mathbf{e}_k=\mathbf{M}\mathbf{e}_k\),于是 \(\mathbf{e}_k=\mathbf{M}^k\mathbf{e}_0\),即 \(\mathbf{x}_k-\mathbf{x}^{ML}=\mathbf{M}^k(\mathbf{x}_0-\mathbf{x}^{ML})\),移项就是式 13.32。沿特征方向 \(i\),剩余距离每步乘以 \(1-\alpha\lambda_i\):曲率大的方向收敛快,曲率小的方向几乎不动——这就是第 10 章"记忆长度"的同一结构。

13b.5.2 正则化的解

正则化指标除以 \(\beta\) 不改变极小点:

\[F^*(\mathbf{x})=E_D+\rho E_W,\qquad \rho=\frac\alpha\beta,\qquad E_W=(\mathbf{x}-\mathbf{x}_0)^T(\mathbf{x}-\mathbf{x}_0) \tag{13.34–13.35}\]

(标称值 \(\mathbf{x}_0\) 通常取零向量。)令梯度为零:\(\mathbf{A}(\mathbf{x}^{MP}-\mathbf{x}^{ML})+2\rho(\mathbf{x}^{MP}-\mathbf{x}_0)=\mathbf{0}\)。把 \(\mathbf{x}^{MP}-\mathbf{x}_0\) 写成 \((\mathbf{x}^{MP}-\mathbf{x}^{ML})+(\mathbf{x}^{ML}-\mathbf{x}_0)\),整理:

\[(\mathbf{A}+2\rho\mathbf{I})(\mathbf{x}^{MP}-\mathbf{x}^{ML})=2\rho(\mathbf{x}_0-\mathbf{x}^{ML})\ \Rightarrow\ \mathbf{x}^{MP}-\mathbf{x}^{ML}=\mathbf{M}_\rho(\mathbf{x}_0-\mathbf{x}^{ML}),\quad \mathbf{M}_\rho=2\rho(\mathbf{A}+2\rho\mathbf{I})^{-1}\]
\[\boxed{\mathbf{x}^{MP}=\mathbf{M}_\rho\mathbf{x}_0+[\mathbf{I}-\mathbf{M}_\rho]\mathbf{x}^{ML}} \tag{13.43}\]

13b.5.3 两者的联系

式 13.32 与 13.43 形式完全相同:两种方法的解都是初值与极大似然解的"矩阵加权平均",只是权重矩阵不同——提前停止用 \(\mathbf{M}^k=(\mathbf{I}-\alpha\mathbf{A})^k\),正则化用 \(\mathbf{M}_\rho=2\rho(\mathbf{A}+2\rho\mathbf{I})^{-1}\)。两个矩阵都与 \(\mathbf{A}\) 有相同的特征向量,特征值分别为

\[\mathrm{eig}(\mathbf{M}^k)=(1-\alpha\lambda_i)^k,\qquad \mathrm{eig}(\mathbf{M}_\rho)=\frac{2\rho}{\lambda_i+2\rho} \tag{13.44–13.45}\]

令二者相等并取对数:\(-\log\big(1+\frac{\lambda_i}{2\rho}\big)=k\log(1-\alpha\lambda_i)\)。两边在 \(\lambda_i=0\) 处都为 0;若对 \(\lambda_i\) 的导数也相等则近似恒等:

\[\frac{1}{2\rho}\cdot\frac{1}{1+\lambda_i/(2\rho)}=\frac{k\alpha}{1-\alpha\lambda_i}\quad\Rightarrow\quad \alpha k=\frac{1}{2\rho}\cdot\frac{1-\alpha\lambda_i}{1+\lambda_i/(2\rho)} \tag{13.48–13.49}\]

若 \(\alpha\lambda_i\) 很小(慢而稳定的学习)且 \(\lambda_i/(2\rho)\) 很小,

\[\boxed{\alpha k\cong\frac{1}{2\rho}} \tag{13.50}\]

提前停止近似等价于正则化:学习率乘迭代次数,相当于正则化参数的倒数。 这与直觉一致——多迭代或少正则化都可能导致过拟合。这也解释了第 13a 章实验中两种方法效果相近的原因。

推导拆解:有一条更短的路到式 13.50,只用一阶泰勒展开 \(\log(1+u)\approx u\)(\(u\) 小时)。对正则化:\(\log\dfrac{2\rho}{\lambda_i+2\rho}=-\log\Big(1+\dfrac{\lambda_i}{2\rho}\Big)\approx-\dfrac{\lambda_i}{2\rho}\)。对提前停止:\(\log(1-\alpha\lambda_i)^k=k\log(1-\alpha\lambda_i)\approx-k\alpha\lambda_i\)。两者相等,约掉 \(\lambda_i\) 就得到 \(\alpha k=1/(2\rho)\),而且与 \(i\) 无关——所以一个 \(k\) 能同时对应所有方向。两个近似成立的条件正是原文说的 \(\alpha\lambda_i\) 小、\(\lambda_i/(2\rho)\) 小。前者不满足时,提前停止在大特征值方向已经走完了,正则化还没有;13b.7.2 的数值输出展示了这种偏离。(数学工具见 第 00 册第 02 章 的泰勒展开与 第 00 册第 04 章 级数与收敛 的对数展开。)

13b.5.4 例:两个权值,一个"有效"参数

单层线性网络、无偏置,\(\{\mathbf{p}_1=[1,1]^T,t_1=1\}\) 概率 0.75,\(\{\mathbf{p}_2=[-1,1]^T,t_2=-1\}\) 概率 0.25。由第 10 章的公式:

\[c=1,\quad \mathbf{h}=0.75[1,1]^T-0.25[-1,1]^T=[1,0.5]^T,\quad \mathbf{d}=-2\mathbf{h}=[-2,-1]^T,\quad \mathbf{A}=2\mathbf{R}=\begin{bmatrix}2&1\\1&2\end{bmatrix}\]

\(\mathbf{x}^{ML}=\mathbf{R}^{-1}\mathbf{h}=[1,0]^T\)。Hessian 的特征值:\(\lambda_1=1\)(\(\mathbf{v}_1=[1,-1]^T\)),\(\lambda_2=3\)(\(\mathbf{v}_2=[1,1]^T\))。正则化指标的 Hessian 为 \(\mathbf{A}+2\rho\mathbf{I}\)。

原书图 13.12 画出 \(\rho\) 从 \(\infty\) 减到 0 时 \(\mathbf{x}^{MP}\) 的轨迹(从 \(\mathbf{0}\) 走到 \(\mathbf{x}^{ML}\)),图 13.13 画出从零附近出发的最速下降轨迹——提前停止的解就落在这条轨迹上。两条曲线非常接近:迭代很少相当于 \(\rho\) 很大,迭代增加相当于 \(\rho\) 减小。

两条轨迹都先沿 \(\mathbf{v}_2\) 走。\(\lambda_2>\lambda_1\),误差在 \(\mathbf{v}_2\) 方向曲率更大,同样的权值变化在这个方向上降低误差最多,所以最速下降一开始几乎平行于 \(\mathbf{v}_2\);正则化中 \(\rho\) 从大减小时,权值也是先沿 \(\mathbf{v}_2\) 移动。只有在 \(\mathbf{v}_2\) 方向已经显著降低误差之后,才开始沿 \(\mathbf{v}_1\) 移动。两个特征值差别越大,这一点越明显。极端情形 \(\lambda_1=0\) 时,根本不需要沿 \(\mathbf{v}_1\) 移动——网络虽有两个权值,实际只用了一个"参数"(两个权值的某种组合)。有效参数个数与 \(\nabla^2E_D\) 显著不为零的特征值个数有关。


13b.6 有效参数个数

把 \(\gamma=n-2\alpha\,\mathrm{tr}(\mathbf{H}^{-1})\) 用 \(\nabla^2E_D\) 的特征值 \(\lambda_i\) 表达。\(\mathbf{H}=\beta\nabla^2E_D+2\alpha\mathbf{I}\) 的特征值为 \(\beta\lambda_i+2\alpha\),迹等于特征值之和、逆矩阵的特征值取倒数:

\[\mathrm{tr}(\mathbf{H}^{-1})=\sum_{i=1}^n\frac{1}{\beta\lambda_i+2\alpha} \tag{13.53}\]
\[\boxed{\gamma=n-2\alpha\sum_{i=1}^n\frac{1}{\beta\lambda_i+2\alpha}=\sum_{i=1}^n\frac{\beta\lambda_i}{\beta\lambda_i+2\alpha}=\sum_{i=1}^n\gamma_i,\qquad 0\le\gamma_i\le1} \tag{13.54–13.56}\]

每个特征方向贡献 \(\gamma_i\in[0,1]\):特征值(曲率)远大于 \(2\alpha/\beta\) 的方向贡献接近 1——这个方向被数据充分约束,参数被"使用"了;特征值远小于 \(2\alpha/\beta\) 的方向贡献接近 0——数据几乎不约束它,参数被先验压在零附近。所以:所有特征值都很大时 \(\gamma=n\);部分特征值很小时,\(\gamma\) 约等于大特征值的个数。大特征值意味着大曲率,性能指标沿这些方向变化快,它们是优化性能的"有效方向"。

金融直觉:\(\gamma_i=\dfrac{\beta\lambda_i}{\beta\lambda_i+2\alpha}\) 是一个"信任权重",形式和 P13.2 的收缩系数 \(\dfrac{\beta Q}{\beta Q+\alpha}\) 一样:数据精度 /(数据精度 + 先验精度)。对线性因子模型,\(\nabla^2E_D=2X^TX\),它的特征向量就是因子的主成分方向,特征值反映该主成分在样本中的方差(信息量)。市场因子、规模因子这类方差大的主成分,数据把它们的系数估得很准,\(\gamma_i\approx1\);几十个高度共线的因子之间那些细微的差异方向,方差极小,数据几乎没有信息,\(\gamma_i\approx0\),系数被压向 0。\(\gamma\) 把这些权重加起来,就是"数据真正能告诉你的独立信息方向的个数"。

数值例:\(\beta=1\),\(2\alpha=1\),特征值 \(\{100,10,1,0.1,0.01\}\),则 \(\gamma_i\approx\{0.99,0.91,0.5,0.09,0.01\}\),\(\gamma\approx2.5\):5 个参数里大约用了两个半。

与统计学的联系。 对线性模型,\(\gamma\) 正是岭回归的有效自由度:设计矩阵奇异值为 \(d_j\)、岭参数为 \(\lambda\) 时 \(\mathrm{df}(\lambda)=\sum_jd_j^2/(d_j^2+\lambda)\),与式 13.56 逐项对应(\(\beta\lambda_i\leftrightarrow d_j^2\),\(2\alpha\leftrightarrow\lambda\))。它可以代替参数个数用在 AIC 一类的信息准则中。

例(P13.5)。 对 13b.5.4 节的例子取 \(\rho=\alpha/\beta=1\):

\[\gamma=\sum_i\frac{\lambda_i}{\lambda_i+2\rho}=\frac{1}{1+2}+\frac{3}{3+2}=\frac13+\frac35=\frac{14}{15}\]

两个参数中大约用了一个。被使用的"参数"不是 \(w_{1,1}\) 或 \(w_{1,2}\) 本身,而是二者沿 \(\mathbf{v}_2=[1,1]^T\) 的组合(两个权值改变相同的量)——这是最大特征值方向,沿它移动平方误差下降最多。


13b.7 量化实战

13b.7.1 本章在量化中的位置

  • 正则化即收缩。 P13.2 的 \(x^{MP}=\frac{\beta Q}{\beta Q+\alpha}x^{ML}\) 就是预期收益的收缩估计:收益的噪声方差大(\(\beta\) 小)、样本少(\(Q\) 小)时,样本均值应大幅向先验(零或截面均值)收缩。直接把历史平均收益代入均值–方差优化会严重过拟合,原因就在这里。James–Stein 估计、协方差矩阵的 Ledoit–Wolf 收缩、以市场均衡收益为先验、以投资者观点为数据的 Black–Litterman 模型,都是同一数学结构(第 03 册第 11 章有 Black–Litterman 的推导)。
  • 证据最大化 = 不用验证集选超参数。 金融数据少,再切出验证集代价很大;贝叶斯正则化用训练数据本身确定 \(\alpha/\beta\),对短样本特别有价值。sklearn 的 BayesianRidge 实现的正是 MacKay 的这套更新公式。
  • 有效参数个数衡量真实复杂度。 一个用了 40 个因子的模型,若 \(\gamma\approx7\),说明数据只支持约 7 个方向的信息——其余因子要么高度共线、要么没有信号。这对评估模型是否过于复杂、比较不同规模的模型、计算调整后的信息准则都很有用。
  • 提前停止 = 正则化:训练收益预测网络时,"训练多少轮"和"正则化多强"是同一个旋钮的两种拧法,不必同时大幅调整。

13b.7.2 代码一:线性例与 GNBR

第一部分在 13b.5.4 节的线性例上比较提前停止轨迹(学习率 0.01)与按 \(\rho=1/(2\alpha k)\) 换算的正则化解,并验证 P13.5。第二部分从零实现 GNBR:用 1-20-1 网络(tansig 隐层)拟合 21 个带噪声的 \(\sin(\pi p)\) 样本(噪声标准差 0.15),与不加正则化的 LM 训练对比。

import numpy as np

# ---------- 1. 线性例(13-23 页):提前停止轨迹 vs 正则化轨迹 ----------
A = np.array([[2., 1.], [1., 2.]]); d = np.array([-2., -1.])
x_ml = -np.linalg.solve(A, d)
lam = np.linalg.eigvalsh(A)
print("x_ML =", x_ml, " Hessian 特征值 =", lam)
lr = 0.01
x = np.zeros(2)
for k in range(1, 201):
    x = x - lr * (A @ x + d)                               # 最速下降 (13.26)
    if k in (5, 25, 50, 100, 200):
        rho = 1 / (2 * lr * k)                             # alpha*k ≈ 1/(2 rho)  (13.50)
        x_mp = np.linalg.solve(A + 2 * rho * np.eye(2), A @ x_ml)   # (13.43),x0=0
        print(f"k={k:3d}: 提前停止 x_k={np.round(x, 3)}  对应 rho={rho:6.2f} 的正则化解 {np.round(x_mp, 3)}")
rho = 1.0
print("P13.5 有效参数个数 gamma =", sum(l / (l + 2 * rho) for l in lam), "(14/15 =", 14/15, ")")

# ---------- 2. GNBR:贝叶斯正则化训练 1-20-1 网络 ----------
rng = np.random.default_rng(5)
p = np.linspace(-1, 1, 21); t = np.sin(np.pi * p) + rng.normal(0, 0.15, p.size)
pt = np.linspace(-1, 1, 201); gt = np.sin(np.pi * pt)    # 真实函数(实际中不可得)
S1 = 20; n = 3 * S1 + 1; N = p.size                      # n = 61 个权值和偏置

def unpack(x): return x[:S1, None], x[S1:2*S1, None], x[2*S1:3*S1][None, :], x[-1]
def net(x, p):
    W1, b1, W2, b2 = unpack(x); a1 = np.tanh(W1 @ p[None, :] + b1)
    return a1, (W2 @ a1 + b2).ravel()
def jac(x):                                              # Marquardt 敏感度:J = de/dx
    W1, b1, W2, b2 = unpack(x); a1, _ = net(x, p)
    S2 = -np.ones((1, N)); S1m = (1 - a1**2) * (W2.T @ S2)
    return np.column_stack([(S1m * p).T, S1m.T, (S2 * a1).T, S2.T])

def train(x, bayes, iters=500):
    alpha, beta, mu = 0.0, 1.0, 0.005
    def Fobj(x, a, b):
        e = t - net(x, p)[1]; return b * e @ e + a * x @ x
    if bayes:                                             # 第 0 步:gamma = n
        e = t - net(x, p)[1]; gamma = n
        alpha, beta = gamma / (2 * x @ x), (N - gamma) / (2 * e @ e)
    for it in range(iters):
        e = t - net(x, p)[1]; J = jac(x); F = Fobj(x, alpha, beta)
        g = beta * J.T @ e + alpha * x                    # 梯度的一半
        H = beta * J.T @ J + alpha * np.eye(n)            # Gauss-Newton Hessian 的一半
        while mu < 1e10:                                  # 第 1 步:一次 LM
            dx = -np.linalg.solve(H + mu * np.eye(n), g)
            if Fobj(x + dx, alpha, beta) < F: x = x + dx; mu /= 10; break
            mu *= 10
        if bayes:                                         # 第 2、3 步:更新 gamma、alpha、beta
            e = t - net(x, p)[1]; J = jac(x)
            Hfull = 2 * beta * J.T @ J + 2 * alpha * np.eye(n)
            gamma = n - 2 * alpha * np.trace(np.linalg.inv(Hfull))
            alpha, beta = gamma / (2 * x @ x), (N - gamma) / (2 * e @ e)
    out = dict(x=x, train_mse=np.mean((t - net(x, p)[1])**2),
               true_mse=np.mean((gt - net(x, pt)[1])**2))
    if bayes: out.update(ratio=alpha / beta, gamma=gamma)
    return out

x0 = np.random.default_rng(0).normal(0, 0.5, n)
plain = train(x0.copy(), bayes=False)
bayes = train(x0.copy(), bayes=True)
print(f"无正则 LM : 训练 MSE {plain['train_mse']:.4f}, 与真实函数的 MSE {plain['true_mse']:.4f}")
print(f"GNBR      : 训练 MSE {bayes['train_mse']:.4f}, 与真实函数的 MSE {bayes['true_mse']:.4f}, "
      f"alpha/beta={bayes['ratio']:.4f}, gamma={bayes['gamma']:.1f} / {n}")
sig2 = N * bayes['train_mse'] / (N - bayes['gamma'])     # 1/(2beta) = E_D/(N-gamma)
print(f"噪声方差估计 1/(2beta) = {sig2:.4f}(真值 0.15^2 = 0.0225)")

输出:

x_ML = [ 1. -0.]  Hessian 特征值 = [1. 3.]
k=  5: 提前停止 x_k=[0.095 0.046]  对应 rho= 10.00 的正则化解 [0.089 0.041]
k= 25: 提前停止 x_k=[0.378 0.155]  对应 rho=  2.00 的正则化解 [0.314 0.114]
k= 50: 提前停止 x_k=[0.588 0.193]  对应 rho=  1.00 的正则化解 [0.467 0.133]
k=100: 提前停止 x_k=[0.793 0.159]  对应 rho=  0.50 的正则化解 [0.625 0.125]
k=200: 提前停止 x_k=[0.932 0.066]  对应 rho=  0.25 的正则化解 [0.762 0.095]
P13.5 有效参数个数 gamma = 0.9333333333333333 (14/15 = 0.9333333333333333 )
无正则 LM : 训练 MSE 0.0000, 与真实函数的 MSE 0.0241
GNBR      : 训练 MSE 0.0158, 与真实函数的 MSE 0.0068, alpha/beta=0.0056, gamma=5.6 / 61
噪声方差估计 1/(2beta) = 0.0215(真值 0.15^2 = 0.0225)

解读。

  1. \(\alpha k\approx1/(2\rho)\) 在早期很准,后期逐渐偏离。 \(k=5\)(\(\rho=10\))时两个解几乎相同;\(k=50\)(\(\rho=1\))时提前停止已经比对应的正则化解走得更远。这正是式 13.49 的近似条件:要求 \(\lambda_i/(2\rho)\) 小,而 \(\rho=1\) 时 \(\lambda_2/(2\rho)=1.5\) 已经不小。两条轨迹的形状始终相似(都先沿 \(\mathbf{v}_2=[1,1]^T\)、再拐向 \(\mathbf{v}_1\)),只是"刻度"的换算不再是简单的反比。原书 E13.14 的结论"\(\rho=1\)、学习率 0.01 时约等于 50 次迭代"应理解为数量级上的对应。
  2. GNBR 自动找到了合适的复杂度。 不加正则化时,61 个参数的网络把 21 个带噪点拟合得分毫不差(训练误差为 0),偏离真实函数的 MSE 为 0.024——比噪声方差还大。GNBR 的训练误差 0.016 接近噪声水平,与真实函数的 MSE 只有 0.0068,好了 3.5 倍。最终 \(\gamma=5.6\)(原书例为 5.2),\(\alpha/\beta=0.0056\)(原书 0.0137;数据不同,数量级相同)。
  3. 它还顺便估计了噪声。 \(1/(2\beta)=E_D/(N-\gamma)=0.0215\),与真实噪声方差 0.0225 非常接近,自由度修正 \(N-\gamma\) 功不可没。

13b.7.3 代码二:因子模型的贝叶斯岭回归

模拟 30 年月度数据,40 个候选因子由 5 个潜在主题驱动、彼此高度相关,只有前 4 个因子真正有预测力,收益噪声远大于信号。用 MacKay 的证据框架(线性模型的 Hessian 是精确的,不需要 Gauss–Newton 近似)估计系数和超参数,并与 sklearn 的 BayesianRidge 和 OLS 对照。最后 20 年数据作样本外。

import numpy as np
from sklearn.linear_model import BayesianRidge
rng = np.random.default_rng(11)

# 40 个高度相关的候选因子(5 个潜在主题 + 特质部分),只有少数真正有预测力
T, K = 360, 40                                         # 30 年月度数据
theme = rng.normal(size=(T + 240, 5))
L = rng.normal(size=(5, K))
X = theme @ L + 0.7 * rng.normal(size=(T + 240, K))
X = (X - X[:T].mean(0)) / X[:T].std(0)                 # 只用训练期统计量标准化
w_true = np.zeros(K); w_true[:4] = [0.30, -0.20, 0.15, 0.10]
y = X @ w_true + rng.normal(0, 2.0, T + 240)           # 下月超额收益(%)
Xtr, ytr, Xte, yte = X[:T], y[:T], X[T:], y[T:]
ym = ytr.mean(); yc = ytr - ym

# MacKay 证据框架(原书 13.23),线性模型的 Hessian 是精确的,不需要 Gauss-Newton 近似
def bayes_reg(X, y, iters=200):
    N, n = X.shape
    lam_D = np.linalg.eigvalsh(2 * X.T @ X)             # nabla^2 E_D 的特征值
    alpha, beta = 1.0, 1.0
    for _ in range(iters):
        H = 2 * beta * X.T @ X + 2 * alpha * np.eye(n)  # (13.52)
        w = np.linalg.solve(H, 2 * beta * X.T @ y)      # x^MP
        gamma = np.sum(beta * lam_D / (beta * lam_D + 2 * alpha))   # (13.55)
        E_D, E_W = np.sum((y - X @ w)**2), w @ w
        alpha, beta = gamma / (2 * E_W), (N - gamma) / (2 * E_D)    # (13.23)
    return w, alpha, beta, gamma

w_b, a, b, g = bayes_reg(Xtr, yc)
w_ols = np.linalg.lstsq(Xtr, yc, rcond=None)[0]
sk = BayesianRidge(fit_intercept=False, tol=1e-10, max_iter=1000).fit(Xtr, yc)

def r2(w): return 1 - np.sum((yte - ym - Xte @ w)**2) / np.sum((yte - ym)**2)
print(f"自写证据框架: alpha/beta = {a/b:.2f}, 有效参数 gamma = {g:.1f} / {K}")
print(f"sklearn     : lambda_/alpha_ = {sk.lambda_/sk.alpha_:.2f}  (两者定义的比值相同)")
print(f"系数差异 max|w_mine - w_sklearn| = {np.abs(w_b - sk.coef_).max():.1e}")
print(f"OOS R2: OLS {r2(w_ols)*100:.2f}%   贝叶斯正则 {r2(w_b)*100:.2f}%   真实系数 {r2(w_true)*100:.2f}%")
print(f"系数估计误差 |w-w_true|: OLS {np.linalg.norm(w_ols-w_true):.3f}  贝叶斯 {np.linalg.norm(w_b-w_true):.3f}")

输出:

自写证据框架: alpha/beta = 538.98, 有效参数 gamma = 7.3 / 40
sklearn     : lambda_/alpha_ = 538.96  (两者定义的比值相同)
系数差异 max|w_mine - w_sklearn| = 2.1e-06
OOS R2: OLS -3.01%   贝叶斯正则 4.91%   真实系数 7.15%
系数估计误差 |w-w_true|: OLS 1.879  贝叶斯 0.359

解读。

  1. 与 sklearn 一致。 sklearn 的 alpha_ 是噪声精度 \(1/\sigma^2_\varepsilon\)、lambda_ 是权值精度 \(1/\sigma^2_w\),所以 lambda_/alpha_ \(=\sigma^2_\varepsilon/\sigma^2_w\),正好等于原书的 \(\alpha/\beta\)(两者都带因子 \(\tfrac12\),比值中消去)。比值和系数都与自写实现吻合到 \(10^{-6}\),说明 sklearn 的 BayesianRidge 就是本章的第二层贝叶斯框架。
  2. OLS 在样本外亏钱,贝叶斯正则挣钱。 360 个样本估计 40 个高度相关的系数,OLS 的系数误差(1.88)是真系数本身大小(约 0.4)的好几倍,样本外 \(R^2=-3\%\)。贝叶斯正则把系数误差降到 0.36,样本外 \(R^2=4.9\%\),达到理论上限 7.2% 的三分之二以上——而且没有用任何验证集。
  3. \(\gamma=7.3\) 说明数据只支持约 7 个方向。 40 个因子由 5 个主题驱动,再加上少量特质方向上的信号,数据能有效约束的方向就是这么多。若把模型复杂度报告为"40 个因子",会严重高估它的自由度;用 \(\gamma\) 计算的 \(\hat\sigma^2=E_D/(N-\gamma)\) 和信息准则才是诚实的。

本章小结

贝叶斯法则说明先验的决定性作用。把权值当作随机变量,高斯噪声下的似然对应误差平方和 \(E_D\),零均值高斯先验对应权值平方和 \(E_W\),于是最大后验估计就是最小化正则化指标 \(\beta E_D+\alpha E_W\),其中 \(\beta=1/(2\sigma^2_\varepsilon)\)、\(\alpha=1/(2\sigma^2_w)\):噪声越大越该平滑,先验越没把握越该放松。第二层用证据最大化估计 \(\alpha,\beta\),借助拉普拉斯近似得到 \(\alpha=\gamma/(2E_W)\)、\(\beta=(N-\gamma)/(2E_D)\),其中 \(\gamma=n-2\alpha\,\mathrm{tr}(\mathbf{H}^{-1})\) 是有效参数个数;GNBR 把它与 LM 结合,用现成的 \(\mathbf{J}^T\mathbf{J}\) 近似 Hessian,交替更新权值与超参数,无需验证集。在二次误差曲面上,提前停止与正则化的解都是初值与极大似然解的矩阵加权平均,近似满足 \(\alpha k\approx1/(2\rho)\);两者都先沿 Hessian 大特征值方向移动,有效参数个数 \(\gamma=\sum_i\beta\lambda_i/(\beta\lambda_i+2\alpha)\) 只计入被数据充分约束的方向,与岭回归的有效自由度相同。在量化中,这就是收缩估计的数学,也给出了评估模型真实复杂度的工具。

概念 公式 / 要点
贝叶斯法则 \(P(A\mid B)=P(B\mid A)P(A)/P(B)\)
似然(高斯噪声) \(P(D\mid\mathbf{x})\propto\exp(-\beta E_D)\),\(\beta=1/(2\sigma^2_\varepsilon)\)
先验(高斯) \(P(\mathbf{x})\propto\exp(-\alpha E_W)\),\(\alpha=1/(2\sigma^2_w)\)
后验 \(\propto\exp(-F)\),\(F=\beta E_D+\alpha E_W\);MAP = 正则化解
收缩估计(P13.2) \(x^{MP}=\beta\sum t_i/(\beta Q+\alpha)\)
证据 \(P(D\mid\alpha,\beta)=Z_F/(Z_DZ_W)\),\(Z_F\approx(2\pi)^{n/2}\det(\mathbf{H})^{-1/2}e^{-F(\mathbf{x}^{MP})}\)
超参数更新 \(\alpha=\gamma/(2E_W)\),\(\beta=(N-\gamma)/(2E_D)\)
有效参数个数 \(\gamma=n-2\alpha\,\mathrm{tr}(\mathbf{H}^{-1})=\sum_i\beta\lambda_i/(\beta\lambda_i+2\alpha)\)
GNBR 的 Hessian \(\mathbf{H}\approx2\beta\mathbf{J}^T\mathbf{J}+2\alpha\mathbf{I}\)
提前停止解 \(\mathbf{x}_k=\mathbf{M}^k\mathbf{x}_0+(\mathbf{I}-\mathbf{M}^k)\mathbf{x}^{ML}\),\(\mathbf{M}=\mathbf{I}-\alpha\mathbf{A}\)
正则化解 \(\mathbf{x}^{MP}=\mathbf{M}_\rho\mathbf{x}_0+(\mathbf{I}-\mathbf{M}_\rho)\mathbf{x}^{ML}\),\(\mathbf{M}_\rho=2\rho(\mathbf{A}+2\rho\mathbf{I})^{-1}\)
等价关系 \(\alpha k\approx1/(2\rho)\)

练习

基础

  1. 医学检测例中,若人群患病率从 1% 提高到 10%,检测阳性者真正患病的概率是多少? 提示: \(P(B)=0.8(0.1)+0.1(0.9)=0.17\),\(P(A|B)=0.08/0.17\approx0.47\)。
  2. P13.2 中若有 \(Q=4\) 个观测,均值为 1,\(\sigma^2=1\),\(\sigma_x^2=2\),求 \(x^{MP}\)。与 \(Q=1\) 时比较,说明样本量对收缩程度的影响。 提示: \(\beta=0.5\),\(\alpha=0.25\),\(x^{MP}=0.5\times4/(0.5\times4+0.25)=2/2.25\approx0.889\)。样本越多,越接近样本均值。
  3. 对 13b.5.4 节的例子,分别计算 \(\rho\to\infty\)、\(\rho=1\)、\(\rho\to0\) 时的有效参数个数(原书 E13.12–E13.14 的一部分)。 提示: \(\rho\to\infty\):\(\gamma\to0\);\(\rho=1\):\(14/15\);\(\rho\to0\):\(\gamma\to2\)。
  4. 抛一枚不均匀的硬币 10 次,正面出现 \(t\) 次。求正面概率 \(x\) 的极大似然估计;若先验密度为 \(p(x)=12x^2(1-x)\),求最大后验估计(原书 E13.10)。 提示: \(x^{ML}=t/10\);后验 \(\propto x^{t+2}(1-x)^{11-t}\),众数 \(x^{MP}=(t+2)/13\)。先验相当于额外看到了 2 次正面、1 次反面,把估计拉向 \(2/3\)。这正是估计交易信号胜率时常用的 Beta 先验修正。

进阶

  1. 观测 \(t_i\) 服从 \(f(t|x)=e^{-(t-x)}\),\(t\ge x\)(原书 E13.6 一类)。求 \(x\) 的极大似然估计;若再加上先验 \(f(x)=e^{-x}\)(\(x\ge0\)),最大后验估计是什么? 提示: 似然 \(\propto e^{Qx}\)(当 \(x\le\min t_i\)),单调增,\(x^{ML}=\min t_i\);乘以先验后 \(\propto e^{(Q-1)x}\),\(Q>1\) 时仍在 \(x=\min t_i\) 处最大,\(x^{MP}=x^{ML}\)。
  2. 拉普拉斯先验 \(f(x)=\tfrac12e^{-|x|}\) 加高斯噪声(原书 E13.9 一类),写出 MAP 估计要最小化的目标函数,指出它与 LASSO 的关系。 提示: \(\beta\sum_i(t_i-x)^2+|x|\),即 L1 正则化;与 L2 不同,它可能把估计精确压到 0(软阈值)。
  3. 在 13b.7.2 节的 GNBR 代码中,把隐层神经元从 20 改为 3、5、50,记录最终的 \(\gamma\) 与偏离真实函数的 MSE。\(\gamma\) 是否稳定在某个值附近?什么时候 \(\gamma\) 接近 \(n\)? 提示: 网络足够大以后 \(\gamma\) 基本稳定(由数据决定,而非网络规模);隐层只有 3 个时 \(n=10\),\(\gamma\) 可能接近 \(n\),提示网络偏小。
  4. 在 13b.7.3 节中,把训练样本从 360 改为 120 和 1200,观察 \(\gamma\)、\(\alpha/\beta\) 与 OLS、贝叶斯正则的样本外 \(R^2\) 如何变化,并解释。 提示: 样本越少,\(\gamma\) 越小、收缩越强,贝叶斯相对 OLS 的优势越大;样本很多时两者趋于一致,\(\gamma\) 上升。
  5. 由式 13.49 出发,对 \(\lambda_1=1,\lambda_2=3\)、学习率 0.01,分别求两个特征方向上"精确等价"的 \(\rho\) 与迭代次数 \(k\) 的关系(令 \((1-\alpha\lambda_i)^k=2\rho/(\lambda_i+2\rho)\) 解出 \(\rho\)),说明为什么一个 \(k\) 对应不了单一的 \(\rho\)。 提示: \(\rho_i(k)=\dfrac{\lambda_i(1-\alpha\lambda_i)^k}{2[1-(1-\alpha\lambda_i)^k]}\);\(k=50\) 时 \(\rho_1\approx0.77\),\(\rho_2\approx0.42\),均不等于 \(1/(2\alpha k)=1\)。\(k\) 越小,两者越接近 \(1/(2\alpha k)\)。

原书推荐习题: P13.2、E13.8(信号加噪声的 ML 与 MAP,理解收缩估计的最佳入门题);P13.3(亲手推导第二层贝叶斯的 \(\alpha,\beta\) 更新式);P13.5、E13.12–E13.14、E13.17(计算有效参数个数,验证 \(\alpha k\approx1/(2\rho)\));E13.10(Beta–二项共轭的 ML 与 MAP,可直接用于交易信号胜率估计);E13.5–E13.9(各种似然与先验下的估计)。

原书对照

本章小节 原书章节 PDF 页码
13b.1 贝叶斯法则、医学检测例 13 Bayesian Analysis p.477–479
13b.2–13b.4 第一层、第二层贝叶斯框架与 GNBR 算法 13 Bayesian Regularization p.479–486
13b.5 提前停止与正则化的关系 13 Relationship Between Early Stopping and Regularization p.486–494
13b.6 有效参数个数 13 Effective Number of Parameters p.495
小结 13 Summary of Results(后半) p.496–498
P13.1–P13.3、P13.5 13 Solved Problems p.499–510
结语与延伸阅读 13 Epilogue / Further Reading p.511–513
习题 E13.5–E13.14、E13.17 13 Exercises p.514–519