深入探讨“维数灾难”概念,并了解高维空间中出现的所有令人惊讶的现象背后的数学原理。
在机器学习领域,处理高维向量不仅常见,而且非常重要。这在流行模型的架构中得到了体现,比如Transformers。例如,BERT使用768维向量来编码输入序列的标记,并更好地捕捉数据中的复杂模式。考虑到我们的大脑难以想象三维以上的东西,使用768维向量是相当令人震惊的!
虽然一些机器学习和深度学习模型在这些高维场景中表现出色,但它们也带来了许多挑战。在本文中,我们将探讨“维数灾难”这一概念,解释与之相关的一些有趣现象,深入了解这些现象背后的数学原理,并讨论它们对你的机器学习模型的普遍影响。
什么是维数灾难?
人们通常认为在三维空间中熟悉的几何概念在高维空间中表现类似。事实并非如此。随着维数的增加,许多有趣且违反直觉的现象会出现。“维数灾难”是著名数学家理查德·贝尔曼创造的一个术语,指的是所有这些令人惊讶的效果。
高维空间的特殊之处在于其“体积”以指数级增长。让我们从1到10的一维线段开始。有10个整数在这条线上。将其扩展到二维:现在是一个正方形,有10 × 10=100 个具有整数坐标的点。现在考虑“仅仅”80维:你将拥有 10⁸⁰ 个点,这相当于宇宙中的原子数。
换句话说,随着维数的增加,空间的体积以指数级增长,导致数据变得越来越稀疏。
高维空间是“空”的
考虑另一个例子。我们想计算单位超立方体中两个点之间的最远距离(每边长度为1):
• 在一维(超立方体是从0到1的线段),最大距离是1。
• 在二维(超立方体形成一个正方形),最大距离是对角线上的两个顶点 [0,0] 和 [1,1] 之间的距离,使用毕达哥拉斯定理计算为 √2。
• 将这个概念扩展到n维,从 [0,0,. . .,0] 到 [1,1,. . .,1] 的距离是 √n。这个公式出现是因为每增加一个维度,就在平方根下的和中添加一个1的平方(再次使用毕达哥拉斯定理)。
有趣的是,随着维数n的增加,超立方体内的最大距离以O(√n) 速率增长。这种现象说明了递减收益效应,即空间维数的增加带来的是空间距离的相对较小的增长。接下来的部分将进一步探讨这种效应及其影响。
高维空间中的距离概念
让我们进一步深入探讨我们在前一部分中开始探索的距离概念。
我们首次领略到高维空间如何使距离的概念几乎失去意义。但这究竟意味着什么,我们能否在数学上可视化这种现象?
让我们考虑一个实验,使用我们之前定义的n维单位超立方体。首先,我们通过随机采样生成一个数据集,这实质上模拟了一个多元均匀分布。然后,我们从该分布中采样另一个点(“查询”点),观察它与数据集中最近和最远邻居之间的距离。
以下是相应的Python代码。
import numpy as np
def generate_data(dimension, num_points):
''' 在每个坐标范围内 [0, 1] 内生成随机数据点 '''
data = np.random.rand(num_points, dimension)
return data
def neighbors(data, query_point):
''' 返回数据中离查询点最近和最远的点 '''
nearest_distance = float('inf')
farthest_distance = 0
for point in data:
distance = np.linalg.norm(point - query_point)
if distance<nearest_distance:
nearest_distance = distance
if distance>farthest_distance:
farthest_distance = distance
return nearest_distance, farthest_distance
我们还可以绘制这些距离:
最近点
最远点
距离
10⁰
10⁻¹
10⁻²
10⁻³
10⁰
10¹
10²
尺寸
使用对数刻度,我们观察到随着维数增加,最近和最远邻居之间距离的相对差异趋于减小。
这是一种非常违反直觉的行为:如前所述,由于空间体积的指数级增长,点之间非常稀疏,但同时点之间的相对距离变得更小。
最近邻的概念消失
这意味着随着空间维数的增加,距离的概念变得不那么相关和区分度较低。可以想象,对于依赖距离的机器学习算法如kNN来说,这会带来问题。
数学:n-球
我们现在将讨论一些其他有趣的现象。为此,我们需要n-球。n-球是n维中球的推广。半径为R的n-球是距离空间中心0最多为R的点的集合。
让我们考虑半径为1。1-球是线段 [-1, 1]。2-球是单位圆所限定的圆盘,其方程为x²+y² ≤ 1。3-球(我们通常称之为“球”)的方程是 x²+y²+z² ≤ 1。如你所理解的,我们可以将这个定义扩展到任何维度:
ₙ
Bₙ{x₁,. . .,xₘ;∑ x²ᵢ ≤ 1}
ᵢ₌₁
经过大量积分运算,你可以证明n-球的体积可以表达如下,其中Γ 表示伽玛函数。
πⁿ/²
Vₙ(R)=Rⁿ ────
n
Γ(─+1)
2
例如,对于R=1 和 n=2,体积是 πR²,因为 Γ(2)=1。这确实是2-球的“体积”(在这种情况下也称为圆的“面积”)。
然而,除了作为一个有趣的数学挑战外,n球的体积还有一些非常令人惊讶的特性。
随着维数n的增加,n-球的体积趋向于0。
这对于每个半径都是如此,但让我们用一些R的值来可视化这一现象。
17.5 -
n-球r=0.5
n球r=1
n-球r=1.2
15.0 -
12.5 -
10.0 -
体积
7.5 -
5.0 -
2.5 -
0.0 -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
尺寸
不同半径的n-球体积随维数增加的变化(作者制作的图片)
如你所见,它不仅趋向于0,而且它先增加然后减少到0。对于R=1,体积最大的球是5-球,并且随着R的增加,达到最大值的n值向右移动。
以下是单位n-球的体积的前几个值,直到n=10。
1 2
2
3
4
5
6
7
8
9
10
高维单位球的体积集中在其表面附近。
对于小维度,球的体积看起来相当“均匀”:但在高维中不是这样。
r •
∠
R •
一个球壳
让我们考虑一个半径为R的n-球和另一个半径为R-dR的n-球,其中dR非常小。这两个球之间的部分称为“壳”,对应于靠近表面的球部分(见上图中的3D可视化)。我们可以计算球的“内”体积与薄壳体积的比率。
R=1,dr=0.05
0.8 -
0.6 -
体积
0.4 -
0.2 ⁻
0.0 ⁻
0
20
40
60
80
100
尺寸
随着维数n增加的比率(内体积/总体积)(作者制作的图片)
如我们所见,它迅速收敛到0:在高维空间中,几乎所有的体积都集中在表面附近。例如,对于R=1,dR=0.05 和 n=50,大约 92.3% 的体积集中在薄壳中。这表明在高维中,体积集中在“角落”中。这再次与我们之前看到的距离概念的扭曲有关。
请注意,单位超立方体的体积(这里表示一个边长为2的零中心立方体)是[公式]。在非常高维中,单位球基本上是“空的”,而单位超立方体相反,获得了指数级更多的点。这再次表明,当n很大时,“最近邻居”的概念失去了效力,因为几乎没有点在查询点q的距离R内。
维数灾难、过拟合和奥卡姆剃刀
维数灾难与过拟合原则密切相关。由于空间体积随维度的指数级增长,我们需要非常大的数据集来充分捕捉和建模高维模式。更糟糕的是,我们需要的样本数量随维度呈指数级增长以克服这一限制。这种特征多但数据点相对较少的情况尤其容易导致过拟合。
奥卡姆剃刀建议,较简单的模型通常比复杂的模型更好,因为它们不太可能过拟合。这一原则在高维情况下尤为重要(维数灾难发挥作用),因为它鼓励减少模型复杂性。
在高维情况下应用奥卡姆剃刀原则可能意味着减少问题本身的维度(通过如PCA、特征选择等方法),从而减轻维数灾难的一些影响。简化模型结构或特征空间有助于管理稀疏数据分布并使距离度量再次有意义。例如,降维是应用kNN算法之前非常常见的预处理步骤。最近的方法,如近似最近邻(ANNs),也作为处理高维情况的方法出现。
维度的祝福?
图片来源:Dall-E
虽然我们概述了机器学习中高维设置的挑战,但也有一些优势!
• 高维度可以增强线性可分性,使得如核方法更有效。
• 此外,深度学习架构特别善于在高维空间中导航和提取复杂模式。
正如机器学习中常见的,这是一个权衡:利用这些优势需要平衡增加的计算需求与模型性能的潜在提升。
结论
希望这能让你了解高维几何是多么“奇怪”,以及它对机器学习模型开发带来的许多挑战。我们看到,在高维空间中,数据非常稀疏,但也倾向于集中在角落,距离失去了意义。
虽然“维数灾难”概述了高维空间中的显著限制,但令人兴奋的是,现代深度学习模型在越来越擅长于导航这些复杂性。例如,嵌入模型或最新的LLM使用非常高维的向量来更有效地识别和建模文本模式。
注意:任何章节均无图片内容资源!
数学联邦政治世界观提示您:看后求收藏(笔尖小说网http://www.bjxsw.cc),接着再看更方便。