机器学习降维方法 t-SNE 详解(一)

本文主要介绍一种用于降维和可视化的算法t-SNE,并且对其原理与使用进行讲解,本篇为第一部分

t-SNE与SNE

SNE

t-SNE的全称是t-Distributed Stochastic Neighbor Embedding,SNE就是 Stochastic Neighbor Embedding,所以要想了解t-SNE势必要先对SNE有所了解

SNE algorithm
在高维空间中,我们如何考虑两个点之间的相似性呢,SNE选取的方法是使用一个条件概率来表示,首先选取一个中心点 x i x_i xi,假设以 x i x_i xi为中心存在一个高斯分布,样本集中任意一点 x j x_j xj所在之处的相对概率密度的高低就是该点与 x i x_i xi的相似性,即 p j ∣ i = e x p ( − ∣ ∣ x i − x j ∣ ∣ 2 / 2 σ i 2 ) Σ k ≠ i e x p ( − ∣ ∣ x i − x k ∣ ∣ 2 / 2 σ i 2 ) p_{j|i} = \frac{exp(-||x_i-x_j||^2/2\sigma_i^2)}{\Sigma_{k\neq i}exp(-||x_i-x_k||^2/2\sigma_i^2)} pji=Σk=iexp(xixk2/2σi2)exp(xixj2/2σi2),规定 p i ∣ i = 0 p_{i|i}=0 pii=0.

当降维之后, x i x_i xi x j x_j xj在低维空间内对应的点是 y i y_i yi y j y_j yj,在低维空间内两个点之间的相似性用 q j ∣ i q_{j|i} qji来表示,具体表示为 q j ∣ i = e x p ( − ∣ ∣ y i − y j ∣ ∣ 2 ) Σ k ≠ i e x p ( − ∣ ∣ y i − y k ∣ ∣ 2 ) q_{j|i} = \frac{exp(-||y_i-y_j||^2)}{\Sigma_{k\neq i}exp(-||y_i-y_k||^2)} qji=Σk=iexp(yiyk2)exp(yiyj2),相当于设定了 σ \sigma σ 1 / 2 1/\sqrt2 1/2 ,和上面一样,规定 q i ∣ i = 0 q_{i|i}=0 qii=0

SNE认为如果我是一个比较好的降维方法,那我就应该做到能够在降维之后比较好的保留两个点之间的相似性,也就是应该让 p j ∣ i p_{j|i} pji q j ∣ i q_{j|i} qji尽可能相近。那么对于整个样本集而言,SNE就是希望能够找个一个好的数据的低维表示,使任意两点之间的相似性保持降维前后尽可能相近,所以SNE设置了如下的 c o s t   f u n c t i o n cost \ function cost function,然后用梯度下降去优化
C = Σ i K L ( P i ∣ ∣ Q i ) = Σ i Σ j p j ∣ i l o g p j ∣ i q j ∣ i C = \Sigma_{i}KL(P_i||Q_i) = \Sigma_i\Sigma_jp_{j|i}log\frac{p_{j|i}}{q_{j|i}} C=ΣiKL(PiQi)=ΣiΣjpjilogqjipji

K L KL KL表示KL散度,上面式子的意义是,对于每一个 i i i,都有一个降维前的相似性分布后降维后的相似性分布,所以我要做的是对每个 i i i的前后分布的KL散度求和,然后最小化这个式子。

那么接下来的问题就是 p j ∣ i p_{j|i} pji里面的 σ i \sigma_i σi怎么搞呢?对于不同的 x i x_i xi最适合的 σ i \sigma_i σi显然不同,以一维高斯分布为例,大部分周围的点都集中在 x i x_i xi附近的话, σ i \sigma_i σi应该比较小,如果分布较分散则相反。SNE就把决定权交给了我们,由使用者指定一个数值 P e r p Perp Perp(一般取5-50),SNE通过调整 σ i \sigma_i σi的值,使得 2 − Σ j p j ∣ i l o g 2 p j ∣ i = P e r p 2^{-\Sigma_{j}p_{j|i}log_2p_{j|i}} = Perp 2Σjpjilog2pji=Perp,指数上的式子大家熟悉决策树的应该会感觉熟悉,可以用来描述混乱度或者纯度。

确定了损失函数的表示之后,接着使用梯度下降优化,
∂ C ∂ y i = 2 Σ j ( p j ∣ i − q j ∣ i − p i ∣ j − q i ∣ j ) ( y i − y j ) \frac{\partial C}{\partial y_i} = 2\Sigma_{j}(p_{j|i}-q_{j|i}-p_{i|j}-q_{i|j})(y_i-y_j) yiC=2Σj(pjiqjipijqij)(yiyj)

