概述

t分布随机邻域嵌入(t-Distributed Stochastic Neighbor Embedding, t-SNE)是一种用于高维数据可视化的非线性降维技术,由van der Maaten和Hinton于2008年提出。1

t-SNE的核心思想是:在高维空间中相似的点在低维空间中也应该保持相似。与线性方法(如PCA)不同,t-SNE能够保留数据的局部结构,非常适合用于探索性数据分析和深度学习模型特征的可视化。


1. 从SNE到t-SNE

1.1 随机邻域嵌入(SNE)

SNE的基本思想是将高维数据点之间的相似性转换为概率分布,然后试图在低维空间中找到与该分布相似的分布。

高维空间的概率分布

对于高维空间中的任意两个点 ,定义条件概率:

其中 是以点 为中心的高斯分布的标准差,困惑度(perplexity)与其相关:

其中 是熵。

低维空间的概率分布

在低维空间(通常为2维或3维)中,对应的点 的相似性定义为:

优化目标:通过最小化高维和低维分布之间的KL散度来找到最优的低维表示:

1.2 对称SNE

原始SNE的梯度计算复杂,对称SNE通过使用联合概率简化了这一过程:

1.3 t-SNE的创新

t-SNE相比SNE做出了两个关键改进:

  1. 使用t分布代替高斯分布:低维空间使用自由度为1的t分布(柯西分布)
  2. 对称形式:使用联合概率的简化形式

2. t-SNE核心算法

2.1 低维空间的t分布

t-SNE使用Student t分布(自由度为1)定义低维空间的相似性:

为什么使用t分布?

  1. 重尾性质:t分布的尾部比高斯分布更重,这意味着相距较远的点在低维空间中可以相距更远
  2. 解决拥挤问题:在高维空间中,相似的点之间存在大量”中间距离”的点,这些点在低维空间中会相互挤压,t分布的重尾性质有效缓解了这一问题

2.2 梯度推导

KL散度关于 的梯度为:

这个梯度可以理解为排斥力吸引力的组合:

  • 时,梯度指向 (吸引)
  • 时,梯度远离 (排斥)

2.3 算法流程

输入:高维数据 X = {x_1, ..., x_n},困惑度 Perp,迭代次数 T,学习率 η
输出:低维表示 Y = {y_1, ..., y_n}

1. 计算高维空间的成对距离和条件概率 p_{j|i}
2. 使用二分搜索找到满足困惑度要求的 σ_i
3. 令 p_{ij} = (p_{j|i} + p_{i|j}) / (2n)
4. 初始化 Y(使用小的随机值或PCA结果)
5. 对 t = 1, 2, ..., T:
   a. 计算 q_{ij}(使用t分布)
   b. 计算梯度 ∂C/∂y_i
   c. 更新 y_i ← y_i - η ∂C/∂y_i
   d. (可选)应用动量
6. 返回 Y

3. 关键参数分析

3.1 困惑度(Perplexity)

困惑度控制每个点的有效邻居数,公式为:

经验法则

  • 困惑度5-50适用于大多数数据集
  • 较大的困惑度会考虑更多的全局结构
  • 建议从30开始尝试

3.2 学习率

  • 默认值通常为200-1000
  • 学习率过低会导致陷入局部最优
  • 学习率过高会导致低维空间中的点”飞散”

3.3 早期夸大(Early Exaggeration)

在训练初期,将 乘以一个大于1的因子(如4或12),使得高维空间中的相似点在早期就能聚集在一起,加速聚类结构的形成。

3.4 Barnes-Hut优化

当数据规模较大时(),可以使用Barnes-Hut算法将计算复杂度从 降低到

  • 使用四叉树/八叉树近似计算梯度
  • 仅考虑距离小于阈值 的邻居
  • 权衡精度与速度

4. 与深度学习的结合

t-SNE在深度学习中有广泛的应用场景:

4.1 CNN特征可视化

t-SNE可以将预训练CNN(如ResNet、VGG)提取的特征投影到2D空间,用于:

  • 分析不同类别的特征分布
  • 发现潜在的聚类结构
  • 检测异常样本
import numpy as np
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
 
# 假设 features 是CNN提取的特征矩阵 (n_samples, n_features)
# labels 是对应的类别标签
 
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
features_2d = tsne.fit_transform(features)
 
plt.scatter(features_2d[:, 0], features_2d[:, 1], c=labels)
plt.colorbar()
plt.title('CNN Features Visualized with t-SNE')
plt.show()

4.2 Transformer注意力可视化

在Transformer模型中,可以使用t-SNE分析:

  • 注意力权重的分布模式
  • 不同头(head)捕获的关系类型
  • 层与层之间的表示变化

4.3 自编码器潜在空间分析

变分自编码器(VAE)或普通自编码器的潜在空间可以通过t-SNE可视化:

  • 验证潜在空间的正则化效果
  • 分析生成样本的多样性
  • 检测潜在空间中的异常区域

5. 实践指南

5.1 参数选择建议

参数推荐范围说明
perplexity5-50通常30是一个好起点
n_components2或3可视化通常用2
learning_rate200-1000或”auto”
n_iter1000-5000通常足够收敛
early_exaggeration12帮助聚类形成

5.2 常见问题与解决方案

问题1:拥挤问题

  • 表现:不同类别在中心区域重叠
  • 解决:尝试不同的perplexity,增加迭代次数

问题2:类内结构消失

  • 表现:同一类别的点分散
  • 解决:减小perplexity,增加迭代

问题3:随机种子敏感

  • 解决:多次运行取稳定结果

问题4:大数据集运行慢

  • 解决:先PCA降维到50维,或使用Barnes-Hut优化

5.3 sklearn实现

from sklearn.manifold import TSNE
 
# 基本用法
tsne = TSNE(n_components=2, perplexity=30, n_iter=1000, random_state=42)
X_tsne = tsne.fit_transform(X)
 
# 大数据集优化
tsne = TSNE(n_components=2, perplexity=30, method='barnes_hut', angle=0.5)
X_tsne = tsne.fit_transform(X)

6. 理论局限

6.1 理论基础薄弱

t-SNE缺乏像PCA那样坚实的理论基础,其优化目标是启发式的。

6.2 无法保留全局结构

t-SNE主要保留局部结构,类与类之间的全局距离关系可能失真。

6.3 随机性

每次运行结果不同(除非固定随机种子)。

6.4 无法处理新数据

t-SNE不提供将新数据映射到低维空间的函数(无out-of-sample extension)。

6.5 对称性假设

对称SNE简化了原始SNE,但可能丢失某些结构信息。


7. 相关方法

方法类型特点
PCA线性保留全局方差,适合预处理
UMAP非线性保留局部和全局结构,速度更快
LLE非线性保留局部线性关系
ISOMAP非线性保留测地距离

参考资料

Footnotes

  1. van der Maaten, L., & Hinton, G. (2008). Visualizing Data using t-SNE. Journal of Machine Learning Research, 9, 2579-2605.