🏠 总目录📚 本教程 05 · 维度灾难 ← →
📑 本页目录(点开跳转)

05 · 维度灾难

⏱ 28 分钟 | ⭐⭐ 用数字就能吓到你的一章


🎯 一句话

高维空间的几何和你的直觉完全相反。 在 500 维里,「最近的邻居」和「最远的邻居」几乎一样远—— 基于距离的方法在那里全线失效。

d = 2最外 5% 的壳占体积 10%d = 11最外 5% 的壳占体积 40%d = 100最外 5% 的壳占体积 99.4%维度越高,体积越是全部挤到最外面那层薄壳里后果:所有点都「一样远」—— 最近邻不再更近,kNN 失效d=500 时,(最远−最近)/最近 ≈ 0.19
深色环是「最外 5% 的那层壳」。二维时它只占 10% 的面积,100 维时它占了 99.4% 的体积 —— 也就是说,几乎所有点都贴在表面上、彼此等距。⭐ 这就是 kNN 在高维失效的几何原因。

😱 一、四个数字实验(全部实测)

实验 1:球在立方体里几乎不占地方

单位立方体里塞一个内切球,球占多少体积?

维度 d 球 / 立方体 直觉检验
2 78.5% 圆占正方形——符合直觉
3 52.4% 球占正方体——还行
5 16.5% 已经开始不对劲
10 0.25% 💀
20 0.0000025% 💀💀
50 1.5 × 10⁻²⁶ % 💀💀💀

💡 这意味着什么: 高维立方体的体积几乎全在角落里。 中间那个"球"——也就是你直觉中的"中心区域"——空得可怕。

为什么:d 维立方体有 2ᵈ 个角。d=100 时是 10³⁰ 个角。 体积全被这些角瓜分了。

实验 2:数据全都在"壳"上

单位球里,最外面 5% 厚度的那层壳,占多少体积?

维度 d 外壳占比
1 5.0%
3 14.3%
10 40.1%
50 92.3%
100 99.4%

💡 人话:100 维空间里,99.4% 的点都挤在最外面那层薄壳上。

因果链

「均匀分布在球里」在高维意味着「几乎全在表面」
没有"中心"这回事
「典型样本靠近均值」这个直觉,在高维是【错的】⭐

🔗 这个结论对异常检测是致命的: 「离中心远 = 异常」这条规则在高维失效,因为所有点都离中心很远。

实验 3:⭐ 最要命的一个 —— 距离失去意义

1000 个随机点,看「最远距离」和「最近距离」差多少:

$$\frac{d_{max} - d_{min}}{d_{min}}$$

维度 d 相对差距
2 280.0
5 7.40
10 2.41
50 0.89
100 0.41
500 0.19

💡 这就是 kNN 在高维死掉的原因:

500 维时,最远的点只比最近的点远 19%。 「最近邻」这个概念在数值上已经没有区分度了——所有点都差不多远。

而 kNN、K-Means、DBSCAN、余弦相似度检索、异常检测…… 全都建立在"距离有意义"这个前提上。

# 你可以自己跑一遍(30 秒)
import numpy as np
rng = np.random.RandomState(0)
for d in [2, 10, 100, 500]:
    X = rng.rand(1000, d); q = rng.rand(1, d)
    dist = np.linalg.norm(X - q, axis=1)
    print(f"d={d:<5} 相对差距 = {(dist.max()-dist.min())/dist.min():.2f}")

实验 4:样本需求指数爆炸

想让每个维度上都有 10 个采样点(覆盖住空间):

维度 d 需要的样本数 参照
1 10 —
3 1,000 —
5 100,000 —
10 10¹⁰ 100 亿,接近全球人口 ×1.2
20 10²⁰ 比地球上的沙子还多

💡 这解释了为什么高维一定过拟合: 你永远不可能有足够的数据填满高维空间。 无论你有多少数据,在高维里它都只是"稀疏的几个孤点"。


🧠 二、为什么会这样:一个统一的直觉

关键信息

核心:维度增加时,「远离中心」的【方式】呈指数增长,
而「靠近中心」的方式不变
一个点要"靠近中心",需要【每一个】坐标都靠近中心
d 个条件同时满足,概率 = p^d,指数衰减 💀
一个点要"远离中心",只需要【任意一个】坐标偏远
有 d 个机会,概率 = 1 − (1−q)^d,指数增长

所以随机点几乎必然落在某个角落/表面。 上面四个实验都是这一条的不同表现。


💥 三、它毁掉了什么

受害者 怎么死的
kNN / 核方法 ⭐ 距离失去区分度(实验 3)
K-Means / DBSCAN 同上——聚类基于距离
异常检测 「离中心远=异常」失效(实验 2:所有点都远)
核密度估计 需要的样本量指数爆炸(实验 4)
任何"局部"方法 高维里根本没有"局部"这回事
可视化直觉 ⭐ 你在 2D/3D 里的所有几何直觉都会骗你

⚠️ 一个常见的自欺: 在 2 维画个图,看到聚类效果不错,就以为 200 维也会这样。 不会。 你的图和真实的高维结构没什么关系(这也是基础教程第 6 章 说「t-SNE 的图只能用来看一眼」的深层原因)。


🛡️ 四、怎么活下来(五条出路)

① 降维

PCA / 特征选择 / 自编码器 —— 直接把 d 降下来。

