正则化与模型选择
Hook:一次「翻牌」事件
你在上海一家私募基金负责沪深300 选股策略。上周你按第 3 课的做法,用普通最小二乘(ordinary least squares, OLS)把 5 个 Barra 风格因子——估值、质量、动量、规模、低波动——回归到下一期超额收益上,得到一组 β^OLS。这周把估计窗口前移 5 个交易日重跑,价值因子载荷从 +0.18 翻成 −0.05,质量因子从 +0.04 跳到 +0.21。研究员第一反应是「数据是不是错了」。你回查原始数据:估值因子与质量因子的样本相关系数稳定在 0.72,正规方程(normal equations)里那个 X⊤X 的条件数(condition number)超过 600。结论不是 OLS 「算错了」,而是它的协方差矩阵(covariance matrix) σ2(X⊤X)−1 在共线性方向上被放大了几十倍。这一课要回答:对 OLS 做最小限度的改动,把这个方差压下来,应该怎么改?答案分两步——岭回归(ridge regression)控制方差,5 折交叉验证(5-fold cross-validation)选择控制强度。
把 ERM 加一项罚
第 1 课的经验风险最小化(empirical risk minimization, ERM)只看训练误差:
h^ERM=argh∈HminRn(h).
只要 H 容量够大,Rn(h) 总能压到 0——这就是第 2 课的过拟合现象。正则化 ERM 在目标函数上多加一项复杂度惩罚 Ω(h):
h^λ=argh∈Hmin{Rn(h)+λΩ(h)}.
λ≥0 是杠杆:λ=0 退化回 ERM,λ→∞ 把所有 h 压成 Ω(h) 的最小元(线性类下就是 β=0)。把第 2 课的偏差-方差曲线翻过来看,调大 λ 就是在曲线上从右往左挪,用更大的偏差换更小的方差。
岭回归:闭式解、SVD 与贝叶斯
在线性类 h(x)=β⊤x 上取 Ω(β)=21∥β∥22,正则化目标变成
β^ridge(λ)=argβmin{2n1∥y−Xβ∥22+2λ∥β∥22}.
对 β 求导并置零,得到
β^ridge(λ)=(X⊤X+λI)−1X⊤y.
和第 3 课的正规方程唯一差别是 Hessian 上加了 λI。这一项保证了 X⊤X+λI 的最小特征值不低于 λ,条件数立刻被夹住——你上周看到的载荷翻牌就此止血。
SVD 视角。对 X=UΣV⊤ 做奇异值分解(singular value decomposition, SVD)后展开:
β^ridge(λ)=j∑σj2+λσjuj⊤yvj.
对比 OLS 形式 ∑jσj−1uj⊤yvj,每个奇异方向上的系数都被乘了一个收缩因子 σj2/(σj2+λ)。σj 小的方向——也就是共线性方向——收缩最猛。第 3 课结尾那项 σj−2 的方差爆炸,被替换成了有限值。下面这个滑块拖动 λ,观察单个方向上的收缩因子如何随 λ 由 1 衰到 0:
Formula Explorer
sigma^2 / (sigma^2 + lambda)
贝叶斯视角。把噪声写成 y∣β∼N(Xβ,σ2I),给 β 一个独立同分布的高斯先验 β∼N(0,τ2I)。对数后验等于
logp(β∣y)=−2σ21∥y−Xβ∥22−2τ21∥β∥22+const.
整体乘以 −2σ2,最大化后验就等价于最小化 ∥y−Xβ∥22+(σ2/τ2)∥β∥22——也就是岭回归在 λ=σ2/τ2 处的解。所以岭回归就是高斯先验下的极大似然估计(maximum likelihood estimation, MLE)推广 MAP(maximum a posteriori),λ 越大等价于先验越尖、越相信 β 接近 0。
Lasso:L1 罚与稀疏性
把 Ω(β)=∥β∥1 代入,得到 Lasso 目标:
β^lasso(λ)=argβmin{2n1∥y−Xβ∥22+λ∥β∥1}.
L1 球的「角」落在坐标轴上,λ 足够大时最优解的若干分量会被精确推到 0——这是岭做不到的稀疏性(sparsity),等价于自动变量选择。代价是 ∥⋅∥1 不可导,闭式解不存在。求解算法(坐标下降、软阈值算子、近端梯度)由 2.5.2 模块 regularized-least-squares-ridge-and-lasso 专门处理,这里只用它的结论。
用 5 折交叉验证选 λ
λ 是超参数(hyperparameter),不能用训练集上的 ERM 来选——训练误差关于 λ 单调递增,最小值永远落在 λ=0。标准做法是 5 折交叉验证:
- 把 n 条样本随机打乱后划成 5 等分 F1,…,F5。
- 在候选网格 Λ={λ1,…,λm} 中遍历。对每个 λ:
- 对 k=1,…,5,用 ⋃j=kFj 训练 β^ridge(λ),在 Fk 上算均方误差 MSEk(λ)。
- 求平均 CV(λ)=51∑k=15MSEk(λ),并记标准误 SE(λ)。
- 选 λ⋆=argminλCV(λ)。
回到沪深300 5 因子样本,2024 年初的一次跑结果可能是这样:
| λ | CV 均方误差 | 标准误 SE |
|---|
| 0.001 | 1.048 | 0.062 |
| 0.01 | 1.012 | 0.058 |
| 0.1 | 0.987 ←λ⋆ | 0.054 |
| 1.0 | 1.005 ←λ1se | 0.051 |
| 10.0 | 1.063 | 0.049 |
λ⋆=0.1,但 λ=1.0 的 CV 误差只比最优高 0.018,远小于一个标准误(0.054)。
一倍标准误规则(one-standard-error rule):在 CV(λ) 与最小值之差不超过 SE(λ⋆) 的候选里,挑出最简单(λ 最大)的那个。在线性回归里「最简单」等于压缩最猛,于是选 λ1se=1.0。代价是 CV 误差略升,回报是样本外因子载荷更稳定——你下周再前移 5 个交易日重跑,载荷的翻牌幅度会从 ±0.2 量级压回 ±0.03 量级,对应的信息比率(information ratio, IR)也更稳健。
把它和单次 train / validation / test 拆分对比:后者的方差完全取决于那一个验证集——在 1000 条样本、5 因子这种小样本规模下,单次拆分的 λ 选择波动远大于 5 折平均。信息准则 AIC、BIC、Mallows Cp 走另一条路——用模型自由度的解析估计替代留出集,便宜但只在模型族正确时无偏;本课点名,推导留给 2.2.2。
练习
Exercise
给定
X=111111.010.991,y=(2,2.05,1.97,2)⊤.
- 用 β^ridge(λ)=(X⊤X+λI)−1X⊤y 计算 λ=0,0.1,1 三处的 β^。
- 比较三个 β^ 第二分量的绝对值。λ 增大时方差量级如何变化?
- 一个 3 点 CV 曲线给出 CV(λ)=(0.50,0.48,0.51)、SE(λ)=(0.04,0.04,0.04),对应 λ=(0.1,1,10)。用一倍标准误规则挑出 λ。
提示
先把
X⊤X 写出来:第二列几乎全是 1,
X⊤X 接近秩 1,OLS 时几乎不可逆——这是给你看「岭一加
λI 病就好」的玩具版。手算
2×2 逆矩阵即可。
提示
一倍标准误规则两步:先找
λ⋆=argminCV;再在
CV(λ)≤CV(λ⋆)+SE(λ⋆) 的候选里挑
λ 最大者。这里阈值是
0.48+0.04=0.52。
通往下一课
到这里,你能在一个 5 因子沪深300 回归上跑完整套「岭 + 5 折 CV + 一倍标准误」流程,并把结论讲给基金经理听。下一课把目标从「下期连续超额收益」换成「下期是否跑赢基准」——一个 0/1 标签。同样的正则化 ERM + CV 框架原样保留,但平方损失被换成交叉熵(cross-entropy),预测空间从 R 收到 [0,1] 上的概率单纯形。换损失之后岭与 Lasso 直接搬过来,就成了带 L2 / L1 正则化的 Logistic 回归——这是模块 2.6.1 的最后一站。