在 VAE 中 mu 和 sigma 向量的真正含义是什么?

数据挖掘 神经网络 自动编码器 高斯
2022-02-14 01:53:16

在标准自动编码器中,我们将数据编码为瓶颈,然后使用初始输入作为输出进行解码以计算损失。我们确实激活了整个网络的矩阵乘法,如果我们做得好,初始输入应该接近输出。我完全理解这一点。

但是在 Vae 中,我几乎没有问题,尤其是在理解潜在空间向量方面。我想我知道如何创建它,但我不确定它的目的是什么。在这里,我将写一些想法,如果我是正确的,请告诉我。

  1. 我们首先创建 mu 和 sigma 矩阵,它们只是先前隐藏层和随机权重的矩阵乘法。

  2. 为了创建 Z(潜在矩阵),我们使用参数化技巧。mu+log(0.5*sigma)*epsilon,这是一个均值为 0,标准为 1 的随机矩阵。我已经看到这个 Z(潜在矩阵)总是产生高斯分布,不管 mu 和 sigma 向量的分布是什么。这是我的问题。为什么,为什么我们要前馈具有高斯分布的潜在矩阵?

  3. 当我们结束解码时。我们计算损失函数,并使用 Mu 和 Sigma 矩阵的 KL 散度来惩罚网络。我不明白为什么首先比较 Mu 和 Sigma 矩阵的分布很重要?我假设,当我们进行反向传播时,mu 和 sigma 在分布方面变得更加接近,但我的问题是为什么这很重要,为什么这两个矩阵在分布方面必须彼此接近?

如果可能的话,我真的很感激用简单的例子给出非常简单的答案。

1个回答

在变分反编码器 (VAE) 中,编码器的输出,μσ, 是输入数据的确定性函数x(你把x进入你的编码器神经网络,它会生成μσ,这里没有随机的东西)。

然后是隐藏的表示z(后验)是从高斯分布中采样的,参数化为μσ. 所以请注意,我们不谈论什么是分布μσ(因为它们是基于确定性的x,而不是随机变量),但我们确实讨论了z.

“为什么我们要前馈具有高斯分布的潜在矩阵?”

具体来说,我们输入一个高斯分布变量z进入解码器网络。这是 VAE 关于如何生成样本的基本模型假设。请注意,VAE 和标准自动编码器之间的主要区别之一是 VAE 是一种生成模型,因为您可以随机生成样本,而不是使用输入x重建类似的东西x.

如果我们想象一个在 MNIST 手写数字数据集上训练的 VAE,我们希望随机抽样z~p(z)=N(0,1),并喂这个z进入解码器网络,它为我们提供输出分布(同样是高斯分布),并从该输出分布中采样得到一个数字的图像。

“为什么要比较 Mu 和 Sigma 矩阵的分布?”

我们不比较分布μσ. 如上所述,我们正在谈论高斯分布的隐藏变量z(后qθ(z|x)) 参数化θ=(μ,σ). 我们比较后验分布z与其先验(p(z)=N(0,1)) 并且差值(通过它们的 KL 散度测量)被用作损失函数中的正则化项。

原因是我们想要潜在的表示z接近它的先验(标准高斯)。这与我们如何从 VAE 生成样本有关(我们首先从标准高斯先验样本)。如果我们编码一个x在与此相距甚远的某个地方,我们不太可能生成这样的样本。

例如,一个训练有素的 MNIST 后验(前两个维度)看起来像这样(来自这里的照片)

MNIST 的后部

请注意,每个数字的后验(例如数字“0”的深蓝色)像高斯分布一样分布,并且距离不远N(0,1),但不同的数字确实占据不同的区域。

许多在线教程(例如此处此处)对 VAE 中的概念有更详细的解释。我建议阅读它们。