解释变分自动编码器高斯参数化

Explaining Variational Autoencoder gaussian parameterization

在原始的自动编码变分贝叶斯 paper 中,作者在第 2.4 节中描述了 "reparameterization trick"。诀窍是将潜在状态 z 分解为可学习的均值和西格玛(由编码器学习)并添加高斯噪声。然后您从 z 中采样一个数据点(基本上您生成一个编码图像)并让解码器将编码数据点映射回原始图像。

我很难理解这有多么奇怪。有人可以解释一下潜在变量模型吗,特别是:

  1. 为什么我们假设潜在状态是高斯分布的?
  2. 高斯怎么可能生成图像?
  3. 反向传播如何破坏编码器以学习高斯函数而不是未知的非线性函数?

这是 TensorFlow 中 here 的潜在模型的示例实现。

...neural net code maps input to hidden layers z_mean and z_log_sigma

self.z_mean, self.z_log_sigma_sq = \
self._recognition_network(network_weights["weights_recog"], 
                           network_weights["biases_recog"])

# Draw one sample z from Gaussian distribution
n_z = self.network_architecture["n_z"]
eps = tf.random_normal((self.batch_size, n_z), 0, 1, 
                           dtype=tf.float32)
# z = mu + sigma*epsilon
self.z = tf.add(self.z_mean, 
                tf.mul(tf.sqrt(tf.exp(self.z_log_sigma_sq)), eps))

...neural net code maps z to output
  1. 他们没有假设编码器的激活服从高斯分布,他们强制在可能的解决方案中选择一个类似的高斯分布。

  2. 图像是通过解码 a activation/feature 生成的,激活分布类似于高斯分布。

  3. 它们最小化了激活分布和高斯分布之间的 KL 散度。