趋近智
自动编码器包含一个编码器函数,它将高维输入数据 映射到低维潜在表示 ,以及一个尝试从 重构 的解码器。重构损失衡量自动编码器信息保留的程度。然而,这个指标本身并未充分说明潜在空间本身的结构。这个空间是否有效地组织了数据?相似的输入是否被映射到潜在空间中的邻近点?
可视化潜在空间能为模型学习到的表示提供有益的直观认识。然而,潜在空间虽然维度低于输入,但通常仍是高维的(例如,16、32、64 或更多维度),无法直接绘图。我们需要方法将这些高维潜在向量 (vector)投影到我们能够方便观察的 2D 或 3D 空间。
为此,两种普遍使用且有效的方法是 t-分布随机邻域嵌入 (embedding)(t-SNE)和均匀流形近似与投影(UMAP)。这些是非线性降维方法,专门设计用于保留数据的局部结构,使其成为观察自动编码器如何组织潜在表示的优秀手段。请记住,这些方法主要用于可视化和分析,不一定用于生成下游任务的嵌入,因为它们可能会扭曲整体结构或距离。
t-SNE 是一种流行的高维数据集可视化方法。它通过将数据点之间的高维欧几里得距离转换为表示相似度的条件概率来实现。具体来说,数据点 相对于数据点 的相似度被建模为条件概率 ,即如果邻居是根据以 为中心的某个高斯分布的概率密度按比例选择的, 会选择 作为其邻居。
在低维空间(通常是 2D)中,t-SNE 使用具有一个自由度的学生 t-分布(这等同于柯西分布)定义了一个类似的条件概率 。t-SNE 的目的随后是找到数据点的低维嵌入,该嵌入能最小化联合概率 和 ( 是数据点数量)之间的 Kullback-Leibler (KL) 散度。
最小化此 KL 散度会促使高维潜在空间中相似的点( 值高)在低维图中以彼此靠近的点( 值高)表示。在低维空间中使用重尾 t-分布有助于缓解拥挤问题(即点倾向于在图的中心聚集),并使得不相似的点可以被建模得更远。
t-SNE 的考量:
使用 t-SNE 进行潜在空间可视化:
sklearn.manifold.TSNE),指定 n_components=2。一张带有四种不同类别(颜色所示)数据的潜在空间的 2D t-SNE 可视化图。请注意其分离为不同的簇。
UMAP 是一种较新的降维方法,它已获得相当大的关注度,与 t-SNE 相比,它通常能生成更高质量的可视化结果,同时计算速度更快。它基于黎曼几何和代数拓扑学。
UMAP 的核心思路包含两个主要步骤:
与 t-SNE 相比,UMAP 在保留数据的整体结构方面表现更好,这意味着簇的相对位置可能更有意义。它通常也更快,并且更适用于大型数据集。
UMAP 的考量:
n_neighbors: 类似于 t-SNE 中的困惑度,此参数 (parameter)控制 UMAP 如何平衡局部与整体结构。较小的值更注重局部结构,而较大的值包含更多整体信息。典型值范围为 5 到 50。min_dist: 此参数控制低维嵌入中点之间的最小距离。值越低,簇越紧密,而值越高,点会更分散。它主要影响嵌入的视觉密度。使用 UMAP 进行潜在空间可视化:
该过程与使用 t-SNE 类似:
umap-learn 库),指定 n_components=2。请确保首先安装该库(pip install umap-learn)。为了性能,你可能还需要 pynndescent。# umap-learn 使用示例
# 假设 'latent_vectors' 是一个形状为 (样本数量, 潜在维度) 的 NumPy 数组
# 'labels' 是对应类别标签的数组。
import umap
import plotly.graph_objects as go
import numpy as np # 假设 latent_vectors 和 labels 已定义
# 演示用占位数据
np.random.seed(42)
n_samples_per_class = 30
latent_dim = 16
centers = np.random.rand(4, latent_dim) * 20 - 10
latent_vectors = np.vstack([
np.random.randn(n_samples_per_class, latent_dim) * 1.5 + centers[i] for i in range(4)
])
labels = np.repeat(np.arange(4), n_samples_per_class)
reducer = umap.UMAP(n_neighbors=15,
min_dist=0.1,
n_components=2,
random_state=42)
embedding = reducer.fit_transform(latent_vectors)
# 创建 Plotly 图表(代码嵌入在下面的最终 Plotly JSON 中)
之前展示的同一潜在空间的 2D UMAP 可视化图。将簇的形状和相对位置与 t-SNE 图进行比较。UMAP 通常能更好地保留整体结构。
虽然 t-SNE 和 UMAP 是功能强大的工具,但解释时需要谨慎:
perplexity 或 n_neighbors 值运行算法。在不同设置下都出现的稳定簇更可能代表数据中的真实结构。通过对自动编码器编码器生成的潜在向量 (vector)应用 t-SNE 和 UMAP,你可以获得一个可视化的窗口,以查看所学表示的结构。这有助于理解模型如何组织信息,以及它是否成功捕获了数据中变化的底层因素,从而为接下来讨论的更高级分析和操作创造了条件。
这部分内容有帮助吗?
sklearn.manifold.TSNE - scikit-learn documentation, scikit-learn developers, 2023 (scikit-learn) - 官方文档,概述了scikit-learn库中t-SNE的参数、用法和注意事项。© 2026 ApX Machine LearningAI伦理与透明度•