文章目录
维数灾难的提出背景
1957年,数学家 Richard Bellman 在研究动态规划问题时首次提出了维数灾难(curse of dimensionality)的概念,用于描述高维空间中的一系列数学现象。例如,高维数据会带来指数级增长的计算复杂度,在 GPU 广泛应用之前严重限制了算法的可应用性。
维数灾难的内涵
维数灾难描述了与高维数据相关的一系列数学现象。特别地,在机器学习领域,维数灾难通常指数据集维数和数据集大小之间的指数级关系。机器学习算法将一组特征作为输入,这些特征可能具有许多不同类别的变量。以临床医学机器学习为例,特征可能包括患者人口统计数据(例如年龄、性别、体重)、临床特征(例如 CRP、心率、体温)或来自医学成像的信息(例如每个单独像素的灰度值)。一个数据集的维数,指的是数据集中属性或特征的数量。当数据集的维数达到一定规模,就被称为高维数据。一般来说,随着特征数量的增长,机器模型训练算法所需的样本数量呈指数级增长。由于高维数据而导致训练机器学习模型的困难被称为“维度灾难”。 下面介绍维数灾难的两个重要方面:数据稀疏性(data sparsity)和距离聚集性(distance concentration)。
数据稀疏性
经过训练的机器学习模型可以预测给定输入数据样本的标签。在训练模型时,使用部分数据用于训练模型,其余数据用于评估模型的泛化性能。泛化性能是指模型对于训练集以外的数据样本的预测准确率。泛化性能强的模型对测试数据的预测准确度应该非常接近其在训练数据上的准确度。
建立泛化模型的一种有效方法是捕获预测变量值和相应目标的不同可能组合。例如,一个数据集包含两个特征:性别和年龄段。理想情况下,我们应该捕获两个属性值的所有可能组合的目标。对于两种性别和四个年龄段,我们需要 8 个训练样本来覆盖所有可能组合。如果目标取决于第三个属性,比如体型,覆盖所有组合所需的训练样本数量会显着增加。这个例子表明,随着特征数量的增加,泛化模型所需的训练样本数量也显着增加。
实际应用中,可用的训练样本可能没有观察到所有属性组合的目标。 这是因为某些组合比其他组合出现的概率更高。训练样本没有捕获所有组合的性质在高维数据中被称为“数据稀疏性”或简称为“稀疏性”。数据稀疏性是维度灾难的一个方面。用稀疏数据训练模型可能会导致高方差或过拟合情况。这是因为在训练模型时,模型已经从频繁出现的属性组合中学习,并且可以准确地预测结果。当将不太频繁出现的组合实时输入模型时,它可能无法准确预测结果。
距离聚集性
维数灾难的另一个方面是距离聚集性。随着数据维数的增加,任意两个样本之间的距离会趋于相同。因此,高维空间中的距离度量可能无法反应样本之间的相似性。对于一些基于距离度量的机器学习模型,例如聚类算法,在低维空间中验证有效的距离度量可能不是用于高维空间。
数据降维
数据降维是解决维数灾难的有效方法之一,下面介绍数据降维中常用的 PCA 和 t-SNE 方法。数据降维的目的是将高维空间的一系列数据点 x 1 , x 2 , ⋯ , x m \mathbf{x}_1, \mathbf{x}_2, \cdots, \mathbf{x}_m x1,x2,⋯,xm 映射到低维空间 y 1 , y 2 , ⋯ , y m \mathbf{y}_1, \mathbf{y}_2, \cdots, \mathbf{y}_m y1,y2,⋯,ym ,同时最大程度保留数据集信息。一般来说,低维空间的维数远小于原高维空间的维数 n n n 。
Principal Components Analysis
PCA 尝试寻找
n
n
n 维原空间的一个
M
M
M 维子空间,使样本集在其上的投影保留了尽量多的信息。在 PCA 之前,我们首先需要对数据集归一
x
i
←
x
i
−
x
ˉ
x_i \leftarrow x_i - \bar x
xi←xi−xˉ
使用设计矩阵的定义
X
=
[
x
1
,
x
2
,
…
,
x
m
]
T
∈
R
m
×
n
X = [x_1, x_2,\dots,x_m]^T \in \R^{m \times n}
X=[x1,x2,…,xm]T∈Rm×n 我们可以完成从原空间到子空间的映射
Y
=
X
P
Y = XP
Y=XP
其中 P = [ u 1 , u 2 , … , u M ] ∈ R n × M P = [u_1, u_2, \dots, u_M] \in \R^{n \times M} P=[u1,u2,…,uM]∈Rn×M 是由一组单位正交向量构成的变换矩阵。对于保留尽量多的原始信息这一目标,存在着下面两种理解
- Y Y Y 的样本方差尽可能大
- 从 Y Y Y 恢复到原空间后偏差尽可能小
下面将会证明这两种理解是等价的。
最大方差思想
首先考虑
M
=
1
M = 1
M=1 的情况,也就是样本集被映射为一维空间的一组数。因为变换矩阵
P
=
[
u
1
]
∈
R
n
×
1
P = [u_1] \in \R^{n \times 1}
P=[u1]∈Rn×1 ,所以算法只需找到一个向量
u
=
u
1
u = u_1
u=u1 满足
max
u
∣
∣
X
u
∣
∣
2
/
m
s
.
t
.
u
T
u
=
1
\begin{array}{rl} \max\limits_u & ||Xu||^2 / m\\ s.t. & u^Tu = 1 \end{array}
umaxs.t.∣∣Xu∣∣2/muTu=1
样本集的协方差矩阵表示为
Σ
=
1
m
X
T
X
\Sigma = \frac{1}{m} X^TX
Σ=m1XTX
则优化目标可以化为
u
T
Σ
u
u^T\Sigma u
uTΣu 。应用拉格朗日乘数法可以得到
∂
∂
u
(
u
T
Σ
u
+
λ
(
u
T
u
−
1
)
)
=
Σ
u
+
λ
u
=
0
\frac{\partial}{\partial u} (u^T\Sigma u + \lambda(u^Tu - 1)) = \Sigma u + \lambda u = 0
∂u∂(uTΣu+λ(uTu−1))=Σu+λu=0
因此
u
u
u 和
λ
\lambda
λ 分别是
Σ
\Sigma
Σ 的特征向量和对应特征值。重新考察目标函数
u
T
Σ
u
=
λ
u
T
u
=
λ
u^T\Sigma u = \lambda u^Tu = \lambda
uTΣu=λuTu=λ
也就是说,样本在特征向量 u u u 方向上的投影,所构成的样本集的方差即为其特征值。因此 u u u 应该是 Σ \Sigma Σ 的最大特征值对应的特征向量,称为 first principal components 。一般地对于 M ≠ 1 M \ne 1 M=1 的情况,可以循环地执行以下步骤
- 选取原空间中的第一主成分 u u u
- 取原空间对于向量 u u u 的补空间作为下一次循环的原空间
最小均方误差思想
假设存在原空间的某个坐标系 [ u 1 , u 2 , … , u n ] [u_1, u_2, \dots, u_n] [u1,u2,…,un] ,取其中前 M M M 个坐标轴 [ u 1 , u 2 , … , u M ] [u_1, u_2, \dots, u_M] [u1,u2,…,uM] 构成子空间坐标变换矩阵 P P P 。不妨设某个样本 x x x 在这样的坐标系下具有坐标 ( x 1 , x 2 , … , x n ) (x_1, x_2, \dots, x_n) (x1,x2,…,xn) ,则容易证明其对应的 y = ( x 1 , x 2 , … , x M ) y = (x_1, x_2, \dots, x_M) y=(x1,x2,…,xM) 。
现在我们希望找到一种方法使
y
y
y 恢复到原空间,并与
x
x
x 尽可能一致。但是由于缺少
x
M
+
1
,
x
M
+
2
,
…
,
x
n
x_{M + 1}, x_{M + 2}, \dots, x_n
xM+1,xM+2,…,xn 的信息,我们只能用其均值
0
0
0 来进行估计。也就是说重构得到的向量
x
~
=
(
y
1
,
y
2
,
…
,
y
M
,
0
,
…
,
0
)
\tilde x = (y_1, y_2, \dots, y_M, 0, \dots, 0)
x~=(y1,y2,…,yM,0,…,0)
这时就会引入重构误差
J
=
∣
∣
x
−
x
~
∣
∣
2
=
∑
i
=
M
+
1
n
x
i
2
=
∑
i
=
M
+
1
n
u
i
T
x
x
T
u
i
J = ||x - \tilde x||^2 = \sum\limits_{i = M + 1}^n x_i^2 = \sum\limits_{i = M + 1}^n u_i^Txx^Tu_i
J=∣∣x−x~∣∣2=i=M+1∑nxi2=i=M+1∑nuiTxxTui
对于所有样本,均方误差的定义如下
J
=
∑
i
=
M
+
1
n
u
i
T
Σ
u
i
J = \sum\limits_{i = M + 1}^n u_i^T \Sigma u_i
J=i=M+1∑nuiTΣui
接下来的讨论与最大方差思想类似。不同点在于这里需要选出 n − M n - M n−M 个特征向量使特征值最小。这些特征向量将作为补空间的一组基,而子空间的基则是剩余的 M M M 个主成分。因此在结论上,最小均方误差思想和最大方差思想一致。
使用 SVD 处理高维数据
模型求解可以通过 SVD 完成,但是对于高维数据
n
≫
m
n \gg m
n≫m 计算量会大一些。对于这种情况我们可以计算矩阵
X
X
T
XX^T
XXT 的特征值
λ
\lambda
λ 和特征向量
u
u
u 。这个矩阵的维数是
m
m
m 因此比较容易计算。算出来之后可以证明
X
T
X
(
X
T
u
)
=
X
T
⋅
λ
u
X^TX(X^Tu) = X^T\cdot \lambda u
XTX(XTu)=XT⋅λu
因此
X
T
u
X^Tu
XTu 即为
Σ
\Sigma
Σ 的特征向量,同时特征值
λ
\lambda
λ 并没有改变。因为
∣
∣
A
v
i
∣
∣
2
=
(
A
v
i
)
T
A
v
i
=
v
i
T
A
T
A
v
i
=
v
i
T
(
λ
i
v
i
)
=
λ
i
\begin{array}{rcl} ||Av_i||^2 &=& (Av_i)^TAv_i\\ &=& v_i^TA^TAv_i\\ &=& v_i^T(\lambda_iv_i)\\ &=& \lambda_i \end{array}
∣∣Avi∣∣2====(Avi)TAviviTATAviviT(λivi)λi
所以有
∣
∣
X
T
u
∣
∣
2
=
λ
||X^Tu||^2 = \lambda
∣∣XTu∣∣2=λ 。归一化可得特征向量
v
=
X
T
u
λ
v = \frac{X^Tu}{\sqrt{\lambda}}
v=λXTu
相关系数矩阵
如果原空间中数据的各个特征量纲不同,可以使用数据的相关系数矩阵代替原数据。但是计算相关系数时,需要保证特征的标准差非零。当且仅当某个特征的取值为常数,其标准差才会为零。因此可以将标准差为零的特征提前删除,而不会造成误差。
结果分析
设
F
j
=
X
u
j
F_j = Xu_j
Fj=Xuj 表示第
j
j
j 个主成分的取值。不难证明
F
i
T
F
j
=
u
i
T
X
T
X
u
j
=
{
m
λ
j
i
=
j
0
i
≠
j
F_i^TF_j = u_i^TX^TXu_j = \begin{cases} m\lambda_j & i = j\\ 0 & i \ne j \end{cases}
FiTFj=uiTXTXuj={mλj0i=ji=j
因为
X
X
X 经过了归一化,因此
V
a
r
(
F
j
)
=
λ
j
C
o
v
(
F
i
,
F
j
)
=
0
\begin{array}{rcl} Var(F_j) &=& \lambda_j\\ Cov(F_i, F_j) &=& 0 \end{array}
Var(Fj)Cov(Fi,Fj)==λj0
贡献率
从最大方差的角度思考,我们的目标是最大化
∑
j
=
1
M
V
a
r
(
F
j
)
\sum_{j = 1}^M Var(F_j)
∑j=1MVar(Fj) 。因此某个主成分对整体的贡献可以被
λ
\lambda
λ 所度量。定义第
j
j
j 主成分贡献率
c
j
=
λ
j
∑
j
=
1
n
λ
j
c_j = \frac{\lambda_j}{\sum_{j = 1}^n \lambda_j}
cj=∑j=1nλjλj
不难看出随着 j j j 的增大,贡献率在逐渐减小,但累积贡献率 ∑ i = 1 j c i \sum_{i = 1}^j c_i ∑i=1jci 却在增大。实际应用中,一般对累积贡献率设定某个阈值 ξ \xi ξ 来确定主成分的个数。
被提取率
对于原数据中的每个特征,其信息可能分散到多个主成分中
x
=
[
u
1
,
u
2
,
…
,
u
n
]
y
x = [u_1, u_2, \dots, u_n]y
x=[u1,u2,…,un]y
我们同样使用方差作为信息的度量,设
V
a
r
(
x
i
)
=
σ
i
2
=
V
a
r
(
∑
j
=
1
n
(
u
j
)
i
F
j
)
=
∑
j
=
1
n
(
u
j
)
i
2
λ
j
Var(x_i) = \sigma_i^2 = Var\left(\sum_{j = 1}^n (u_j)_iF_j\right) = \sum_{j = 1}^n (u_j)_i^2\lambda_j
Var(xi)=σi2=Var(j=1∑n(uj)iFj)=j=1∑n(uj)i2λj
其中
(
u
j
)
i
(u_j)_i
(uj)i 表示主成分
u
j
u_j
uj 的第
i
i
i 个元素。定义
Ω
i
=
∑
j
=
1
M
(
u
j
)
i
2
λ
j
σ
i
2
\Omega_i = \sum_{j = 1}^M \frac{(u_j)_i^2\lambda_j}{\sigma_i^2}
Ωi=j=1∑Mσi2(uj)i2λj
为特征
x
i
x_i
xi 的被提取率。事实上相关系数
ρ
(
x
i
,
F
j
)
=
(
u
j
)
i
λ
j
σ
i
\rho(x_i, F_j) = \frac{(u_j)_i\sqrt{\lambda_j}}{\sigma_i}
ρ(xi,Fj)=σi(uj)iλj
因此被提取率还可以被定义为
Ω
i
=
∑
j
=
1
M
ρ
2
(
x
i
,
F
j
)
\Omega_i = \sum_{j = 1}^M \rho^2(x_i, F_j)
Ωi=j=1∑Mρ2(xi,Fj)
Stochastic Neighbor Embedding
SNE 方法由 Hinton 于 2002 年提出,其基本思想是在低维空间中保持样本在原高维空间中的距离分布。具体来说,对于样本对 ( i , j ) (i, j) (i,j) ,使用 d i j d_{ij} dij 表示其距离。 SNE 使用类似 Softmax 的方式激活距离度量
p i j = exp ( − d i j 2 ) ∑ k ≠ i exp ( − d i k 2 ) , p_{i j}=\frac{\exp \left(-d_{i j}^{2}\right)}{\sum_{k \neq i} \exp \left(-d_{i k}^{2}\right)}, pij=∑k=iexp(−dik2)exp(−dij2),
类似地,低维空间中的距离度量表示为
q i j = exp ( − d ~ i j 2 ) ∑ k ≠ i exp ( − d ~ i k 2 ) , q_{i j}=\frac{\exp \left(-\tilde d_{i j}^{2}\right)}{\sum_{k \neq i} \exp \left(-\tilde d_{i k}^{2}\right)}, qij=∑k=iexp(−d~ik2)exp(−d~ij2),
其中 d ~ i j \tilde d_{ij} d~ij 表示样本对 ( i , j ) (i, j) (i,j) 在低维空间中的距离。 为了保持降维前后,样本之间的距离关系,SNE 最小化 p i j p_{ij} pij 和 q i j q_{ij} qij 之间的 KL 散度
C = ∑ i K L ( P i ∥ Q i ) = ∑ i j p i j log p i j q i j . C = \sum_{i} KL(P_i\|Q_i) = \sum_{ij} p_{ij}\log\frac{p_{ij}}{q_{ij}}. C=i∑KL(Pi∥Qi)=ij∑pijlogqijpij.
距离度量 d i j d_{ij} dij 可以作为输入,也可以通过高维空间的样本计算出来
d i j 2 = ∥ x i − x j ∥ 2 2 σ i 2 , d_{i j}^{2}=\frac{\left\|\mathbf{x}_{i}-\mathbf{x}_{j}\right\|^{2}}{2 \sigma_{i}^{2}}, dij2=2σi2∥xi−xj∥2,
其中 x i x_i xi 和 x j x_j xj 分别表示样本 i i i 和 j j j 在高维空间中的特征表示。 σ i \sigma_i σi 可以人工设置,也可以通过求解 log k = H ( P i ) = − ∑ j p i j log p i j \log k = H(P_i) = -\sum_{j} p_{ij} \log p_{ij} logk=H(Pi)=−∑jpijlogpij 得到,其中 k k k 是一个手工设置的超参数,称为困惑度(perplexity)。类似地,低维空间中的距离定义为
d ~ i j 2 = ∥ y i − y j ∥ 2 , \tilde d_{i j}^{2}=\left\|\mathbf{y}_{i}-\mathbf{y}_{j}\right\|^{2}, d~ij2=∥yi−yj∥2,
其中 y i \mathbf{y}_i yi 和 y j \mathbf{y}_j yj 分别表示样本 i i i 和 j j j 在低维空间中的特征表示。
Visualizing Data using t-SNE
针对 SNE 方法的两个问题
- 损失函数难以优化
- 拥挤问题(crowding problem)
t-SNE 做出了两点改进
- 将高维空间的距离度量改为对称形式,以简化 SNE 损失函数的梯度
- 将低维空间的距离度量改为学生 t 分布
对称 SNE
SNE 方法中,样本对 ( i , j ) (i, j) (i,j) 的距离度量 p i j p_{ij} pij 和样本对 ( j , i ) (j, i) (j,i) 的距离度量 p j i p_{ji} pji 不相等,这是因为 σ i \sigma_i σi 和 σ j \sigma_j σj 不相等导致的。一个直观的想法是对所有样本对使用相同的 σ \sigma σ 。但是当数据集中存在离群点时,这样的修改会带来问题。设 x i \mathbf{x}_i xi 是一个离群点,则对于任意一个样本 x j \mathbf{x}_j xj , p i j p_{ij} pij 的值很小。因此 y i \mathbf{y}_i yi 的位置基本不影响 SNE 的损失函数,导致 y i \mathbf{y}_i yi 无法反应 x i \mathbf{x}_i xi 所包含的信息。
为了解决这个问题,对称 SNE 重新定义邻居概率为
p i j ← p i j + p j i 2 . p_{ij} \leftarrow \frac{p_{ij} + p_{ji}}{2}. pij←2pij+pji.
需要注意,这一定义只对高维空间中的距离度量生效,因为低维空间的距离度量已经是对称形式了。对称 SNE 的损失函数具有简单的梯度函数
δ C δ y i = 4 ∑ j ( y i − y j ) ( p i j − q i j ) . \frac{\delta C}{\delta \mathbf{y}_{i}}=4 \sum_{j}\left(\mathbf{y}_{i}-\mathbf{y}_{j}\right)\left(p_{i j}-q_{i j}\right). δyiδC=4j∑(yi−yj)(pij−qij).
作为对比, SNE 的损失函数如下
∂ C ∂ y i = 2 ∑ j ( y i − y j ) ( p i j − q i j + p j i − q j i ) . \frac{\partial C}{\partial \mathbf{y}_{i}}=2 \sum_{j}\left(\mathbf{y}_{i}-\mathbf{y}_{j}\right)\left(p_{i j}-q_{i j}+p_{j i}-q_{j i}\right). ∂yi∂C=2j∑(yi−yj)(pij−qij+pji−qji).
t-SNE
t-SNE 方法是 SNE 方法的改进,同样由 Hinton 提出。想象二维曲线流形上的一系列点,将其映射到高维空间中。下图中的“瑞士卷”数据集就是这样的一个例子。显然,我们可以在二维空间中重建这些点之间的距离关系。
下面想象一个十维空间中的流形(例如 MNIST 手写数字数据集),将其表示为高维空间中的一系列样本点。有许多可能的原因使得这些样本被映射到二维空间后不能保持距离关系。首先,十维空间中可能有至多 11 个相互等距的样本点。想要在二维空间中找到 11 个相互等距的样本点却是不可能的。另一个相关的问题是拥挤问题。如果要在二维空间中准确建模相近样本的距离,那么距离稍远的样本就需要被放在二维空间中非常远的位置。在 SNE 中使用样本间的弹簧连接来避免样本在低维空间中过于分散。
t-SNE 使用学生 t 分布建模低维空间的样本距离。相比 SNE 中使用的正态分布, t 分布的尾部概率更大,从而在样本间提供适当的引力。具体来说, t-SNE 使用下式计算 q i j q_{ij} qij
q i j = ( 1 + ∥ y i − y j ∥ 2 ) − 1 ∑ k ≠ l ( 1 + ∥ y k − y l ∥ 2 ) − 1 . q_{i j}=\frac{\left(1+\left\|\mathbf{y}_{i}-\mathbf{y}_{j}\right\|^{2}\right)^{-1}}{\sum_{k \neq l}\left(1+\left\|\mathbf{y}_{k}-\mathbf{y}_{l}\right\|^{2}\right)^{-1}}. qij=∑k=l(1+∥yk−yl∥2)−1(1+∥yi−yj∥2)−1.
t-SNE 的梯度函数如下
δ C δ y i = 4 ∑ j ( y i − y j ) ( p i j − q i j ) ( 1 + ∥ y i − y j ∥ 2 ) − 1 . \frac{\delta C}{\delta \mathbf{y}_{i}}=4 \sum_{j}\left(\mathbf{y}_{i}-\mathbf{y}_{j}\right)\left(p_{i j}-q_{i j}\right)\left(1+\left\|y_{i}-y_{j}\right\|^{2}\right)^{-1}. δyiδC=4j∑(yi−yj)(pij−qij)(1+∥yi−yj∥2)−1.
参考资料
- Bellman, R. (1957). Dynamic Programming.
- Chmiel, E., & Moore, C. Curse of dimensionality. Reference article, Radiopaedia.org. (accessed on 27 Mar 2022) https://doi.org/10.53347/rID-69156
- Understanding Curse of Dimensionality
- Shlens, J. (2003). A Tutorial on Principal Component Analysis. http://arxiv.org/abs/1404.1100
- Hinton, G., & Roweis, S. (2002). Stochastic Neighbor Embedding. Annual Conference on Neural Information Processing Systems.
- van der Maaten, L., & Hinton, G. (2008). Visualizing Data using t-SNE. Journal of Machine Learning Research, 9, 2579–2605.