在显示 VAE 潜在空间时,我们可以看到什么?

数据挖掘 机器学习 自动编码器 vae
2022-02-13 22:16:43

我正试图围绕 VAE 进行思考,并且在人们制作潜在空间的散点图时无法理解正在可视化的内容。我想我理解瓶颈的概念;我们从N输入维度H隐藏维度Z维高斯与Z平均值,和Z方差值。例如这里(基于官方 PyTorch VAE 示例),N=784,H=400Z=20.

当人们制作二维散点图时,他们实际绘制的是什么?在上面的例子中,瓶颈层是 20 维的,这意味着有 40 个特征(同时计算μσ)。人们会做 PCA 或 tSNE 之类的吗?即使Z=2仍然有四个特征,所以我不明白显示聚类的散点图是如何制作的,比如在 MNIST 中。

1个回答

当人们制作二维散点图时,他们实际绘制的是什么?

第一种情况:当我们想要获得特定输入的嵌入时:

我们要么

  1. 将手写字符“9”输入 VAE,接收 20 维“均值”向量,然后使用 t-SNE 将其嵌入到 2D 维中,最后用标签“9”或点旁边的实际图像绘制它,或者

  2. 我们使用 2D 平均向量并直接绘制而不使用 t-SNE。

请注意,“方差”向量不用于嵌入。但是,它的大小可以用来显示不确定性的程度。例如,一个清晰的“9”将比一个接近“0”的仓促写出的“9”具有更少的差异。

第二种情况:当我们想要绘制z 空间的随机样本时

  1. 我们选择 z 的随机值,这有效地绕过了均值和方差向量的抽样,

    sample = Variable(torch.randn(64, ZDIMS))
    
  2. 然后,我们将这些 z 提供给解码器,并接收图像,

    sample = model.decode(sample).cpu()
    
  3. 最后,我们使用 t-SNE 将 z 嵌入到 2D 维度中,或者使用 z 的 2D 维度并直接绘图。

这是第二种情况的插图(由唯一的油漆绘制):

在此处输入图像描述

如您所见,均值和方差被完全绕过,我们直接将随机 z 提供给解码器。

引用的文章说了同样的话,但不太明显:

下面你会看到我用下面的例子制作的 MNIST 数字的二维潜在空间的 64 个随机样本,ZDIMS=2

VAE 学习了任何输入数字的 20 维正态分布

ZDIMS = 20
...
self.fc21 = nn.Linear(400, ZDIMS)  # mu layer
self.fc22 = nn.Linear(400, ZDIMS)  # logvariance layer

这意味着它仅指 z 向量,绕过均值和方差向量。