🏠 总目录📚 本教程 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 种标注
           ❌ 至少有一种做不到!
              ●     ○
                          ← 对角线同类(异或布局)
              ○     ●        一条直线切不开

⚠️ 两个容易搞错的细节: 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) 提醒自己别用参数量判断复杂度

✅ 检查点

  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. ①复杂度与数据量要匹配 ②训练误差和真实误差必有间隙,别信训练分数 ③模型选择要算复杂度罚款 ④"参数少≠简单"。

🛑 可以停在这里

走神救援

无限假设空间时 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

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