Lecture 5: Bias-Variance Tradeoff. Regularization
Lecture 5: Bias-Variance Tradeoff. Regularization
概述
本讲回答机器学习最核心的问题之一:为什么模型会出错? 答案是两种根本不同的错误来源——偏差 (bias) 与方差 (variance),它们之间存在此消彼长的权衡。随后引入正则化 (Regularization) 作为控制模型复杂度、缓解高方差的系统方法(岭回归、Lasso),并给出模型选择的实用工具(交叉验证)。
核心概念与数学直觉
- 偏差-方差分解 (Bias-Variance Decomposition):设真实关系 $y = f(x) + \epsilon$($\epsilon$ 为零均值噪声,方差 $\sigma^2$),用不同训练集拟合出模型 $\hat{f}$。期望泛化误差可分解为三部分:
$\mathbb{E}\left[(y - \hat{f}(x))^2\right] = \underbrace{\sigma^2}_{\text{不可约噪声}} + \underbrace{\left(\mathbb{E}[\hat{f}(x)] - f(x)\right)^2}_{\text{Bias}^2} + \underbrace{\mathbb{E}\left[(\hat{f}(x) - \mathbb{E}[\hat{f}(x)])^2\right]}_{\text{Variance}}$- $\sigma^2$:噪声——数据本身的随机性,任何模型都无法消除(误差下界)。
- Bias²:模型系统性偏离真实函数的程度——欠拟合的来源。简单模型(如直线拟合曲线数据)偏差大。
- Variance:模型对不同训练集的敏感程度——过拟合的来源。复杂模型(如高次多项式)会“记住”训练集噪声,换一批数据预测大变。
- 直观解释:把模型估计想象成射箭。偏差=箭的平均落点偏离靶心多远(系统误差);方差=箭的落点散布多大(随机误差)。简单模型:落点集中但偏离靶心(低方差高偏差);复杂模型:落点围着靶心但极其分散(高偏差低方差——甚至打飞)。
- 权衡:模型复杂度 ↑ ⇒ 偏差 ↓ 但方差 ↑。最佳复杂度在两者交点附近(总误差最小)。这就是”tradeoff”的含义。
- 正则化 (Regularization):在代价函数中加入对参数大小的惩罚,抑制过拟合。
- 直觉:惩罚大参数 ⇒ 模型不敢“用力”拟合每个点 ⇒ 曲线更平滑 ⇒ 方差下降(代价是偏差略升)。
- 岭回归 (Ridge, $L_2$):
$J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^{n} \theta_j^2$- $\lambda \ge 0$:正则化强度。$\lambda=0$ 退化为普通最小二乘;$\lambda \to \infty$ 时 $\theta \to 0$(模型退化为常数)。
- $L_2$ 惩罚把参数收缩 (shrink) 但一般不精确置零;闭式解变为 $\theta = (X^TX + \lambda I)^{-1}X^Ty$——顺带解决了 $X^TX$ 不可逆的问题(呼应 L2)。
- Lasso ($L_1$):
$J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^{n} \|\theta_j\|$- $L_1$ 惩罚倾向于把不重要的 $\theta_j$ 精确置零 ⇒ 自动特征选择(稀疏解)。几何直觉:$L_1$ 约束是菱形(角点位于坐标轴上),最优解常落在角点 ⇒ 坐标轴上的分量归零。
- 贝叶斯视角:正则化 = 给参数加先验。$L_2$ 对应高斯先验($\theta_j \sim \mathcal{N}(0, 1/\lambda)$),$L_1$ 对应拉普拉斯先验——最大后验估计 (MAP) 即带正则的最大似然。这再次体现“损失函数来自概率假设”的课程主线。
- 模型选择 (Model Selection):
- 问题:如何选多项式阶数、$\lambda$、特征子集?——不能看训练误差(过拟合)也不能看 test 误差(泄漏)。
- 交叉验证 (Cross-Validation):
- Hold-out:train/dev/test 划分,在 dev 上选模型。
- $k$-折交叉验证 (k-fold CV):把训练集分成 $k$ 份,轮流用 $k-1$ 份训练、1 份验证,取 $k$ 次验证误差平均。$k$ 常取 5 或 10。
- 直觉:CV 是对“模型在新数据上的表现”的更可靠估计,因为它多次换用不同训练/验证组合。
- 特征选择 (Feature Selection):前向搜索(逐步加特征)、后向搜索(逐步删特征);包装法 (wrapper) 用 CV 误差作为选择标准;$L_1$ 正则化可视为嵌入式的自动特征选择。
算法伪代码与逻辑解说:k 折交叉验证 + 岭回归
伪代码
输入:
- 训练数据 (X, y)
- 候选超参数列表 lambda_list
- 折数 k
输出:
- 最优 lambda* 及其 CV 误差估计
1. 把 (X, y) 随机划分为 k 个大小相近的子集 D_1, ..., D_k
2. 对每个 lambda in lambda_list:
2.1 初始化 cv_error_sum = 0
2.2 对 i = 1..k:
2.2.1 训练集 = 除 D_i 外的所有子集; 验证集 = D_i
2.2.2 theta = 岭回归闭式解 (X_train^T X_train + lambda*I)^{-1} X_train^T y_train
2.2.3 在 D_i 上计算 MSE,累加到 cv_error_sum
2.3 记录 cv_error(lambda) = cv_error_sum / k
3. 返回使 cv_error 最小的 lambda*
【算法逻辑解说】
- Step 1 划分:$k$ 折划分保证每个样本恰好被验证一次——CV 误差是“未见数据误差”的无偏近似。
- Step 2.2.1:每折轮流留出一份作验证,避免“用自己的数据考自己”。
- Step 2.2.2:岭回归闭式解中 $\lambda I$ 保证 $X^TX + \lambda I$ 恒可逆(正定)——正则化的数学红利。
- Step 3 选择:选 CV 误差最小的 $\lambda$。注意:CV 误差是对泛化误差的估计,仍可能略微乐观(因为 $\lambda$ 的选择也“看过”验证数据),但远好于用训练误差。
- 偏差-方差诊断联动(预告 L13):若训练误差高且 CV 误差高 → 高偏差(加容量/特征);若训练误差低但 CV 误差高 → 高方差(正则化/更多数据)。
关键要点
- 泛化误差 = 噪声 + Bias² + Variance;模型复杂度是它们的旋钮。
- 偏差-方差权衡是贯穿全课程的主线:LWR 带宽、多项式阶数、$\lambda$、网络宽度都是同一个权衡的不同体现。
- $L_2$(岭)收缩但不置零;$L_1$(Lasso)产生稀疏解、做特征选择。
- 正则化有贝叶斯解释(高斯/拉普拉斯先验 → MAP 估计)。
- 模型选择必须用交叉验证,绝不看训练误差或 test 误差。
常见误区与注意事项
- 用训练误差选模型:多项式阶数越高训练误差越低(可到 0),但泛化崩溃。模型选择只认验证误差。
- 正则化时忘记缩放特征:$\lambda \sum \theta_j^2$ 对不同量纲特征惩罚不均——必须先行标准化特征。
- 对 $\theta_0$(截距)也做惩罚:通常只惩罚 $\theta_1..\theta_n$,不惩罚偏置项(否则模型无法自由平移)。
- $\lambda$ 网格过粗:$\lambda$ 跨度大(1e-6 到 1e6),应取对数刻度网格。
- 把“方差”与“噪声”混淆:噪声 $\sigma^2$ 不可消除,方差是模型对训练集的敏感度——调试时要分清错误来源(L13 的 ML Advice 详述)。
思考题
- 问题:一个 100 阶多项式拟合 10 个点,偏差和方差分别如何?
- 答案:高方差——模型能精确穿过每个训练点(训练误差≈0),但换训练集拟合结果剧烈变化,验证误差极高;偏差低(模型表达能力足以表示真实函数)。解法:降低阶数、正则化或增加数据。
- 问题:$L_1$ 与 $L_2$ 正则化在几何上为何行为不同?
- 答案:约束域不同。$L_2$ 约束 $\sum\theta_j^2 \le t$ 是球,最优解可在任意方向非零(收缩);$L_1$ 约束 $\sum\vert \theta_j\vert \le t$ 是菱形(高维是 cross-polytope),其角点位于坐标轴上,最优解常落在角点 ⇒ 对应分量恰好为 0(稀疏)。维度越高,$L_1$ 解落在角点(稀疏)的概率越大。
- 问题:为什么交叉验证误差仍可能略微乐观地估计真实泛化误差?
- 答案:因为 $\lambda$(或模型)的选择过程“看过”了所有验证数据——模型选择本身是一种学习。选择出的模型在 CV 中表现好,部分是偶然(选择偏差)。若候选模型极多、数据极少,这种乐观偏差会放大。
