🏠 总目录📚 本教程 10 · VC 维 ← →
📑 本页目录(点开跳转)

10 · VC 维:无限假设空间怎么办

⏱ 24 分钟 | ⭐ 理论的最高点


🎯 一句话

线性模型有无限个(w 是连续的),第 9 章的 ln|H| 直接失效。 VC 维是「假设空间复杂度」的正确度量——它不数模型个数, 而是数「你能制造出多少种不同的分类结果」。


🧠 一、关键转变:从"数模型"到"数行为"

结果对照

❌ 数模型个数:线性分类器有无穷多个→ln|H| = ∞→界失效
✅ 数【在给定数据点上的行为】:
给定 3 个点,一条直线能产生多少种不同的 (+/−) 标注方式?
有限的!最多 2³ = 8 种
而且直线未必能实现全部 8 种
💡 关键洞察:
无限多的模型,在【有限个点】上只能表现出【有限种】行为

这个转变是整个统计学习理论的枢纽——它把「无穷」变回了「有限」。


💥 二、打散(Shattering)

一个假设空间 H 能「打散」一组点,是指: 这组点的每一种可能的 +/− 标注方式,H 里都有模型能实现。

二维平面上的直线

先看打散的条件
点的数量全部标注数直线能否全部实现
2 个点4 种(++, +−, −+, −−)✅ 能打散
3 个不共线的点8 种✅ 能打散
4 个点16 种❌ 至少有一种做不到
XOR 在两个输入不同时输出 1。同类点处于对角位置,无法用一条直线把实心点与空心点完全分开。虚线用于显示对角关系,不是分类边界。x₁x₂(0,0) → 0(1,0) → 1(0,1) → 1(1,1) → 0实心是 1,空心是 0;同类占据对角
XOR 在两个输入不同时输出 1。同类点处于对角位置,无法用一条直线把实心点与空心点完全分开。虚线用于显示对角关系,不是分类边界。

看图中的对角线同类布局:一条直线切不开。

⚠️ 两个容易搞错的细节: 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 界直接给出了一个模型选择原则:

横轴是模型复杂度,纵轴是误差或罚款。训练误差随复杂度下降,但复杂度项增大;示意强调在总目标上找折中,而不是只追训练误差。误差 / 罚款模型复杂度两者之和训练误差下降复杂度罚款上升
横轴是模型复杂度,纵轴是误差或罚款。训练误差随复杂度下降,但复杂度项增大;示意强调在总目标上找折中,而不是只追训练误差。

图下说明

实践中怎么实现 SRM:

方式 说明
显式正则化 损失 + λ‖w‖² 里的第二项就是复杂度罚款
限制模型族 先试线性,不够再试树,再不够才试神经网络
早停 隐式限制了有效复杂度
交叉验证选模型 经验版的 SRM——直接测泛化而不是用界估计

🔗 你现在有四种方式理解正则化: 1. 第 2 章:贝叶斯先验 2. 第 8 章:故意引入偏差,换方差的大幅下降 3. 第 9 章:缩小假设空间 4. 本章:结构风险最小化里的复杂度惩罚项

四者是同一件事的四个视角。 能自由切换视角,说明你真的懂了。


⚠️ 六、VC 理论解释不了深度学习

必须诚实说明的局限:

信息关系

一个现代大模型有几十亿参数→VC 维极大
VC 界预测:需要天文数字的数据,否则必然过拟合
现实:它们泛化得很好 💀
经典 VC 理论【无法解释】深度学习的泛化能力

一个著名的实验让这个矛盾无处可藏

信息关系

把训练集的标签【完全打乱】(图片和标签毫无关系)
神经网络仍然能把训练集拟合到 100% 准确率
说明它的容量足以记住【任意】标注→VC 维确实巨大
但【同一个网络】在真实标签上泛化得很好
💀 按 VC 界,容量这么大就该过拟合 —— 可它没有

当前的几种解释(都还不完备)

解释方向 大意
隐式正则化 SGD 本身偏好"平坦"的解,等于自带正则
有效复杂度 ≠ 参数量 ⭐ 训练出来的网络实际处在一个低复杂度子空间(呼应 sin(ωx) 的反面)
数据的流形结构 真实数据在低维流形上(第 5 章),有效维度远低于名义维度
双下降 超参数化区间的行为和经典理论不同

🔑 诚实的结论:泛化理论仍是开放问题。

VC 理论在它适用的范围内是对的且深刻的(它解释了经典模型、 给出了"复杂度 ↔ 数据量 ↔ 泛化"的正确框架), 但它不是深度学习泛化的完整答案。

学它的价值是建立正确的思维框架,不是拿它去算深度模型该用多少数据。


🔬 七、实用价值:VC 理论今天还能给你什么

即使它算不准深度模型,这四条仍然有用:

操作步骤

  1. 复杂度和数据量必须匹配 —— m ≥ 10·d_VC 的直觉
  2. 训练误差和真实误差之间【必有间隙】—— 别信训练分数
  3. 模型选择要考虑复杂度罚款 —— 而不是只挑训练误差最低的
  4. "参数少 ≠ 简单" —— 用 sin(ωx) 提醒自己别用参数量判断复杂度

✅ 检查点

  1. VC 维在数什么?为什么不能直接数模型个数?
  2. 什么叫"打散"?二维直线的 VC 维是多少,为什么是 3 不是 4?
  3. sin(ωx) 只有一个参数,VC 维却是无穷——这说明什么?
  4. VC 泛化界的三项是什么?罚款项大致是什么量级?经验法则是什么?
  5. 四种理解正则化的方式分别在哪一章?
  6. 随机标签实验说明了什么矛盾?
  7. VC 理论今天还有什么实用价值?
👀 答案
  1. 数「在有限个点上能产生多少种不同的分类行为」。因为线性模型等有无穷多个,ln|H| 会发散,但它们在有限点上的行为是有限的。
  2. 一组点的每种 +/− 标注方式,假设空间里都有模型能实现。VC=3 因为:存在一组 3 个不共线的点能被打散(8 种标注全实现),而任意 4 个点都存在做不到的标注(异或布局)。
  3. VC 维 ≠ 参数个数。真正决定复杂度的是表达能力的丰富程度,不是参数数量。"参数少就简单"是错觉。
  4. 真实误差 ≤ 训练误差 + 复杂度罚款。罚款大致 √(d_VC/m)。经验法则 m ≥ 10·d_VC。
  5. 第 2 章(贝叶斯先验)、第 8 章(故意引入偏差换方差)、第 9 章(缩小假设空间)、第 10 章(SRM 的复杂度罚款)。四者说的是同一件事。
  6. 把标签完全打乱后网络仍能拟合到 100%,说明容量足以记住任意标注(VC 维巨大);但同一网络在真实标签上泛化很好。按 VC 界它该过拟合,可它没有。
  7. ①复杂度与数据量要匹配 ②训练误差和真实误差必有间隙,别信训练分数 ③模型选择要算复杂度罚款 ④"参数少≠简单"。

🛑 可以停在这里

⚡ 走神救援

先记住这几件事

下一节 👉 11-没有免费的午餐.md

打卡记录保存在你的浏览器里,首页能看到总进度