VQ-VAE 先前模型的输入是什么?

人工智能 机器学习 生成模型 变分自动编码器
2021-11-02 14:42:38

我正在尝试实现VQ-VAE 模型在那里,一个连续变量x被编码在一个数组中z离散潜变量zi每个都映射到一个嵌入向量ei. 这些向量可用于生成x^这近似于x.

为了得到一个合理的生成模型pθ(x)=pθ(x|z)p(z),需要学习代码的先验分布z. 然而,在本文或其第二版中,并不清楚学习先验的网络的输入应该是什么。是吗z=[zi]或者e=[ei]? 该文件似乎表明它是z,但如果是这样的话,我不明白我应该如何编码z适当地。例如,一个样本z可能是一个n×n具有离散值的矩阵0511. 对我来说,使用 one-hot 编码是不合理的,也不能简单地使用离散数字,就好像它们是连续的一样,因为它们没有定义的顺序。另一方面,使用e没有这个问题,因为它表示具有连续条目的矩阵,但是所需的网络会更大。

那么,先前模型的输入应该是什么?z或者e? 如果是z,我应该如何表示呢?如果是e,我应该如何实现网络?

1个回答

关于VQ-VAE 的一些注意事项:

  1. 在论文中,他们使用PixelCNN来学习先验。 PixelCNN在图像上进行训练。
  2. 离散潜在变量只是嵌入向量的索引。例如,您可以将嵌入向量放入一个数组中。

对于单个输入图像,编码器在量化之前的输出通道数等于嵌入向量的维数。打个比方,编码器的输出类似于图像,但通道数等于嵌入空间中的维度。这样,每个像素都是嵌入向量1空间中的一个向量。通过将每个像素映射到最近的嵌入向量来对每个像素进行量化e.

现在,每个像素都可以用一个整数表示,该整数等于其最近嵌入的索引(你称之为离散潜变量)。因此,量化输出有两种表示形式,一种是具有许多通道(嵌入向量)的大张量,另一种是具有一个通道(离散潜变量)的简单离散图像。

单通道离散图像用于训练PixelCNN这很棒,因为它们是小尺寸的图像。而带有嵌入向量的大张量用于解码器,因为它保存了重建所需的信息。

因此,先验模型的离散潜变量和编码器的嵌入向量。

1这只是一个类比,像素值属于一个封闭区间。