t-SNE算法的原理与降维可视化过程
题目描述
t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非线性降维算法,特别适用于高维数据的可视化。假设你有一组1000维的数据点(如MNIST手写数字图像),需要将其投影到2维平面进行可视化,同时尽可能保留原始空间中的局部结构关系(即相似样本在低维空间中仍保持接近)。请详细讲解t-SNE的实现步骤和数学原理。
解题过程
1. 算法目标
t-SNE的核心思想是:在高维空间和低维空间中,分别用概率分布表示样本之间的相似度,并通过梯度下降最小化两个概率分布的差异(KL散度),使得低维投影能保留高维数据的局部结构。
2. 高维空间相似度计算
设高维数据点集合为 \(\{x_1, x_2, ..., x_n\}\):
- 步骤1:计算两两点之间的条件概率 \(p_{j|i}\),表示 \(x_i\) 选择 \(x_j\) 作为邻居的概率:
\[ p_{j|i} = \frac{\exp(-\|x_i - x_j\|^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-\|x_i - x_k\|^2 / 2\sigma_i^2)} \]
其中 \(\sigma_i\) 是以 \(x_i\) 为中心的高斯分布方差,通过困惑度(Perplexity)调节。困惑度定义为:
\[ \text{Perplexity}(p_i) = 2^{H(p_i)}, \quad H(p_i) = -\sum_j p_{j|i} \log_2 p_{j|i} \]
算法通过二分搜索调整 \(\sigma_i\),使得每个点的条件概率分布的困惑度等于用户设定值(通常为5~50)。
- 步骤2:对称化条件概率,得到联合概率 \(p_{ij}\):
\[ p_{ij} = \frac{p_{j|i} + p_{i|j}}{2n} \]
此分布能避免异常值的影响,且满足 \(\sum_{i,j} p_{ij} = 1\)。
3. 低维空间相似度计算
设低维投影点为 \(\{y_1, y_2, ..., y_n\}\)(初始化为随机分布):
- 使用t分布(自由度为1)计算低维空间相似度 \(q_{ij}\):
\[ q_{ij} = \frac{(1 + \|y_i - y_j\|^2)^{-1}}{\sum_{k \neq l} (1 + \|y_k - y_l\|^2)^{-1}} \]
选择t分布而非高斯分布的原因:t分布尾部更厚重,能避免高维空间中不同类别的点在低维空间中被过度挤压。
4. 最小化KL散度
目标是最小化高维分布 \(P\) 和低维分布 \(Q\) 的KL散度:
\[C = KL(P \| Q) = \sum_{i \neq j} p_{ij} \log \frac{p_{ij}}{q_{ij}} \]
- 梯度计算:损失函数对 \(y_i\) 的梯度为:
\[ \frac{\partial C}{\partial y_i} = 4 \sum_{j \neq i} (p_{ij} - q_{ij})(y_i - y_j)(1 + \|y_i - y_j\|^2)^{-1} \]
梯度含义:当 \(p_{ij} > q_{ij}\) 时,高维相似点未在低维空间接近,需将 \(y_i\) 拉向 \(y_j\);反之则推远。
5. 优化过程
- 初始化:低维点 \(y_i\) 通常从各向同性高斯分布随机采样。
- 梯度下降:使用动量加速更新:
\[ y_i^{(t)} = y_i^{(t-1)} + \eta \frac{\partial C}{\partial y_i} + \alpha(t) \left( y_i^{(t-1)} - y_i^{(t-2)} \right) \]
其中 \(\eta\) 是学习率,\(\alpha(t)\) 是动量系数。
- 技巧:
- 早压缩:初始阶段通过增大梯度中的吸引力项,避免点分散过大。
- 早夸大:前期放大 \(p_{ij}\),强化局部结构的学习。
6. 关键特性
- 局部结构保持:t-SNE倾向于保留邻近点关系,但全局结构(如类别间距离)可能失真。
- 超参数敏感:困惑度影响邻居数量,过大则保留全局结构,过小则聚焦局部聚类。
- 计算复杂度:原始版本为 \(O(n^2)\),优化后(如Barnes-Hut算法)可降至 \(O(n \log n)\)。
总结
t-SNE通过在高维和低维空间分别构建概率分布,并优化其KL散度,实现数据可视化。其核心创新在于使用t分布缓解拥挤问题,但需注意结果需多次运行以避免局部最优。