Unsupervised Learning: Neighbor Embedding
如果本文对你有帮助,请给我的github打个star叭,上面附有全系列目录和内容!
更多优质内容欢迎关注我的微信公众号“Sakura的知识库”:
本文介绍了非线性降维的一些算法,包括局部线性嵌入LLE、拉普拉斯特征映射和t分布随机邻居嵌入t-SNE,其中t-SNE特别适用于可视化的应用场景
PCA和Word Embedding介绍了线性降维的思想,而Neighbor Embedding要介绍的是非线性的降维
Manifold Learning
样本点的分布可能是在高维空间里的一个流行(Manifold),也就是说,样本点其实是分布在低维空间里面,只是被扭曲地塞到了一个高维空间里
地球的表面就是一个流行(Manifold),它是一个二维的平面,但是被塞到了一个三维空间里
在Manifold中,只有距离很近的点欧氏距离(Euclidean Distance)才会成立,而在下图的S型曲面中,欧氏距离是无法判断两个样本点的相似程度的
而Manifold Learning要做的就是把这个S型曲面降维展开,把塞在高维空间里的低维空间摊平,此时使用欧氏距离就可以描述样本点之间的相似程度
Locally Linear Embedding
局部线性嵌入,locally linear embedding,简称LLE
假设在原来的空间中,样本点的分布如下所示,我们关注 x i x^i xi和它的邻居 x j x^j xj,用 w i j w_{ij} wij来描述 x i x_i xi和 x j x_j xj的关系
假设每一个样本点
x
i
x^i
xi都是可以用它的neighbor做linear combination组合而成,那
w
i
j
w_{ij}
wij就是拿
x
j
x^j
xj去组合
x
i
x^i
xi时的权重weight,因此找点与点的关系
w
i
j
w_{ij}
wij这个问题就转换成,找一组使得所有样本点与周围点线性组合的差距能够最小的参数
w
i
j
w_{ij}
wij:
∑
i
∣
∣
x
i
−
∑
j
w
i
j
x
j
∣
∣
2
\sum\limits_i||x^i-\sum\limits_j w_{ij}x^j ||_2
i∑∣∣xi−j∑wijxj∣∣2
接下来就要做Dimension Reduction,把
x
i
x^i
xi和
x
j
x^j
xj降维到
z
i
z^i
zi和
z
j
z^j
zj,并且保持降维前后两个点之间的关系
w
i
j
w_{ij}
wij是不变的
LLE的具体做法如下:
-
在原先的高维空间中找到 x i x^i xi和 x j x^j xj之间的关系 w i j w_{ij} wij以后就把它固定住
-
使 x i x^i xi和 x j x^j xj降维到新的低维空间上的 z i z^i zi和 z j z^j zj
-
z i z^i zi和 z j z^j zj需要minimize下面的式子:
∑ i ∣ ∣ z i − ∑ j w i j z j ∣ ∣ 2 \sum\limits_i||z^i-\sum\limits_j w_{ij}z^j ||_2 i∑∣∣zi−j∑wijzj∣∣2 -
即在原本的空间里, x i x^i xi可以由周围点通过参数 w i j w_{ij} wij进行线性组合得到,则要求在降维后的空间里, z i z^i zi也可以用同样的线性组合得到
实际上,LLE并没有给出明确的降维函数,它没有明确地告诉我们怎么从 x i x^i xi降维到 z i z^i zi,只是给出了降维前后的约束条件
在实际应用LLE的时候,对 x i x^i xi来说,需要选择合适的邻居点数目K才会得到好的结果
下图给出了原始paper中的实验结果,K太小或太大得到的结果都不太好,注意到在原先的空间里,只有距离很近的点之间的关系需要被保持住,如果K选的很大,就会选中一些由于空间扭曲才导致距离接近的点,而这些点的关系我们并不希望在降维后还能被保留
Laplacian Eigenmaps
Introduction
另一种方法叫拉普拉斯特征映射,Laplacian Eigenmaps
之前在semi-supervised learning有提到smoothness assumption,即我们仅知道两点之间的欧氏距离是不够的,还需要观察两个点在high density区域下的距离
如果两个点在high density的区域里比较近,那才算是真正的接近
我们依据某些规则把样本点建立graph,那么smoothness的距离就可以使用graph中连接两个点路径上的edges数来近似
Review for Smoothness Assumption
简单回顾一下在semi-supervised里的说法:如果两个点
x
1
x^1
x1和
x
2
x^2
x2在高密度区域上是相近的,那它们的label
y
1
y^1
y1和
y
2
y^2
y2很有可能是一样的
L
=
∑
x
r
C
(
y
r
,
y
^
r
)
+
λ
S
S
=
1
2
∑
i
,
j
w
i
,
j
(
y
i
−
y
j
)
2
=
y
T
L
y
L=\sum\limits_{x^r} C(y^r,\hat y^r) + \lambda S\\ S=\frac{1}{2}\sum\limits_{i,j} w_{i,j}(y^i-y^j)^2=y^TLy
L=xr∑C(yr,y^r)+λSS=21i,j∑wi,j(yi−yj)2=yTLy
其中
C
(
y
r
,
y
^
r
)
C(y^r,\hat y^r)
C(yr,y^r)表示labeled data项,
λ
S
\lambda S
λS表示unlabeled data项,它就像是一个regularization term,用于判断我们当前得到的label是否是smooth的
其中如果点 x i x^i xi与 x j x^j xj是相连的,则 w i , j w_{i,j} wi,j等于相似度,否则为0, S S S的表达式希望在 x i x^i xi与 x j x^j xj很接近的情况下,相似度 w i , j w_{i,j} wi,j很大,而label差距 ∣ y i − y j ∣ |y^i-y^j| ∣yi−yj∣越小越好,同时也是对label平滑度的一个衡量
Application in Unsupervised Task
降维的基本原则:如果
x
i
x^i
xi和
x
j
x^j
xj在high density区域上是相近的,即相似度
w
i
,
j
w_{i,j}
wi,j很大,则降维后的
z
i
z^i
zi和
z
j
z^j
zj也需要很接近,总体来说就是让下面的式子尽可能小
S
=
1
2
∑
i
,
j
w
i
,
j
(
y
i
−
y
j
)
2
S=\frac{1}{2}\sum\limits_{i,j} w_{i,j}(y^i-y^j)^2
S=21i,j∑wi,j(yi−yj)2
注意,与LLE不同的是,这里的
w
i
,
j
w_{i,j}
wi,j表示
x
i
x^i
xi与
x
j
x^j
xj这两点的相似度,上式也可以写成
S
=
∑
i
,
j
w
i
,
j
∣
∣
z
i
−
z
j
∣
∣
2
S=\sum\limits_{i,j} w_{i,j} ||z^i-z^j||_2
S=i,j∑wi,j∣∣zi−zj∣∣2
但光有上面这个式子是不够的,假如令所有的z相等,比如令 z i = z j = 0 z^i=z^j=0 zi=zj=0,那上式就会直接停止更新
在semi-supervised中,如果所有label z i z^i zi都设成一样,会使得supervised部分的 ∑ x r C ( y r , y ^ r ) \sum\limits_{x^r} C(y^r,\hat y^r) xr∑C(yr,y^r)变得很大,因此lost就会很大,但在这里少了supervised的约束,因此我们需要给 z z z一些额外的约束:
- 假设降维后 z z z所处的空间为 M M M维,则 { z 1 , z 2 , . . . , z N } = R M \{z^1,z^2,...,z^N\}=R^M {z1,z2,...,zN}=RM,我们希望降维后的 z z z占据整个 M M M维的空间,而不希望它活在一个比 M M M更低维的空间里
- 最终解出来的 z z z其实就是Graph Laplacian L L L比较小的特征值所对应的特征向量
这也是Laplacian Eigenmaps名称的由来,我们找的 z z z就是Laplacian matrix的特征向量
如果通过拉普拉斯特征映射找到 z z z之后再对其利用K-means做聚类,就叫做谱聚类(spectral clustering)
参考文献:Belkin, M., Niyogi, P. Laplacian eigenmaps and spectral techniques for embedding and clustering. Advances in neural information processing systems . 2002
t-SNE
t-SNE,全称为T-distributed Stochastic Neighbor Embedding,t分布随机邻居嵌入
Shortage in LLE
前面的方法只假设了相邻的点要接近,却没有假设不相近的点要分开
所以在MNIST使用LLE会遇到下图的情形,它确实会把同一个class的点都聚集在一起,却没有办法避免不同class的点重叠在一个区域,这就会导致依旧无法区分不同class的现象
COIL-20数据集包含了同一张图片进行旋转之后的不同形态,对其使用LLE降维后得到的结果是,同一个圆圈代表同张图像旋转的不同姿态,但许多圆圈之间存在重叠
How t-SNE works
做t-SNE同样要降维,在原来 x x x的分布空间上,我们需要计算所有 x i x^i xi与 x j x^j xj之间的相似度 S ( x i , x j ) S(x^i,x^j) S(xi,xj)
然后需要将其做归一化: P ( x j ∣ x i ) = S ( x i , x j ) ∑ k ≠ i S ( x i , x k ) P(x^j|x^i)=\frac{S(x^i,x^j)}{\sum_{k\ne i}S(x^i,x^k)} P(xj∣xi)=∑k=iS(xi,xk)S(xi,xj),即 x j x^j xj与 x i x^i xi的相似度占所有与 x i x^i xi相关的相似度的比例
将 x x x降维到 z z z,同样可以计算相似度 S ′ ( z i , z j ) S'(z^i,z^j) S′(zi,zj),并做归一化: Q ( z j ∣ z i ) = S ′ ( z i , z j ) ∑ k ≠ i S ′ ( z i , z k ) Q(z^j|z^i)=\frac{S'(z^i,z^j)}{\sum_{k\ne i}S'(z^i,z^k)} Q(zj∣zi)=∑k=iS′(zi,zk)S′(zi,zj)
注意,这里的归一化是有必要的,因为我们无法判断在 x x x和 z z z所在的空间里, S ( x i , x j ) S(x^i,x^j) S(xi,xj)与 S ′ ( z i , z j ) S'(z^i,z^j) S′(zi,zj)的范围是否是一致的,需要将其映射到一个统一的概率区间
我们希望找到的投影空间 z z z,可以让 P ( x j ∣ x i ) P(x^j|x^i) P(xj∣xi)和 Q ( z j ∣ z i ) Q(z^j|z^i) Q(zj∣zi)的分布越接近越好
用于衡量两个分布之间相似度的方法就是KL散度(KL divergence),我们的目标就是让
L
L
L越小越好:
L
=
∑
i
K
L
(
P
(
∗
∣
x
i
)
∣
∣
Q
(
∗
∣
z
i
)
)
=
∑
i
∑
j
P
(
x
j
∣
x
i
)
l
o
g
P
(
x
j
∣
x
i
)
Q
(
z
j
∣
z
i
)
L=\sum\limits_i KL(P(*|x^i)||Q(*|z^i))\\ =\sum\limits_i \sum\limits_jP(x^j|x^i)log \frac{P(x^j|x^i)}{Q(z^j|z^i)}
L=i∑KL(P(∗∣xi)∣∣Q(∗∣zi))=i∑j∑P(xj∣xi)logQ(zj∣zi)P(xj∣xi)
KL Divergence
这里简单补充一下KL散度的基本知识
KL 散度,最早是从信息论里演化而来的,所以在介绍 KL 散度之前,我们要先介绍一下信息熵,信息熵的定义如下:
H
=
−
∑
i
=
1
N
p
(
x
i
)
⋅
l
o
g
p
(
x
i
)
H=-\sum\limits_{i=1}^N p(x_i)\cdot log\ p(x_i)
H=−i=1∑Np(xi)⋅log p(xi)
其中
p
(
x
i
)
p(x_i)
p(xi)表示事件
x
i
x_i
xi发生的概率,信息熵其实反映的就是要表示一个概率分布所需要的平均信息量
在信息熵的基础上,我们定义KL散度为:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
N
p
(
x
i
)
⋅
(
l
o
g
p
(
x
i
)
−
l
o
g
q
(
x
i
)
)
=
∑
i
=
1
N
p
(
x
i
)
⋅
l
o
g
p
(
x
i
)
q
(
x
i
)
D_{KL}(p||q)=\sum\limits_{i=1}^N p(x_i)\cdot (log\ p(x_i)-log\ q(x_i))\\ =\sum\limits_{i=1}^N p(x_i)\cdot log\frac{p(x_i)}{q(x_i)}
DKL(p∣∣q)=i=1∑Np(xi)⋅(log p(xi)−log q(xi))=i=1∑Np(xi)⋅logq(xi)p(xi)
D
K
L
(
p
∣
∣
q
)
D_{KL}(p||q)
DKL(p∣∣q)表示的就是概率
q
q
q与概率
p
p
p之间的差异,很显然,KL散度越小,说明概率
q
q
q与概率
p
p
p之间越接近,那么预测的概率分布与真实的概率分布也就越接近
How to use
t-SNE会计算所有样本点之间的相似度,运算量会比较大,当数据量大的时候跑起来效率会比较低
常见的做法是对原先的空间用类似PCA的方法先做一次降维,然后用t-SNE对这个简单降维空间再做一次更深层次的降维,以期减少运算量
值得注意的是,t-SNE的式子无法对新的样本点进行处理,一旦出现新的 x i x^i xi,就需要重新跑一遍该算法,所以t-SNE通常不是用来训练模型的,它更适合用于做基于固定数据的可视化
t-SNE常用于将固定的高维数据可视化到二维平面上
Similarity Measure
如果根据欧氏距离计算降维前的相似度,往往采用RBF function S ( x i , x j ) = e − ∣ ∣ x i − x j ∣ ∣ 2 S(x^i,x^j)=e^{-||x^i-x^j||_2} S(xi,xj)=e−∣∣xi−xj∣∣2,这个表达式的好处是,只要两个样本点的欧氏距离稍微大一些,相似度就会下降得很快
还有一种叫做SNE的方法,它在降维后的新空间采用与上述相同的相似度算法 S ′ ( z i , z j ) = e − ∣ ∣ z i − z j ∣ ∣ 2 S'(z^i,z^j)=e^{-||z^i-z^j||_2} S′(zi,zj)=e−∣∣zi−zj∣∣2
对t-SNE来说,它在降维后的新空间所采取的相似度算法是与之前不同的,它选取了t-distribution中的一种,即 S ′ ( z i , z j ) = 1 1 + ∣ ∣ z i − z j ∣ ∣ 2 S'(z^i,z^j)=\frac{1}{1+||z^i-z^j||_2} S′(zi,zj)=1+∣∣zi−zj∣∣21
以下图为例,假设横轴代表了在原先 x x x空间上的欧氏距离或者做降维之后在 z z z空间上的欧氏距离,红线代表RBF function,是降维前的分布;蓝线代表了t-distribution,是降维后的分布
你会发现,降维前后相似度从RBF function到t-distribution:
- 如果原先两个点距离( Δ x \Delta x Δx)比较近,则降维转换之后,它们的相似度( Δ y \Delta y Δy)依旧是比较接近的
- 如果原先两个点距离( Δ x \Delta x Δx)比较远,则降维转换之后,它们的相似度( Δ y \Delta y Δy)会被拉得更远
也就是说t-SNE可以聚集相似的样本点,同时还会放大不同类别之间的距离,从而使得不同类别之间的分界线非常明显,特别适用于可视化,下图则是对MNIST和COIL-20先做PCA降维,再做t-SNE降维可视化的结果:
Conclusion
小结一下,本文主要介绍了三种非线性降维的算法:
- LLE(Locally Linear Embedding),局部线性嵌入算法,主要思想是降维前后,每个点与周围邻居的线性组合关系不变, x i = ∑ j w i j x j x^i=\sum\limits_j w_{ij}x^j xi=j∑wijxj、 z i = ∑ j w i j z j z^i=\sum\limits_j w_{ij}z^j zi=j∑wijzj
- Laplacian Eigenmaps,拉普拉斯特征映射,主要思想是在high density的区域,如果 x i x^i xi、 x j x^j xj这两个点相似度 w i , j w_{i,j} wi,j高,则投影后的距离 ∣ ∣ z i − z j ∣ ∣ 2 ||z^i-z^j||_2 ∣∣zi−zj∣∣2要小
- t-SNE(t-distribution Stochastic Neighbor Embedding),t分布随机邻居嵌入,主要思想是,通过降维前后计算相似度由RBF function转换为t-distribution,在聚集相似点的同时,拉开不相似点的距离,比较适合用在数据固定的可视化领域