第 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 章。
学习目标
读完本章,你应当能够:
- 用贝叶斯法则计算后验概率,理解先验在其中的决定性作用(医学检测例)。
- 推导第一层贝叶斯框架:高斯噪声似然 + 高斯先验 ⇒ 最大后验估计 = 最小化 \(\beta E_D+\alpha E_W\);说明 \(\alpha,\beta\) 与权值先验方差、噪声方差的关系。
- 推导第二层贝叶斯框架:用拉普拉斯近似计算证据,得到 \(\alpha=\gamma/(2E_W)\)、\(\beta=(N-\gamma)/(2E_D)\)。
- 执行贝叶斯正则化算法 GNBR,并解释训练后得到的 \(\gamma\) 的含义。
- 在二次误差曲面上推导提前停止与正则化的近似等价关系 \(\alpha k\approx1/(2\rho)\)。
- 用 Hessian 特征值写出有效参数个数 \(\gamma=\sum_i\beta\lambda_i/(\beta\lambda_i+2\alpha)\),并计算具体例子。
- 把这些结论用于量化:预期收益的收缩估计、因子模型的贝叶斯岭回归与模型复杂度评估。
读前导读
这一章在解决什么问题。 上一章留下两个实际问题:正则化强度 \(\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)\) 是先验概率(prior),即知道 \(B\) 之前对 \(A\) 的认识;\(P(A|B)\) 是后验概率(posterior),即得知 \(B\) 之后对 \(A\) 的认识;\(P(B|A)\) 通常由描述 \(A\) 与 \(B\) 关系的系统知识给出;\(P(B)\) 是 \(B\) 的边际概率,起归一化作用。
医学检测例。 人群患病率 1%;检测对患者有 80% 的概率给出阳性;对健康人有 10% 的概率误报阳性。一个人检测阳性,他真正患病的概率是多少?多数人(包括许多医生)会猜很高。令 \(A\) = 患病、\(B\) = 阳性:
阳性者只有 7.5% 的概率真正患病。关键在于先验:患病的先验几率只有 1/100。若先验高得多,后验也会显著提高。先验必须准确反映先验知识。
量化研究中这个例子几乎原样出现:"回测显著"就是阳性,"策略真的有效"就是患病。如果真正有效的策略在所有被测试的想法中只占很小比例,那么一个回测显著的策略真正有效的概率远低于直觉——这是第 03 册第 10b、11 章讨论的核心。
贝叶斯方法的优点是可以通过先验注入先验知识。对网络训练,先验知识是"被逼近的函数是平滑的",即权值不应太大(第 13a 章图 13.5);诀窍是把这一知识写成合适的先验分布。
13b.2 第一层:权值的最大后验估计
13b.2.1 框架
把网络的全部权值和偏置 \(\mathbf{x}\) 看成随机变量,选择在给定数据下后验概率最大的权值:
\(D\) 是训练数据,\(\alpha,\beta\) 是两个密度函数的参数,\(M\) 是所选的模型(网络结构)。
似然函数 \(P(D|\mathbf{x},\beta,M)\):给定权值时数据出现的概率密度。若式 13.2 中的噪声独立、服从高斯分布,
推导拆解:式 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)\):收集数据之前对权值的认识。若认为权值是以零为中心的小数,取零均值高斯先验:
\(\sigma^2_w\) 是每个权值的先验方差,\(E_W=\sum_ix_i^2\),\(n\) 是权值和偏置的总数。
证据 \(P(D|\alpha,\beta,M)\):归一化项,与 \(\mathbf{x}\) 无关。求最大后验权值时不必管它,但估计 \(\alpha,\beta\) 时它是主角。
代入得后验
\(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\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\),
\(\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):
例(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\) 也当作要估计的量,再用一次贝叶斯法则:
若对 \(\alpha,\beta\) 取均匀先验,最大化后验就是最大化 \(P(D|\alpha,\beta,M)\)——它正是第一层式 13.10 的分母,即证据。由式 13.10 解出它:
(指数项正好抵消,所以结果与 \(\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}\) 附近目标函数近似为二次型(梯度为零):
\(\mathbf{H}=\beta\nabla^2E_D+\alpha\nabla^2E_W\) 是 \(F\) 的 Hessian。代入后验式 13.15,后验近似为以 \(\mathbf{x}^{MP}\) 为中心、协方差为 \((\mathbf{H}^{MP})^{-1}\) 的高斯密度。与高斯密度的标准形式
对比归一化常数,得
推导拆解:\(Z_F\) 是 \(\exp(-F(\mathbf{x}))\) 对全部 \(\mathbf{x}\) 的积分(使后验积分为 1 的常数)。用一维情形看清楚每一步:
- 二阶泰勒展开(一阶项为零,因为 \(x^{MP}\) 是极小点):\(F(x)\approx F^{MP}+\tfrac12h(x-x^{MP})^2\),\(h=F''(x^{MP})\)。
- 代入:\(\int e^{-F(x)}dx\approx e^{-F^{MP}}\int e^{-h(x-x^{MP})^2/2}dx\)。
- 高斯积分:后一个积分等于 \(\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\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\),行列式是特征值之积:
定义
则第二个导数等于 \(\gamma/(2\beta)\)。另外,\(F(\mathbf{x}^{MP})=\beta E_D+\alpha E_W\) 对 \(\alpha\)、\(\beta\) 的导数分别为 \(E_W\)、\(E_D\)(\(\mathbf{x}^{MP}\) 随 \(\alpha,\beta\) 移动带来的隐式导数项乘以梯度,而梯度在极小点为零)。令对数证据的导数为零:
推导拆解:这几行用了三个小工具。
- 行列式转为求和:\(\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 框架的标准近似。)
- 对数求导:\(\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\))。
- 包络定理:\(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\)。
于是
\(\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 章),额外计算极少。步骤如下:
- 初始化:权值随机,计算 \(E_D,E_W\);令 \(\gamma=n\),用式 13.23 算出 \(\alpha,\beta\)。
- 用 LM 算法对 \(F(\mathbf{x})=\beta E_D+\alpha E_W\) 走一步。
- 用 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})\)。
- 更新 \(\alpha=\gamma/(2E_W)\),\(\beta=(N-\gamma)/(2E_D)\)。
- 重复 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 章):
(极小点也是极大似然解,故记为 \(\mathbf{x}^{ML}\)。)学习率为 \(\alpha\) 的最速下降(这里的 \(\alpha\) 是学习率,与正则化参数同名)可改写为
从初值 \(\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}\),一般地
它说明 \(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\) 不改变极小点:
(标称值 \(\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)\),整理:
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}\) 有相同的特征向量,特征值分别为
令二者相等并取对数:\(-\log\big(1+\frac{\lambda_i}{2\rho}\big)=k\log(1-\alpha\lambda_i)\)。两边在 \(\lambda_i=0\) 处都为 0;若对 \(\lambda_i\) 的导数也相等则近似恒等:
若 \(\alpha\lambda_i\) 很小(慢而稳定的学习)且 \(\lambda_i/(2\rho)\) 很小,
提前停止近似等价于正则化:学习率乘迭代次数,相当于正则化参数的倒数。 这与直觉一致——多迭代或少正则化都可能导致过拟合。这也解释了第 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 章的公式:
\(\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\),迹等于特征值之和、逆矩阵的特征值取倒数:
每个特征方向贡献 \(\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\):
两个参数中大约用了一个。被使用的"参数"不是 \(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)
解读。
- \(\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 次迭代"应理解为数量级上的对应。
- 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;数据不同,数量级相同)。
- 它还顺便估计了噪声。 \(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
解读。
- 与 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就是本章的第二层贝叶斯框架。 - OLS 在样本外亏钱,贝叶斯正则挣钱。 360 个样本估计 40 个高度相关的系数,OLS 的系数误差(1.88)是真系数本身大小(约 0.4)的好几倍,样本外 \(R^2=-3\%\)。贝叶斯正则把系数误差降到 0.36,样本外 \(R^2=4.9\%\),达到理论上限 7.2% 的三分之二以上——而且没有用任何验证集。
- \(\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% 提高到 10%,检测阳性者真正患病的概率是多少? 提示: \(P(B)=0.8(0.1)+0.1(0.9)=0.17\),\(P(A|B)=0.08/0.17\approx0.47\)。
- 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\)。样本越多,越接近样本均值。
- 对 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\)。
- 抛一枚不均匀的硬币 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 先验修正。
进阶
- 观测 \(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}\)。
- 拉普拉斯先验 \(f(x)=\tfrac12e^{-|x|}\) 加高斯噪声(原书 E13.9 一类),写出 MAP 估计要最小化的目标函数,指出它与 LASSO 的关系。 提示: \(\beta\sum_i(t_i-x)^2+|x|\),即 L1 正则化;与 L2 不同,它可能把估计精确压到 0(软阈值)。
- 在 13b.7.2 节的 GNBR 代码中,把隐层神经元从 20 改为 3、5、50,记录最终的 \(\gamma\) 与偏离真实函数的 MSE。\(\gamma\) 是否稳定在某个值附近?什么时候 \(\gamma\) 接近 \(n\)? 提示: 网络足够大以后 \(\gamma\) 基本稳定(由数据决定,而非网络规模);隐层只有 3 个时 \(n=10\),\(\gamma\) 可能接近 \(n\),提示网络偏小。
- 在 13b.7.3 节中,把训练样本从 360 改为 120 和 1200,观察 \(\gamma\)、\(\alpha/\beta\) 与 OLS、贝叶斯正则的样本外 \(R^2\) 如何变化,并解释。 提示: 样本越少,\(\gamma\) 越小、收缩越强,贝叶斯相对 OLS 的优势越大;样本很多时两者趋于一致,\(\gamma\) 上升。
- 由式 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 |