🔗 基础教程第 6 章

② 特征选择

大多数维度是噪声,删掉它们比压缩更好。 高维里"噪声维度"的害处是双重的:既增加维度,又稀释真实信号。

③ ⭐ 加强的归纳偏置(最重要的一条)

关键信息

CNN 假设「局部相关 + 平移不变」
一张 224×224×3 的图名义上是 150,528 维
但 CNN 不把它当 15 万个独立维度看
它只看 3×3 的局部窗口,且全图共享同一套权重
【有效维度】被大幅降低
这就是为什么 CNN 能处理 15 万维图像,而 kNN 不能

🔗 基础教程第 12 章。 归纳偏置的本质,就是用"关于数据的假设"来对抗维度灾难。

④ 正则化 / 先验

用先验信念约束住高维空间里的自由度。

🔗 第 2 章:正则化 = 高斯先验;第 9 章:正则化 = 缩小假设空间。

⑤ ⭐ 流形假设(最深刻的一条)

关键信息

一张 224×224 的照片名义上是 150,528 维
但【所有可能的 150,528 维向量】里,
绝大多数是纯噪声雪花,不是"照片"
真实照片只占据其中一个【极低维的弯曲子空间】(流形)
有效维度可能只有几十维

高维空间 真实数据所在的流形

真实数据所在的那一小块· 灰点 = 高维空间里绝大部分位置橙块 = 模型真正要学的那个低维曲面
⭐ 维度一高,空间涨得比数据快得多:绝大部分位置永远没有样本落进去。好消息是真实数据通常挤在一个低维曲面上 —— 模型学的其实是那一块。

🔑 这个假设是整个表示学习 / Embedding 的理论基础: - 推荐算法把 1 亿维 one-hot 压成 64 维 Embedding —— 找那个流形 - 深度学习的每一层都在做"把数据往更好的流形坐标系上摆"

深度学习能在高维数据上工作,正是因为它学的是那个低维流形,不是整个高维空间。


🔬 五、一个实用的诊断

怎么判断你的问题是否受维度灾难影响:

流程图

① 你的 d 和 n 是什么关系?
n >> 10^d→安全(几乎不可能,除非 d 很小)
n < d→💀 高危(比如 100 个样本 500 个特征)
n ≈ 10d~100d→常见区间,需要正则化和特征选择
② 用的是"基于距离"的方法吗?
kNN / K-Means / DBSCAN / 相似度检索→高维时高危
树模型 / 线性模型→受影响小得多 ⭐
③ 做个快速检验:
把你的数据算一下"最近邻距离 / 最远邻距离"的比值
接近 1→距离已经没有区分度了

💡 为什么树模型受影响小:它每次只看一个特征做切分, 不计算全维度的距离——天然绕过了维度灾难的核心机制。 这也是ML 基础 04a · 集成学习与 GBDT说 "表格数据上树模型很难被打败"的深层原因之一。


🔗 六、和站内其他章的关系

相关的地方 根因在这
推荐算法:交互矩阵 99.99% 是空的 维度灾难在推荐场景的形态
推荐算法:为什么要用 Embedding 降维 流形假设
基础教程第 6 章:PCA 的意义 出路 ①
基础教程第 6 章:t-SNE 的图不可信 高维几何直觉失效
基础教程第 12 章:CNN 为什么有效 出路 ③——归纳偏置降低有效维度
基础教程第 4 章:树模型在表格数据上强 它不算全维度距离
基础教程第 14 章:归纳偏置 vs 数据量 同一个权衡的另一面

✅ 检查点

  1. 100 维单位球里,99.4% 的体积在哪?这对异常检测意味着什么?
  2. 500 维时最近邻和最远邻差多少?这毁掉了哪些方法?
  3. 为什么高维必然过拟合?(用实验 4 解释)
  4. 用一句话解释所有四个实验的统一原因。
  5. 五条出路是什么?哪条最重要?
  6. 流形假设说了什么?它解释了什么现象?
  7. 为什么树模型受维度灾难影响较小?
👀 答案
  1. 在最外面 5% 厚度的薄壳上。高维空间里"没有中心",所以「离中心远=异常」这条异常检测规则失效——所有点都离中心很远。
  2. 只差 19%。毁掉了所有基于距离的方法:kNN、K-Means、DBSCAN、核方法、相似度检索、异常检测。
  3. 要覆盖 d 维空间需要 10^d 个样本,d=20 就需要 10²⁰ 个(比沙子还多)。你永远不可能有足够数据填满高维空间,数据在高维里永远是稀疏孤点。
  4. 「靠近中心」需要每个坐标都靠近(概率 p^d 指数衰减),「远离中心」只需任一坐标偏远(有 d 个机会,指数增长)。
  5. 降维、特征选择、加强归纳偏置(最重要)、正则化/先验、流形假设。归纳偏置最重要——CNN 靠它处理 15 万维图像。
  6. 真实数据虽名义上高维,但实际分布在一个低维弯曲子空间(流形)上。它解释了深度学习为什么能处理高维数据、Embedding 为什么有效。
  7. 树模型每次只看一个特征做切分,不计算全维度距离,天然绕过了维度灾难的核心机制。

🛑 可以停在这里

⚡ 走神救援

先记住这几件事

下一节 👉 05b-PCA的推导.md

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