外观
t-SNE 与 SNE 的区别是什么?
t-SNE vs. SNE — What's the difference?
在本章中,让我们继续讨论 t-SNE 算法。t-SNE 算法是 SNE 算法的改进版本,两者都用于降维。

SNE(不是 t-SNE)的核心思想如下:
- 步骤 1)对于给定高维数据中的每一个点,将其到所有其他点的高维欧几里得距离(distance)转换为条件高斯概率。
- 例如,考虑下面左边数据集中被标记为红色的那个点。
- 将到所有其他点的欧几里得距离转换为高斯概率(上面右侧的分布)可以看出,其他红色点比其他点更有可能是它的邻居。

- 步骤 2)对于每一个数据点 x,在二维空间中随机初始化它对应的 y。这些将作为我们的投影。
- 步骤 3)就像我们在步骤 1 中在高维空间中定义条件概率一样,我们再次使用高斯分布,在低维空间中定义条件概率。
- 步骤 4)现在,每个数据点(i)都有一个高维概率分布和一个对应的低维分布:
- 目标是让这两个概率分布相匹配。因此,我们可以让对应 y 的位置变为可学习的,从而最小化这个差异。
- 使用 KL 散度作为损失函数可以帮助我们实现这一点。它衡量的是当我们用分布 Q 来近似分布 P 时,会损失多少信息。



- 理想情况下,我们希望损失值最小(即零),而这将在 P=Q 时实现。
- 模型可以用梯度下降来训练,效果相当不错。例如,下图展示了 SNE 算法在 256 维手写数字上生成的二维可视化:
- SNE 生成了很好的簇。更令人惊叹的是,像方向、倾斜度和笔画粗细这样的属性在每个簇内的空间中变化得很平滑。如下图所示:



不过,它也有一些局限性,而 t-SNE 算法正是针对这些局限性进行了改进。注意 SNE 生成的簇分离得并不好。

在这里,可以合理地假设原始数据簇——也就是处于 256 维空间中的那些簇——很可能是分离良好的。因此:
- 所有的“0”应该聚在一起,但与其他数字分离良好。
- 所有的“1”应该聚在一起,但与其他数字分离良好。
- 依此类推。
然而,SNE 仍然会产生紧密挤压在一起的簇。这也被称为“拥挤问题(crowding problem)”。为了消除这个问题,人们提出了 t-SNE,全称为 t-分布随机邻域嵌入(t-distributed Stochastic Neighbor Embedding,t-SNE)。区别如下。回想一下,在 SNE 中,我们使用高斯分布来定义低维条件概率。但它并不能产生分离良好的簇。一种解决方案是使用其他某种概率分布,使得对于相距较远的点,我们得到的条件概率值与用高斯分布得到的相同,但对应的欧几里得距离更大。让我稍微简化一下。比较下面这两个分布:

注意,高斯分布在一个较小的距离处就达到了某个特定的低概率密度值。而 t 分布则在更大的距离处才达到它。这正是我们想要实现的效果。我们需要一个尾部更重的分布,这样我们仍然可以最小化两个概率分布之间的差异,但在低维空间中对应的距离更大。
Student t 分布正好适合这个用途。下面的图像展示了这一改变带来的差异:

如上所示:
- SNE 产生紧密挤压的簇。
- t-SNE 产生分离良好的簇。
这就是为什么 t-SNE 中要使用 t 分布的原因。话虽如此,除了能产生分离良好的簇之外,使用 Student t 分布还有更多优点。例如,在 Student t 分布下计算一个点的密度,比在高斯分布下要快得多。