在 VAE 中采样 z

机器算法验证 机器学习 神经网络 变分贝叶斯
2022-03-14 21:46:25

在变分自动编码器中,中采样多少次?Q(z|x)

假设自动编码器输入是 28x28 像素的单个图像 - 而是一维分布。然后,为了重建输出 - 我读到(我可能是错的)我们可以采样次。xZX10000

为什么我们要采样这么多?我们如何将其缩小到 28x28?

编辑

我仍然很困惑我们如何例如,让我们考虑上面的例子并假设 ~我们有一个 28x28 像素的图像作为 VAE 输入,表示为,有个节点,每个节点对应一个像素。10000Q(z|x)Q(z|x)N(0,1)X28

在此处输入图像描述

此外,为了简单起见,让我们计算 ELBO 的似然部分而不是整个事物的期望。

因为,后验是高斯的,我们只采样一次

EzQ[logp(x|z)]=128128(xixi)2

请注意,是单个值,我们正在对每个节点的误差求和Z1

如果我们改为采样两次- 期望是

EzQ[logp(x|z)]=12281228(xix¯i)2

其中是两个样本的组合输出,例如:节点(第二个样本的节点)、(第二个样本的节点)... (第二个样本的节点x¯i1,2,...28,2913025628

...等等10000次。这个对吗?

现在,如果这是正确的,那么它值得一个后续问题。正如下面的答案中提到的,我们真的不需要这么多采样。因此,假设我们独立采样两次 - 但恰好第二个样本更接近分布的平均值。Z2

在此处输入图像描述

我们是否期望重建的X"看起来非常相似?XX"

1个回答

因为 VAE 实际上是一个图形模型,而不是自动编码器,所以它可能会混淆上下文中“重构”的确切含义。

回想一下,我们对由 RHS 给出的对数概率有一个下限:

logp(x)DKL(Q(z|x)||P(z|x))=EzQ[logp(x|z)]DKL(Q(z|x)||P(z))

要计算这个下界——进行反向传播以使其最大化的必要先决条件——对应于将通过编码器到达,计算 KL 散度,然后估计采样一次或多次(但通常只是一次)并运行解码器。xQ(z|x)EzQ[logp(x|z)]Q

这个用编码器估计后验然后采样以逼近 RHS 中的期望的过程如此紧密地模仿了自动编码器的计算,我们称之为“重建”。然而,这实际上只是试图最大化输入的对数概率的副作用。

当您从多次采样时会发生什么?直接的结果是您获得了更好的期望近似值,因此可以更好地近似对数概率的下限。您还需要多次运行解码器,这可能会很昂贵,因此通常不会这样做。当然,如果你这样做,那么你最终会得到许多重建,而不仅仅是一个。请注意,绝对不可能对重建进行平均并获得有意义的输出。Q

所以你可能只想取样一次。


作为对您的编辑的回应,正确的编写方法是

EzQ[logp(x|z)]1ni=1Nlogp(x|zi)1ni||xdecode(zi)||22=1nmij(xjdecode(zi)j)2

我们希望重建看起来彼此非常相似,但并不完全相同。究竟有多好取决于数据的性质和模型的拟合程度。decode(zi)