📑 本页目录(点开跳转)
11 · 没有免费的午餐
⏱ 22 分钟 | ⭐ 一个被到处误引的定理
🎯 一句话
在所有可能的问题上平均,任何两个学习算法的表现完全相同。 听起来像是在说"机器学习没用"——但它真正的含义恰恰相反。
📐 一、定理说了什么
考虑【所有可能的目标函数】f(即所有可能的输入→输出映射)
对任意两个算法 A 和 B:
Σ (A 在 f 上的表现) = Σ (B 在 f 上的表现)
所有f 所有f
→ 在所有问题上取平均,随机猜和最先进的算法【一样好】
💡 为什么会这样(一个具体的构造)
假设某算法 A 在问题 P 上表现好:
· 训练集上的点,A 学对了
· 训练集【之外】的点,A 也猜对了 ✅
现在构造问题 P':
· 训练集完全一样(同样的输入,同样的标签)
· 但训练集之外的所有点,标签【恰好相反】
→ A 在 P' 上看到的训练数据一模一样
→ 所以它会输出【完全相同】的模型
→ 但这次训练集外的点全错了 ❌
⭐ 每个"A 表现好"的问题,都能配一个"A 表现差"的问题
→ 正负抵消
🔑 本质:在训练集之外,你没有任何信息。 任何"泛化"都必须依赖某种关于世界的假设——而这个假设可能是错的。
📊 一个小例子(能自己数出来)
3 个可能的输入 {a, b, c},二分类
→ 所有可能的目标函数:2³ = 8 个
训练集:只见过 a → 1
剩下 b、c 的标签有 4 种组合:(0,0) (0,1) (1,0) (1,1)
→ 和训练集一致的目标函数有 4 个
任何算法,不管它猜 b、c 是什么,
在这 4 个函数上【恰好对 2 个、错 2 个】 ⭐
→ 平均正确率永远是 50%
⚠️ 二、三种常见的误读
| ❌ 误读 | ✅ 真相 |
|---|---|
| 「所以选什么算法都无所谓」 | 恰恰相反:因为没有普适最优,选对算法才更重要 |
| 「机器学习是不可能的」 | 现实问题不是从"所有可能函数"里均匀抽的,它们有结构 |
| 「这只是理论玩具」 | 它有实际推论(见下),且量化了归纳偏置的价值 |
关键前提:所有目标函数等概率出现
但真实世界的问题有【强烈的结构】:
· 相似的输入通常有相似的输出(平滑性)
· 简单的解释通常更可能对(奥卡姆剃刀)
· 图像有局部相关性、文本有语法结构
· 物理规律是连续的、可微的
→ 真实问题只占"所有可能函数"里【极小极小】的一撮
→ 在那一撮上,某些算法确实系统性更好 ✅
💡 一个量化的感受(用第 9 章的例子):
n = 20 个布尔特征时:
所有可能的布尔函数:2^(2²⁰) ≈ 10^315,653 个
而"人类会关心的函数"(简单的、有结构的)
可能只有其中的 10^-315,000 比例
⭐ NFL 在整个空间上成立,但我们只活在那一小撮里
💡 三、四个真实的实践推论
① 归纳偏置不是缺点,是必需品 ⭐
没有偏置 → 没有泛化能力(NFL 的直接推论)
有偏置 → 在符合偏置的问题上好,在不符合的上差
⭐ 所以选模型 = 选一个【和你的问题匹配的偏置】
🔗 第 9 章 PAC 给了它的定量版本: 学"任意布尔函数"要 700 万样本,学"合取式"只要 226 个。 限制假设空间 = 大幅降低样本需求。偏置就是这么值钱。
② 「最好的算法」这句话必须带条件
❌ "XGBoost 是最好的算法"
✅ "XGBoost 在中小规模表格数据上通常最好"
↑ 必须说清在什么问题分布上
🔗 基础教程第 19 章挑战 B 让你亲手跑出这张表——NFL 就是那个项目的理论解释: 不同数据类型上排名会变,这不是意外,是必然。
③ 交叉验证是在"赌"问题的结构
CV 有用的前提:假设【测试数据和训练数据同分布】
→ 这个假设本身就是一种归纳偏置
→ 分布漂移时 CV 会骗你
🔗 基础教程第 5、11 章的"离线好线上崩",根因在这。
④ 领域知识是你相对模型的最大优势 ⭐
模型只能从数据里学
你可以【直接把关于问题的知识编码进偏置里】
例:
· 知道信号有周期性 → 加傅里叶特征
· 知道结果必须非负 → 用泊松损失(第 1 章)
· 知道图像有平移不变性 → 用 CNN
· 知道时间顺序重要 → 用 TimeSeriesSplit(第 5 章)
⭐ 这些都是"免费"的偏置注入,比调参有效得多
🎭 四、一个有趣的推论:算法的"专长"是守恒的
一个算法在某类问题上变强,必然在另一类问题上变弱
三个具体例子:
| 调整 | 变好的场景 | 变差的场景 |
|---|---|---|
| 加强正则化 | 真实函数确实简单时 ✅ | 真实函数确实复杂时 ❌ |
| CNN 的平移不变假设 | 图像分类 ✅ | 位置本身携带关键信息的任务 ❌(如医学影像里"病灶在左肺还是右肺") |
| 树模型的轴对齐切分 | 特征有独立含义时 ✅ | 决策边界是斜线时 ❌(要切很多刀才能逼近) |
💡 所以调参本质上是在做什么:
你在把模型的"专长"挪到你的问题所在的那个区域。 这就是为什么调参必须用你自己的数据,而不是抄别人的超参。
🧭 五、这一章该带走的心态
❌ 悲观解读:「反正没有最优算法,随便选吧」
✅ 正确解读:
① 没有万能算法 → 理解你的问题结构比追新模型重要
② 归纳偏置是你的朋友 → 主动选择匹配的假设
③ 任何"通用最强"的宣称都值得怀疑 → 问它在什么分布上测的
④ 领域知识 = 更好的归纳偏置 → 这是你相对模型的优势
⑤ AutoML 也逃不掉 → 它只是在【你给的搜索空间】里搜
💡 关于第 ⑤ 点:AutoML 看起来像"万能",但它的搜索空间是人定的—— 那个搜索空间就是它的归纳偏置。 NFL 对它同样成立。
🔗 六、和站内其他章的关系
| 相关的地方 | NFL 的解释 |
|---|---|
| 基础教程第 2 章"没有免费的午餐" | 本章是它的严格版 |
| 第 9 章:限制假设空间降低样本需求 | NFL 的定量对偶面 |
| 基础教程第 14 章归纳偏置权衡 | NFL 是它的理论根据 |
| Kaggle 第 21 章任务决策路径 | 不同任务用不同方法的必然性 |
| 基础教程挑战 B 四种解法对决 | 亲手验证 NFL |
| 调参要用自己的数据 | 在挪动算法的"专长区" |
✅ 检查点
- NFL 定理的严格表述是什么?能构造一个例子说明为什么成立吗?
- 用 3 个输入的小例子算一下:见过 a→1 后,任何算法的平均正确率是多少?
- 它的关键前提是什么?为什么现实中不满足?
- 为什么说 NFL 让"选对算法"更重要而不是更不重要?
- NFL 和 PAC 的样本复杂度界是什么关系?
- 举一个「归纳偏置在某场景是优势、在另一场景是负担」的例子。
- AutoML 能逃过 NFL 吗?
👀 答案
- 在所有可能的目标函数上平均,任意两个算法的期望表现相同。构造:若算法在问题 P 上猜对了训练集外的规律,可以构造 P'——训练集完全相同但训练集外标签全部相反,算法会输出相同模型却全错,正负抵消。
- 50%。与训练集一致的目标函数有 4 个(b、c 的标签有 4 种组合),任何猜法都恰好对 2 个错 2 个。
- 前提是所有目标函数等概率出现。现实问题有强烈结构(平滑性、简单性、局部相关性、连续可微),只占所有可能函数中极小的一撮。
- 因为不存在普适最优,必须根据问题结构主动选择匹配的算法/偏置——选择本身成了关键决策。
- 互为对偶:NFL 说"没有偏置就没有泛化",PAC 定量地说"限制假设空间能把样本需求从 700 万降到 226"。偏置的代价和收益,两个定理各说了一半。
- CNN 的平移不变:图像分类上是优势;但"病灶在左肺还是右肺"这类位置本身携带信息的任务上是负担。
- 不能。它的搜索空间是人定的,那个搜索空间就是它的归纳偏置。
🛑 可以停在这里
⚡ 走神救援
NFL:在所有可能的目标函数上平均,任何两个学习算法的表现完全相同。构造:A 在 P 上连训练集之外都猜对了,就能构造 P'——训练集一样、训练集外标签恰好全反,A 会输出完全相同的模型却全错 → 正负抵消。⭐本质:训练集之外你没有任何信息,泛化必须依赖关于世界的某种假设,而它可能是错的。小例子:3 个输入共 8 个目标函数,见过 a→1 后与它一致的有 4 个,任何猜法都对 2 错 2 → 平均正确率永远 50%。⚠️这是最常被误读的一章:它没有说"选什么算法都无所谓"(恰恰相反,正因为没有普适最优,选对算法才更重要),也没有说机器学习不可能。⭐前提是"所有目标函数等概率出现",而真实问题有强烈的结构(相似输入相似输出、简单解释更可能对),n=20 时布尔函数就有 10^315,653 个——NFL 在整个空间成立,但我们只活在那一小撮里,在那撮上某些算法确实更好。推论:①⭐归纳偏置不是缺点,是必需品,选模型=选一个匹配你问题的偏置(PAC 是定量对偶面:任意布尔函数 700 万样本,合取式只要 226 个);②「最好的算法」必须带条件("XGBoost 在中小表格数据上通常最好");③CV 是在"赌"问题的结构(假设同分布本身就是偏置,⚠️漂移时它会骗你);④⭐领域知识是你最大的优势(平移不变→CNN、时间顺序→TimeSeriesSplit)。"专长守恒":CNN 的平移不变在图像分类上是优势,在"病灶在左肺还是右肺"这种位置本身携带信息的任务上就是负担;所以调参是在把模型的"专长"挪到你的问题所在区域,必须用自己的数据,不能抄超参。⚠️AutoML 也逃不掉——它只在你给的搜索空间里搜,那就是它的归纳偏置。
下一节 👉 12-反向传播的完整推导.md