深入探讨“维数灾难”概念,并了解高维空间中出现的所有令人惊讶的现象背后的数学原理。
在机器学习领域,处理高维向量不仅常见,而且非常重要。这在流行模型的架构中得到了体现,比如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:
数学联邦政治世界观提示您:看后求收藏(同人小说网http://tongren.me),接着再看更方便。