第七部分 · 表示与几何
高维的怪相:维度灾难与测度集中
我们一直在把数据往低维压。这一课说破压它的理由:高维空间本身就是个怪地方。在那里,体积都躲到了"皮"上,随机两点几乎永远等距,"最近的邻居"失去了意义——三维里训练出来的几何直觉,到高维全线崩盘。
留下的问题:可我们一直默认"降维是好事",却没说为什么非降不可。如果高维只是"维度多一点",多算点而已,那直接在原始高维里做不就好了?偏不行。高维空间的几何,和我们在二三维里养成的直觉,是系统性地对着干的。距离、体积、邻居、采样——每一个你以为天经地义的概念,到了高维都会变脸。
本课新增:维度灾难——采样需求随维度指数爆炸;测度集中——高维里几乎所有体积都贴在"外壳"上、随机点几乎两两等距。看懂它,就懂了机器学习为什么离不开结构、归纳偏置与正则化。
第一记闷棍:体积都躲到皮上去了
拿一个边长为 1 的立方体,在里面套一个边长 0.9 的小立方体(每面各留 0.05 的边距)。问:留在"外壳"(大立方体内、小立方体外)的体积占多少?
二维(正方形)里,小方块面积 0.9² = 0.81,外壳只占 19%——大部分还在中心。三维,小方块体积 0.9³ ≈ 0.73,外壳 27%。看起来温和。可体积是每多一维就再乘一次 0.9:
外壳占比 = 1 − 0.9ᵈ (d 是维数;0.9ᵈ 读作"0.9 的 d 次方")
到 d = 100,0.9¹⁰⁰ ≈ 0.0000266——也就是说,99.997% 的体积都挤在那层薄薄的外壳里,中心区几乎空无一物。0.9 这个数小于 1,自乘一百次就被碾成了尘埃。高维立方体不像我们想的"一个饱满的盒子",它几乎全是皮、几乎没有内部。这不是错觉,是 0.9ᵈ → 0 的铁律。
高维橙子:全是皮,没有瓤
球更夸张。一个半径 1 的球,里面套个半径 0.99 的球,外壳(那 1% 厚的果皮)占多少体积?d 维球体积正比于半径的 d 次方,所以内球占 0.99ᵈ,外壳占 1 − 0.99ᵈ。d = 1000 时 0.99¹⁰⁰⁰ ≈ 0.000043——99.99% 的体积都在最外那 1% 的果皮里。
换个角度同样惊人:固定立方体边长,把球塞进去,球占立方体的比例随维度趋于 0。三维里球还占盒子的一半多,到几十维,球的体积相对盒子小到可以忽略——空间几乎全跑到立方体的"角落"里去了,而高维立方体的角落多得吓人(d 维有 2ᵈ 个角)。一个高维盒子,几乎就是一蓬向四面八方伸出去的尖刺。我们脑子里那个圆滚滚、内部饱满的几何,在高维彻底失效。
距离崩塌:最近的邻居不再"近"
这是对机器学习最致命的一击。在低维里,"找最相似的样本"="找距离最近的点",天经地义——推荐、检索、聚类、k-近邻全靠它。可在高维里随机撒一堆点,会发生一件怪事:任意两点之间的距离,几乎都一样。
原因可以一句话点透:两点距离的平方,是每一维上差值平方的总和。维度一高,这是在把几百上千个独立的随机小量加起来——由第 10 课的大数定律,这种和会紧紧地集中在它的平均值附近,几乎不波动。于是不管挑哪两点,那个"总和"都差不多,距离也就都差不多。具体地,最近点距离与最远点距离的比值随维度趋于 1:
(最远距离 − 最近距离) / 最近距离 → 0 (当 d → ∞)
"最近"和"最远"挤到了一块儿。这意味着"最近邻"这个概念在高维里失去了意义——既然大家都差不多远,"离我最近的点"就成了一句空话,靠它做判断和掷骰子没两样。这正是测度集中:高维空间里,一个由许多维度加总出来的量(体积、距离、范数)会反常地集中在一个固定值附近,几乎不再有"近"和"远"的分别。
采样的诅咒:维度灾难的本相
"维度灾难"这个名字(贝尔曼,1957)最初说的就是采样。想"了解"一个空间,你得在里面撒足够密的样本。一维上每隔 0.1 放一个,需要 10 个点就能铺满 [0,1]。二维要 10² = 100 个,三维 10³ = 1000 个。到 d 维:
铺满所需样本数 ≈ 10ᵈ (每维分 10 格;10ᵈ 读作"10 的 d 次方")
d = 20 就要 10²⁰ 个样本——比地球上所有沙粒还多。一张小图片是几千维,你永远凑不齐"铺满"它的数据。所以在高维里,你的数据注定是极度稀疏的:无论收集多少样本,它们在那个浩瀚空间里都只是几粒孤零零的尘埃,彼此隔着大片从未被采到的虚空。"用足够多的样本把空间填满、然后内插"这条低维里行之有效的路,在高维被指数墙彻底堵死。
那机器学习是怎么活下来的
读到这儿你该不安了:数据稀疏成这样、距离又失效,机器学习凭什么还能成?答案藏在一个救命的事实里——真实数据并不会均匀地撒满整个高维空间。一张真实人脸照片是几千维,但所有"长得像脸"的照片,只占据这个巨大空间里一片极薄、极低维的"流形"(弯曲的低维面);随便填进去的随机像素,几乎永远是雪花噪点,不是脸。数据有结构,它远比它所在的空间低维——这正是上一课 PCA 能把几千维压到几十维的根本原因。
于是机器学习的全部本事,可以重述成一句话:对抗维度灾难。它靠三件法宝——一是降维 / 表示学习(把数据搬回它真实的低维老家,正是第七部分一路在做的);二是归纳偏置(把"图像有局部性""语言有顺序"这类先验结构焊进模型,让它不必在整个高维虚空里盲目搜索);三是正则化(逼模型偏爱简单解,别去硬记那一点点稀疏样本——这一招后面讲优化时还会专门登场)。没有这三样,任何模型在高维里都只能对着稀疏的尘埃过拟合。维度灾难不是某个算法的小毛病,它是悬在所有高维学习头顶的那把剑,也是这整门学科要绕开的那堵墙。
常见误解
- "维度高只是计算慢一点,多堆点算力就行。"不是慢,是本质困难。采样需求指数爆炸,再多算力也凑不出 10²⁰ 个有意义的样本;距离失效更不是算力能修的——它是几何本身的性质。维度灾难是统计和几何层面的墙,不是工程层面的坡。
- "高维很反直觉,所以肯定是数学的抽象游戏,现实用不上。"恰恰相反,它是现实最硬的约束。图像、文本、基因、用户行为——现代数据全是高维的。正因为高维这么诡异,深度学习才长成今天这副模样(卷积、注意力、嵌入,全是在给高维数据强加结构)。不懂高维的怪,就读不懂这些设计为什么非这样不可。
- "既然高维这么糟,那把维度全砍到最低就对了。"过犹不及。砍太狠会把真正有用的信息也丢掉(回扣上一课"低方差方向未必没用")。目标不是"维度越低越好",而是找到数据真实的内在维度——既摆脱虚空的诅咒,又留住该留的结构。这是个权衡,不是越少越好。