变分自编码器的输出是可以采样的分布,还是直接采样?

机器算法验证 机器学习 自动编码器 变分贝叶斯
2022-03-26 15:55:06

在标题中很难简洁地提出这个问题,所以让我解释一下。

从我看到的所有 VAE 示例中,似乎有两种方法用于实现它们。

  1. 这些方法中, 解码器的输出是一个分布。具体来说,伯努利分布。损失与输入数据相对于该分布的可能性有关。在生成新变量时,不仅从潜在空间分布中抽取样本,而且从输出分布中抽取样本。我有一个关于使用这种方法对输出分布进行参数化的问题,但我将把它留到最后。

  2. 这些方法中, 解码器的输出是实际预测的数据点,然后将其与输入进行比较以计算损失,作为均方误差。唯一被采样的是潜在空间。

这两种方法根本不同。我注意到在第一种方法中,作者将这个想法与统计/概率动机联系起来,而且它似乎有一个坚实的理论基础。出于这个原因,我倾向于采用第一种方法。

所以我的问题是:

  1. 这些方法中的任何一种都被认为是优越的吗?
  2. 第二个问题更多的是意义检查:伯努利分布对灰度像素有意义。但是对于像股票收益这样的东西,我们需要一些其他的分布,比如 t 分布。在这种情况下,编码器的输出将是 3 个向量,1 个表示位置,1 个表示比例,1 个表示自由度,对吧?
1个回答

问题一:

解码器的输出旨在对分布建模,即给定潜在变量的分布。因此,原则上,它应该始终是概率性的。p(x|t)xt

但是,在某些情况下,人们只是简单地使用均方误差作为损失,正如您所说,解码器的输出是实际预测的数据点请注意,这种方法也可以被视为概率方法,在某种意义上它相当于将建模为具有恒等协方差的高斯,在这种情况下,解码器的输出是均值,因此,对于示例,您会得到以下重建损失:p(x|t)p(x|t)=N(x|μ(t),I)μ(t)xi

log(p(xi|ti))=log(1(2π)k|I|exp(12(xiμ(ti))I(xiμ(ti))))=12||xiμ(ti)||2+const.

如您所见,它与均方误差(加上一些常数)成正比。

问题2:

伯努利分布对灰度像素有意义。

这并不完全正确。正确的说法是伯努利分布对黑白(即二进制)图像有意义伯努利分布是二元分布,因此它假设观察结果可能只有两种可能的结果。确实,人们有时将它用于灰度图像,但这是对 VAE 的滥用解释。它可能适用于几乎是黑白的数据集,例如 MNIST。但是,存在 MNIST 数据集的二值化版本,严格来说,这是应该与伯努利 VAE 一起使用的版本。

但是对于像股票收益这样的东西,我们需要一些其他的分布,比如 t 分布。在这种情况下,编码器的输出将是 3 个向量,1 个表示位置,1 个表示比例,1 个表示自由度,对吧?

我会先尝试高斯,,所以解码器会输出两个值,但是,是的,如果你真的想要一个 t 分布,那么这就是要走的路。p(x|t)=N(x|μ(t),σ2(t))μ(t)σ2(t)