本文主要介绍一种用于降维和可视化的算法t-SNE,并且对其原理与使用进行讲解,本篇为第一部分
t-SNE与SNE
SNE
t-SNE的全称是t-Distributed Stochastic Neighbor Embedding,SNE就是 Stochastic Neighbor Embedding,所以要想了解t-SNE势必要先对SNE有所了解
SNE algorithm:
在高维空间中,我们如何考虑两个点之间的相似性呢,SNE选取的方法是使用一个条件概率来表示,首先选取一个中心点xi,假设以xi为中心存在一个高斯分布,样本集中任意一点xj所在之处的相对概率密度的高低就是该点与xi的相似性,即pj∣i=Σk=iexp(−∣∣xi−xk∣∣2/2σi2)exp(−∣∣xi−xj∣∣2/2σi2),规定pi∣i=0.
当降维之后,xi与xj在低维空间内对应的点是yi与yj,在低维空间内两个点之间的相似性用qj∣i来表示,具体表示为qj∣i=Σk=iexp(−∣∣yi−yk∣∣2)exp(−∣∣yi−yj∣∣2),相当于设定了σ为1/2,和上面一样,规定qi∣i=0
SNE认为如果我是一个比较好的降维方法,那我就应该做到能够在降维之后比较好的保留两个点之间的相似性,也就是应该让pj∣i和qj∣i尽可能相近。那么对于整个样本集而言,SNE就是希望能够找个一个好的数据的低维表示,使任意两点之间的相似性保持降维前后尽可能相近,所以SNE设置了如下的cost function,然后用梯度下降去优化
C=ΣiKL(Pi∣∣Qi)=ΣiΣjpj∣ilogqj∣ipj∣i
KL表示KL散度,上面式子的意义是,对于每一个i,都有一个降维前的相似性分布后降维后的相似性分布,所以我要做的是对每个i的前后分布的KL散度求和,然后最小化这个式子。
那么接下来的问题就是pj∣i里面的σi怎么搞呢?对于不同的xi最适合的σi显然不同,以一维高斯分布为例,大部分周围的点都集中在xi附近的话,σi应该比较小,如果分布较分散则相反。SNE就把决定权交给了我们,由使用者指定一个数值Perp(一般取5-50),SNE通过调整σi的值,使得2−Σjpj∣ilog2pj∣i=Perp,指数上的式子大家熟悉决策树的应该会感觉熟悉,可以用来描述混乱度或者纯度。
确定了损失函数的表示之后,接着使用梯度下降优化,
∂yi∂C=2Σj(pj∣i−qj∣i−pi∣j−qi∣j)(yi−yj)
t-SNE
由于SNE的cost function不好优化,并且降维后的点有可能会聚集,为改善这些缺点,t-SNE出现了。那么t-SNE具体做了哪些改进呢?
对称SNE
首先,因为SNE的KL散度使用的p不对称,即pi∣j=pj∣i,对称SNE提出了一种对称的形式,
C=ΣiKL(Pi∣∣Qi)=ΣiΣjpijlogqijpij
pij=Σk=lexp(−∣∣xl−xk∣∣2/2σ2)exp(−∣∣xi−xj∣∣2/2σ2) ,qij=Σk=lexp(−∣∣yl−yk∣∣2)exp(−∣∣yi−yj∣∣2) ,同时规定pii和qii为0,在原文中提到,如果xi是离群值,导致所有的∣∣xi−xj∣∣2都很大,那么所有的pij就都很小,那么可能会导致yi对cost function影响很小,导致xi无法被很好的降维,所以最终采取的方式是pij=2npi∣j+pj∣i,这样可以保证Σjpij=2nΣjpi∣j+Σjpj∣i=2n1+Σjpj∣i>2n1,所以保证了xi对于损失函数的贡献是有一席之地的。
在低维空间使用t分布(具体是标准柯西分布)代替高斯分布
此时,qij=Σk=l(1+∣∣yl−yk∣∣2)−1(1+∣∣yi−yj∣∣2)−1
在这两点的改动下,此时
∂yi∂C=4Σj(pij−qij)(yi−yj)(1+∣∣yi−yj∣∣2)−1
(具体推导过程可以看原文的附录)
t-SNE伪代码

下篇文章将会具体介绍t-SNE算法的代码实现细节
参考资料:Visualizing Data using t-SNE