📑 本页目录(点开跳转)
10 · VC 维:无限假设空间怎么办
⏱ 24 分钟 | ⭐⭐ 理论的最高点
🎯 一句话
线性模型有无限个(w 是连续的),第 9 章的 ln|H| 直接失效。
VC 维是「假设空间复杂度」的正确度量——它不数模型个数,
而是数「你能制造出多少种不同的分类结果」。
🧠 一、关键转变:从"数模型"到"数行为"
❌ 数模型个数:线性分类器有无穷多个 → ln|H| = ∞ → 界失效
✅ 数【在给定数据点上的行为】:
给定 3 个点,一条直线能产生多少种不同的 (+/−) 标注方式?
→ 有限的!最多 2³ = 8 种
→ 而且直线未必能实现全部 8 种
💡 关键洞察:
无限多的模型,在【有限个点】上只能表现出【有限种】行为
这个转变是整个统计学习理论的枢纽——它把「无穷」变回了「有限」。
💥 二、打散(Shattering)
一个假设空间 H 能「打散」一组点,是指: 这组点的每一种可能的 +/− 标注方式,H 里都有模型能实现。
二维平面上的直线
2 个点:4 种标注(++, +−, −+, −−)
直线全都能实现 ✅ 能打散
3 个点(不共线):8 种标注
直线全都能实现 ✅ 能打散
● ○ ○ ●
○ ... ● ← 每种都能用直线切开
4 个点:16 种标注
❌ 至少有一种做不到!
● ○
← 对角线同类(异或布局)
○ ● 一条直线切不开
⚠️ 两个容易搞错的细节: 1. 只需要存在一组 3 个点能被打散(不是所有 3 个点——共线的 3 点就打不散) 2. 必须所有 4 个点的组合都打不散,VC 维才是 3
VC 维 = 能被打散的最大点集的大小。 二维平面上的直线:VC 维 = 3
一般结论
$$\text{d 维空间中的线性分类器(含偏置):}\quad \text{VC} = d+1$$
💡 非常直观:VC 维 ≈ 有效参数个数(d 个权重 + 1 个偏置)。 但这个直觉有个著名的反例,见下。
📏 三、几个模型的 VC 维
| 模型 | VC 维 | 备注 |
|---|---|---|
| d 维线性分类器 | d + 1 | ≈ 参数个数 |
| 区间 [a,b](一维) | 2 | 2 个参数 |
| 轴对齐矩形(二维) | 4 | 4 个参数 |
| 深度 k 的决策树 | ~O(2^k) | 随深度指数增长 |
| 1-最近邻 | ∞ ⭐ | 能记住任意标注 |
| RBF 核 SVM | ∞ ⭐ | 无穷维特征空间 |
| $\sin(\omega x)$ | ∞ ⭐⭐ | 只有 1 个参数,VC 维却无穷! |
⚠️ sin(ωx) 这个反例为什么重要
分类器:h(x) = sign(sin(ω·x)),只有一个参数 ω
通过调整频率 ω,可以让 sin 在你指定的任意点上
取任意的正负号 → 能打散任意多个点 → VC = ∞
🔑 它说明 VC 维 ≠ 参数个数。 「参数少 = 模型简单」这个直觉是错的—— 真正重要的是表达能力的丰富程度,不是参数数量。
💡 这个反例也预示了后面的问题:现代大模型有天文数字的参数, 但它们的"有效复杂度"可能远小于参数量——反过来的情况。
📐 四、VC 泛化界
用 VC 维替换 ln|H|,得到对无限假设空间也成立的界:
$$\underbrace{\text{err}_{\mathcal{D}}(h)}_{\text{真实误差}} \le \underbrace{\text{err}_{S}(h)}_{\text{训练误差}} + \underbrace{O\!\left(\sqrt{\frac{d_{VC}\log(m/d_{VC}) + \log(1/\delta)}{m}}\right)}_{\text{复杂度惩罚项}}$$
💡 人话翻译:
真实误差 ≤ 训练误差 + 一个"复杂度罚款"
罚款项的行为:
| 因素 | 影响 | 直觉 |
|---|---|---|
| d_VC 越大 | 罚款越重 | 模型越复杂,训练误差越不可信 |
| m 越大 | 罚款越轻 | 数据越多,训练误差越可信 |
| 量级 | 大致 $\sqrt{d_{VC}/m}$ ⭐ | 记住这个形状 |
🔑 这个式子回答了机器学习最根本的问题
Q:为什么训练误差低不代表泛化好?
A:因为中间隔着一个【复杂度罚款】
Q:什么时候训练误差可以信?
A:当 m >> d_VC 时,罚款项趋于 0
⭐ 经验法则:m ≥ 10 × d_VC
样本数至少是 VC 维的 10 倍,训练误差才比较可信
它也终于严格解释了过拟合和欠拟合:
过拟合 = 训练误差很低,但复杂度罚款很大 → 真实误差高
欠拟合 = 训练误差本身就高 → 罚款再小也没用
🔗 基础教程第 5 章那张 U 型曲线, 就是"训练误差下降"和"罚款上升"两条线相加的结果。
📉 五、结构风险最小化(SRM)
VC 界直接给出了一个模型选择原则:
❌ 只最小化【训练误差】 → 会选中最复杂的模型
✅ 最小化【训练误差 + 复杂度罚款】
误差 ▲
│╲ ╱ 复杂度罚款
│ ╲ ╱
│ ╲__训练误差___ ╱
│ ╲______╱ ← 两者之和的最小点 ⭐
└─────────────────────► VC 维(复杂度)
实践中怎么实现 SRM:
| 方式 | 说明 |
|---|---|
| 显式正则化 | 损失 + λ‖w‖² 里的第二项就是复杂度罚款 |
| 限制模型族 | 先试线性,不够再试树,再不够才试神经网络 |
| 早停 | 隐式限制了有效复杂度 |
| 交叉验证选模型 | 经验版的 SRM——直接测泛化而不是用界估计 |
🔗 你现在有四种方式理解正则化: 1. 第 2 章:贝叶斯先验 2. 第 8 章:故意引入偏差,换方差的大幅下降 3. 第 9 章:缩小假设空间 4. 本章:结构风险最小化里的复杂度惩罚项
四者是同一件事的四个视角。 能自由切换视角,说明你真的懂了。
⚠️ 六、VC 理论解释不了深度学习
必须诚实说明的局限:
一个现代大模型有几十亿参数 → VC 维极大
→ VC 界预测:需要天文数字的数据,否则必然过拟合
现实:它们泛化得很好 💀
→ 经典 VC 理论【无法解释】深度学习的泛化能力
一个著名的实验让这个矛盾无处可藏
把训练集的标签【完全打乱】(图片和标签毫无关系)
→ 神经网络仍然能把训练集拟合到 100% 准确率
→ 说明它的容量足以记住【任意】标注 → VC 维确实巨大
但【同一个网络】在真实标签上泛化得很好
💀 按 VC 界,容量这么大就该过拟合 —— 可它没有
当前的几种解释(都还不完备)
| 解释方向 | 大意 |
|---|---|
| 隐式正则化 | SGD 本身偏好"平坦"的解,等于自带正则 |
| 有效复杂度 ≠ 参数量 ⭐ | 训练出来的网络实际处在一个低复杂度子空间(呼应 sin(ωx) 的反面) |
| 数据的流形结构 | 真实数据在低维流形上(第 5 章),有效维度远低于名义维度 |
| 双下降 | 超参数化区间的行为和经典理论不同 |
🔑 诚实的结论:泛化理论仍是开放问题。
VC 理论在它适用的范围内是对的且深刻的(它解释了经典模型、 给出了"复杂度 ↔ 数据量 ↔ 泛化"的正确框架), 但它不是深度学习泛化的完整答案。
学它的价值是建立正确的思维框架,不是拿它去算深度模型该用多少数据。
🔬 七、实用价值:VC 理论今天还能给你什么
即使它算不准深度模型,这四条仍然有用:
① 复杂度和数据量必须匹配 —— m ≥ 10·d_VC 的直觉
② 训练误差和真实误差之间【必有间隙】—— 别信训练分数
③ 模型选择要考虑复杂度罚款 —— 而不是只挑训练误差最低的
④ "参数少 ≠ 简单" —— 用 sin(ωx) 提醒自己别用参数量判断复杂度
✅ 检查点
- VC 维在数什么?为什么不能直接数模型个数?
- 什么叫"打散"?二维直线的 VC 维是多少,为什么是 3 不是 4?
sin(ωx)只有一个参数,VC 维却是无穷——这说明什么?- VC 泛化界的三项是什么?罚款项大致是什么量级?经验法则是什么?
- 四种理解正则化的方式分别在哪一章?
- 随机标签实验说明了什么矛盾?
- VC 理论今天还有什么实用价值?
👀 答案
- 数「在有限个点上能产生多少种不同的分类行为」。因为线性模型等有无穷多个,
ln|H|会发散,但它们在有限点上的行为是有限的。 - 一组点的每种 +/− 标注方式,假设空间里都有模型能实现。VC=3 因为:存在一组 3 个不共线的点能被打散(8 种标注全实现),而任意 4 个点都存在做不到的标注(异或布局)。
- VC 维 ≠ 参数个数。真正决定复杂度的是表达能力的丰富程度,不是参数数量。"参数少就简单"是错觉。
- 真实误差 ≤ 训练误差 + 复杂度罚款。罚款大致 √(d_VC/m)。经验法则 m ≥ 10·d_VC。
- 第 2 章(贝叶斯先验)、第 8 章(故意引入偏差换方差)、第 9 章(缩小假设空间)、第 10 章(SRM 的复杂度罚款)。四者说的是同一件事。
- 把标签完全打乱后网络仍能拟合到 100%,说明容量足以记住任意标注(VC 维巨大);但同一网络在真实标签上泛化很好。按 VC 界它该过拟合,可它没有。
- ①复杂度与数据量要匹配 ②训练误差和真实误差必有间隙,别信训练分数 ③模型选择要算复杂度罚款 ④"参数少≠简单"。
🛑 可以停在这里
⚡ 走神救援
无限假设空间时
ln|H|失效 → ⭐VC 维不数模型个数,改数「在有限个点上能制造出多少种不同的分类行为」:无限多的模型在有限点上只能有有限种行为——这一步把"无穷"变回"有限",是统计学习理论的枢纽。打散=这组点的每种 +/− 标注方式 H 里都有模型能实现;VC 维=能被打散的最大点集大小。二维直线能打散 3 个不共线点的全部 8 种标注,4 个点的 16 种里至少有一种做不到(异或布局),所以 VC = 3;⚠️是存在一组 3 点能打散、任意 4 点都打不散。一般地 d 维线性分类器 VC = d+1 ≈ 参数个数,⚠️但有著名反例:sin(ωx)只有 1 个参数,VC 维却是 ∞(调频率 ω 就能在任意点取任意正负号)→ ⭐VC 维 ≠ 参数个数,"参数少=简单"是错的。⭐⭐VC 界:真实误差 ≤ 训练误差 + 复杂度罚款,罚款量级大致√(d_VC/m),经验法则 ⭐m ≥ 10·d_VC时训练误差才可信。它严格解释了过拟合(训练误差低但罚款大)和欠拟合(训练误差本身就高,罚款再小也没用),U 型曲线就是两条线相加。由此得 SRM:最小化"训练误差+复杂度罚款"(只看训练误差会永远选中最复杂的),CV 是它的经验版。至此四种等价的正则化理解:先验(第 2 章)、故意引入偏差换方差(第 8 章)、缩小假设空间(第 9 章)、SRM 罚款(本章)。⚠️但 VC 解释不了深度学习:几十亿参数按界该必然过拟合,现实却泛化很好;随机标签实验让矛盾无处可藏:标签完全打乱后网络仍能拟合到 100%(容量足以记住任意标注),可同一个网络在真实标签上泛化很好。解释都不完备:SGD 隐式偏好平坦解、有效复杂度 ≠ 参数量、双下降。泛化仍是开放问题——学 VC 是为了建立正确的思维框架,不是拿它算深度模型该用多少数据。
下一节 👉 11-没有免费的午餐.md