🏠 总目录📚 本教程 11 · 没有免费的午餐
📑 本页目录(点开跳转)

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
调参要用自己的数据 在挪动算法的"专长区"

✅ 检查点

  1. NFL 定理的严格表述是什么?能构造一个例子说明为什么成立吗?
  2. 用 3 个输入的小例子算一下:见过 a→1 后,任何算法的平均正确率是多少?
  3. 它的关键前提是什么?为什么现实中不满足?
  4. 为什么说 NFL 让"选对算法"更重要而不是更不重要?
  5. NFL 和 PAC 的样本复杂度界是什么关系?
  6. 举一个「归纳偏置在某场景是优势、在另一场景是负担」的例子。
  7. AutoML 能逃过 NFL 吗?
👀 答案
  1. 在所有可能的目标函数上平均,任意两个算法的期望表现相同。构造:若算法在问题 P 上猜对了训练集外的规律,可以构造 P'——训练集完全相同但训练集外标签全部相反,算法会输出相同模型却全错,正负抵消。
  2. 50%。与训练集一致的目标函数有 4 个(b、c 的标签有 4 种组合),任何猜法都恰好对 2 个错 2 个。
  3. 前提是所有目标函数等概率出现。现实问题有强烈结构(平滑性、简单性、局部相关性、连续可微),只占所有可能函数中极小的一撮。
  4. 因为不存在普适最优,必须根据问题结构主动选择匹配的算法/偏置——选择本身成了关键决策。
  5. 互为对偶:NFL 说"没有偏置就没有泛化",PAC 定量地说"限制假设空间能把样本需求从 700 万降到 226"。偏置的代价和收益,两个定理各说了一半。
  6. CNN 的平移不变:图像分类上是优势;但"病灶在左肺还是右肺"这类位置本身携带信息的任务上是负担。
  7. 不能。它的搜索空间是人定的,那个搜索空间就是它的归纳偏置。

🛑 可以停在这里

走神救援

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

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