t-SNE

由于SNE的 c o s t   f u n c t i o n cost \ function cost function不好优化,并且降维后的点有可能会聚集,为改善这些缺点,t-SNE出现了。那么t-SNE具体做了哪些改进呢?

对称SNE
首先,因为SNE的 K L KL KL散度使用的 p p p不对称,即 p i ∣ j ≠ p j ∣ i p_{i|j} \neq p_{j|i} pij=pji对称SNE提出了一种对称的形式,
C = Σ i K L ( P i ∣ ∣ Q i ) = Σ i Σ j p i j l o g p i j q i j C = \Sigma_{i}KL(P_i||Q_i) = \Sigma_i\Sigma_jp_{ij}log\frac{p_{ij}}{q_{ij}} C=ΣiKL(PiQi)=ΣiΣjpijlogqijpij

p i j = e x p ( − ∣ ∣ x i − x j ∣ ∣ 2 / 2 σ 2 ) Σ k ≠ l e x p ( − ∣ ∣ x l − x k ∣ ∣ 2 / 2 σ 2 ) p_{ij} = \frac{exp(-||x_i-x_j||^2/2\sigma^2)}{\Sigma_{k\neq l}exp(-||x_l-x_k||^2/2\sigma^2)} pij=Σk=lexp(xlxk2/2σ2)exp(xixj2/2σ2) q i j = e x p ( − ∣ ∣ y i − y j ∣ ∣ 2 ) Σ k ≠ l e x p ( − ∣ ∣ y l − y k ∣ ∣ 2 ) q_{ij} = \frac{exp(-||y_i-y_j||^2)}{\Sigma_{k\neq l}exp(-||y_l-y_k||^2)} qij=Σk=lexp(ylyk2)exp(yiyj2) ,同时规定 p i i p_{ii} pii q i i q_{ii} qii为0,在原文中提到,如果 x i x_i xi是离群值,导致所有的 ∣ ∣ x i − x j ∣ ∣ 2 ||x_i-x_j||^2 xixj2都很大,那么所有的 p i j p_{ij} pij就都很小,那么可能会导致 y i y_i yi c o s t   f u n c t i o n cost \ function cost function影响很小,导致 x i x_i xi无法被很好的降维,所以最终采取的方式是 p i j = p i ∣ j + p j ∣ i 2 n p_{ij}=\frac{p_{i|j}+p_{j|i}}{2n} pij=2npij+pji,这样可以保证 Σ j p i j = Σ j p i ∣ j + Σ j p j ∣ i 2 n = 1 + Σ j p j ∣ i 2 n > 1 2 n \Sigma_{j}p_{ij}=\frac{\Sigma_jp_{i|j}+\Sigma_jp_{j|i}}{2n}=\frac{1+\Sigma_jp_{j|i}}{2n}>\frac{1}{2n} Σjpij=2nΣjpij+Σjpji=2n1+Σjpji>2n1,所以保证了 x i x_i xi对于损失函数的贡献是有一席之地的。

在低维空间使用 t t t分布(具体是标准柯西分布)代替高斯分布
此时, q i j = ( 1 + ∣ ∣ y i − y j ∣ ∣ 2 ) − 1 Σ k ≠ l ( 1 + ∣ ∣ y l − y k ∣ ∣ 2 ) − 1 q_{ij} = \frac{(1 + ||y_i-y_j||^2)^{-1}}{\Sigma_{k\neq l}(1+||y_l-y_k||^2)^{-1}} qij=Σk=l(1+ylyk2)1(1+yiyj2)1

在这两点的改动下,此时
∂ C ∂ y i = 4 Σ j ( p i j − q i j ) ( y i − y j ) ( 1 + ∣ ∣ y i − y j ∣ ∣ 2 ) − 1 \frac{\partial C}{\partial y_i} = 4\Sigma_{j}(p_{ij}-q_{ij})(y_i-y_j)(1+||y_i-y_j||^2)^{-1} yiC=4Σj(pijqij)(yiyj)(1+yiyj2)1
(具体推导过程可以看原文的附录)

t-SNE伪代码
机器学习降维方法 t-SNE 详解(一)_第1张图片
下篇文章将会具体介绍t-SNE算法的代码实现细节

参考资料:Visualizing Data using t-SNE

你可能感兴趣的:(机器学习)