在日常调参、跑模型的时候,你是否曾有过这样的疑问:
- 为什么数据量越大,模型效果通常越好?
- 到底多少数据才够用?
- 为什么模型太简单学不会,太复杂又过拟合?
这些问题的答案,隐藏在计算学习理论(Computational Learning Theory)中。今天我们不推导繁琐的数学证明,而是用直觉去拆解机器学习理论的三大基石:PAC学习框架、无限假设空间(VC维)以及偏差-方差分解。
01. PAC 学习框架:给“学习”下个定义
在机器学习中,我们希望模型学到的规律是“绝对正确”的。但现实很残酷:
- 我们只有有限的样本(无法覆盖所有情况)。
- 数据可能存在噪声。
因此,Leslie Valiant 提出了 PAC (Probably Approximately Correct,概率近似正确) 框架。这是机器学习理论的开山之作。
什么是 PAC?
它的核心哲学是:我不要求你学会 100% 正确的规律(因为做不到),我只要求你“很大概率”学到一个“差不多正确”的规律。
这里引入两个关键参数:
- $\epsilon$(Epsilon,误差参数):表示“差不多正确”。即模型的泛化误差需小于 $\epsilon$。
- $\delta$(Delta,置信度参数):表示“很大概率”。即上述情况发生的概率至少是 $1-\delta$。
PAC 学习的直觉定义:
如果一个算法,需要 $m$ 个样本,就能以 $1-\delta$ 的概率,训练出一个泛化误差小于 $\epsilon$ 的模型,且 $m$ 是关于 $1/\epsilon$ 和 $1/\delta$ 的多项式函数,那么这个问题就是“PAC 可学习”的。
样本复杂度公式
对于一个有限的假设空间 $H$(比如一共只有 1000 种可能的模型供你挑选),要满足 PAC 学习,所需的最小样本量 $m$ 满足以下边界:
这个公式告诉了我们三件事(直觉解读):
- $\epsilon$ 越小(要求越精准):分母越小,需要的样本量 $m$ 越大。
- $\delta$ 越小(要求越稳):需要的样本量 $m$ 越大。
- $|H|$ 越大(模型越复杂):如果你在一亿个模型里挑一个最好的,比在十个模型里挑一个最好的,需要更多的数据来排除错误答案。
02. 无限假设空间:VC 维的魔法
上面的公式有一个致命Bug:很多模型的假设空间是无限的。
比如最简单的线性回归 $y = wx + b$,参数 $w$ 和 $b$ 是实数,有无穷多种组合。那 $|H| = \infty$,根据公式我们需要无穷多的样本?这显然与事实不符。
为了解决这个问题,Vapnik 和 Chervonenkis 提出了 VC 维 (Vapnik-Chervonenkis Dimension)。
什么是“打散” (Shattering)?
在讨论 VC 维之前,先理解“打散”。如果对于 $N$ 个数据点,无论它们的标签怎么随机组合(比如全是正类、全是负类、或是间隔着来),你的模型都能把它们完全正确地分类,我们就说你的模型能打散这 $N$ 个点。
VC 维的定义
VC 维就是模型能够“打散”的最大样本数量。
- 直觉例子:
- 二维平面上的直线(线性分类器):
- 它可以打散 3 个点(无论这3个点怎么标记,都能画一条线分开)。
- 但它无法打散 4 个点(比如 XOR 问题,对角线为同类,直线切不开)。
- 所以,二维线性分类器的 VC 维是 3。
- 二维平面上的直线(线性分类器):
用 VC 维替换 $|H|$
引入 VC 维(记为 $d_{VC}$)后,样本复杂度的边界变成了类似这样:
核心启示:
决定模型学习难度的,不是参数的个数,也不是假设空间的大小,而是模型的“表达能力”(VC 维)。
- 模型越复杂(VC 维越高),为了防止过拟合,所需要的训练数据量就必须呈线性增长。
- 这也是“奥卡姆剃刀”的数学背书:在误差相近的情况下,选择 VC 维低(更简单)的模型,泛化能力往往更好。
03. 偏差-方差分解:误差的来源
有了 PAC 和 VC 维,我们知道了样本量和模型复杂度的关系。但在实际应用中,我们更关心的是:当模型表现不好时,是哪里出了问题?
这就引出了经典的 偏差-方差分解 (Bias-Variance Decomposition)。
我们把模型的期望泛化误差拆解为三部分:
1. 偏差 (Bias):因为“太傻”
- 定义:模型预测值的期望与真实值之间的差异。
- 直觉:这是由错误的假设造成的。
- 例如:数据明明是二次曲线分布,你非要用一条直线去拟合。无论给多少数据,直线都拟合不好。
- 现象:欠拟合 (Underfitting)。在训练集和测试集上误差都很大。
- 与假设空间的关系:假设空间 $H$ 太小(VC 维太低),不包含真实模型。
2. 方差 (Variance):因为“太敏感”
- 定义:同样大小的不同训练集训练出的模型,预测结果的变化幅度。
- 直觉:这是由模型对微小波动过度反应造成的。
- 例如:你用一个高阶多项式去拟合几个点,它为了穿过每一个点而剧烈震荡。如果换一批数据点,画出来的曲线就完全不同了。
- 现象:过拟合 (Overfitting)。训练集误差很低,测试集误差很高。
- 与假设空间的关系:假设空间 $H$ 太大(VC 维太高),包含了太多奇怪的模型。
3. 噪声 (Noise)
- 定义:数据本身固有的不可约误差(比如标签标错了,传感器精度限制)。
- 结论:这是天花板,任何模型都无法消除。
图解权衡 (The Trade-off)
我们可以想象一个坐标轴,横轴是模型复杂度,纵轴是误差:
- 随着复杂度增加,模型拟合能力变强,偏差 ($\text{Bias}^2$) 下降。
- 随着复杂度增加,模型变得不稳定,方差 (Variance) 上升。
- 总误差 (Total Error) 是两者的叠加,呈 U 型曲线。
04. 总结:连接理论与实践
将这三块拼图拼在一起,我们就能看清机器学习的本质:
- PAC 框架告诉我们,机器学习是可行的,但需要足够的数据量作为支撑,且只能保证“概率近似正确”。
- VC 维量化了模型的复杂度。在无限的假设空间中,VC 维决定了我们需要多少数据才能避免“死记硬背”(过拟合)。
- 偏差-方差分解指导了我们的调参方向:
- 误差高且训练集也差 $\rightarrow$ 偏差大 $\rightarrow$ 增加模型复杂度(加层数、增加特征)。
- 训练集好但测试集差 $\rightarrow$ 方差大 $\rightarrow$ 降低模型复杂度(正则化、降维)或 增加数据量。
理解这些理论,不会直接帮你写出代码,但当你面对那一堆乱跳的 Loss 曲线时,它们是你心中最稳的指南针。
附录:数学之美——形式化定义与推导
如果你对数学细节感兴趣,以下是PAC学习框架的严谨定义以及偏差-方差分解的完整推导过程。
A. PAC 学习框架的形式化定义
在计算学习理论中,我们通常在一个固定的概率空间内讨论问题。
1. 基本设定
- 输入空间 (Instance Space): $\mathcal{X}$ (例如所有可能的图片像素组合)。
- 标签空间 (Label Space): $\mathcal{Y}$ (例如 ${0, 1}$)。
- 概念类 (Concept Class): $\mathcal{C}$,指我们想要学习的目标函数的集合。目标概念 $c \in \mathcal{C}$ 是一个映射 $c: \mathcal{X} \to \mathcal{Y}$。
- 假设空间 (Hypothesis Space): $\mathcal{H}$,指算法能够搜索到的函数的集合。
- 数据分布 (Data Distribution): $\mathcal{D}$,是定义在 $\mathcal{X}$ 上的未知但固定的概率分布。
- 泛化误差 (Generalization Error/Risk): 假设 $h \in \mathcal{H}$ 在分布 $\mathcal{D}$ 下预测错误的概率:
2. PAC 可学习性定义
如果一个概念类 $\mathcal{C}$ 是 PAC 可学习 (PAC-learnable) 的,意味着存在一个算法 $A$ 和一个多项式函数 $poly(\cdot)$,满足以下条件:
对于任意的:
- $\epsilon > 0$ (误差参数)
- $\delta > 0$ (置信度参数)
- 分布 $\mathcal{D}$
- 目标概念 $c \in \mathcal{C}$
算法 $A$ 只要接收到 $m$ 个独立同分布 (i.i.d.) 的样本 $S = {(x_1, c(x_1)), …, (x_m, c(x_m))}$,且样本数量满足:
那么算法 $A$ 就能以至少 $1-\delta$ 的概率,输出一个假设 $h \in \mathcal{H}$,使得泛化误差满足:
B. 偏差-方差分解 (Bias-Variance Decomposition) 推导
我们要探究的是期望泛化误差的来源。为了推导方便,我们通常使用回归问题和均方误差 (MSE) 作为背景。
1. 设定
- 真实关系: $y = f(x) + \epsilon$,其中 $f(x)$ 是真实函数,$\epsilon$ 是噪声。
- 噪声属性: $E[\epsilon] = 0$,$\text{Var}(\epsilon) = \sigma^2$。
- 预测模型: $\hat{f}(x; D)$。注意,模型是基于训练集 $D$ 学习到的,而 $D$ 是随机变量(每次采样的数据集不同,学到的模型也不同)。
- 目标: 计算在测试点 $x$ 处的期望误差(对所有可能的训练集 $D$ 和噪声 $\epsilon$ 求期望)。
2. 期望误差公式
我们关注点 $x$ 的总期望误差:
3. 推导步骤
第一步:分离噪声
将 $y = f(x) + \epsilon$ 代入:
展开平方项:
由于噪声 $\epsilon$ 独立于模型 $\hat{f}$ 和 $f$,且 $E[\epsilon]=0$,交叉项为0。同时 $E[\epsilon^2] = \text{Var}(\epsilon) + E[\epsilon]^2 = \sigma^2$。
此时式子变为:
这里 $\sigma^2$ 就是 不可约误差 (Noise)。
第二步:分解模型误差
现在只关注 $E[(f(x) - \hat{f}(x; D))^2]$ 部分。
我们引入一项“期望预测值” $\bar{f}(x) = E_D[\hat{f}(x; D)]$(即所有可能模型预测的平均值)。
使用 $a - b = (a - c) + (c - b)$ 的技巧:
展开平方项:
分析各项:
项A: $(f(x) - \bar{f}(x))^2$。这里没有随机变量($f$ 是真值,$\bar{f}$ 是期望值,都是常量),所以期望可以直接去掉。
- 定义为 $\text{Bias}^2(x)$:真实值与平均预测值的差异平方。
项B: $E[(\hat{f}(x; D) - \bar{f}(x))^2]$。这是模型预测值 $\hat{f}$ 围绕其均值 $\bar{f}$ 的波动。
- 定义为 $\text{Variance}(x)$。
项C: 交叉项。注意 $f(x) - \bar{f}(x)$ 对于期望 $E_D$ 来说是常数。
因为 $\bar{f}(x) = E_D[\hat{f}(x; D)]$,所以括号内为 0。
- 项C = 0。
4. 最终结果
将结果代回 (式1):
证毕。
参考资料
- Foundations of Machine Learning, Mehryar Mohri et al.
- Learning From Data, Yaser S. Abu-Mostafa et al.
- https://avanti1980.github.io/course-ml/