VAE:为什么我们在解码之后和重建损失之前不再次采样?

机器算法验证 机器学习 自动编码器 变分贝叶斯
2022-04-08 14:05:03

在许多 VAE 示意图和原始论文中,在解码之后和重建损失之前存在一个采样步骤,如下图所示。图片来自斯坦福 CS321n。

VAE方案

但是,在许多代码实现中,不存在此步骤。例如在此处可用的 Keras 实现中:https ://keras.io/examples/variational_autoencoder/

在潜在空间z中,他们使用 Lambda 层进行采样,但在解码器的末尾只有一个具有 sigmoid 激活的 Dense 层。

sigmoid 是否在做我在数学上不理解的事情?如果没有这个采样步骤,VAE 数学仍然有效吗?

它不仅在代码实现中,在其他一些示意图和文本材料中似乎都被忽略了(见下图)。

第二种无采样的 VAE 方案

2个回答

最重要的一点源于波浪号意味着采样操作的混淆。但是并不意味着某些东西被采样了,这是一种算法/计算操作。它表示某物按照某种分布进行分布

现在,当我们训练 VAE 时,我们想要获得 ELBO 的梯度。VAE 中使用的 ELBO 形式通常是

L=Ezq[logp(x|z)]KL[q(z|x)||p(z)].
的蒙特卡罗估计有效地计算q

,则第一项,即重建项或似然项通常可以以封闭形式计算尤其是在两种最普遍的情况下——伯努利和高斯对数似然。z

因此,如果其中是一些易处理的分布,则无需从中采样,因为我们感兴趣的是,它本身通常是易处理的。x|zDDlogp(x|z)

在图像生成的情况下,网络通常会输出一个重建图像并且您将计算重建项为 如果是解码器。 这与进行线性回归时发生的情况相同。在正态线性回归中,您使用估计似然的平均值,然后在真实点x^

Lreconstr(θ)=xfθ(xi,z)2=xx^2
fθ(xi,z)
wxi=y^iyi. 这就是你试图最大化的。如果您计算出数学,并且假设是固定的,那么最大化似然性等同于最小化平方误差。 在这里你正在做同样的事情。解码器正在生成法线的平均值(其中是图像的大小),您实际上是在做 同时假设σ
maxN(yi|y^i,σ)minyiy^i2
N×MN×M
maxN(xi|fθ(xi,z),σ)minxix^i2
σ是固定的。从技术上讲,您还可以让网络生成,然后优化更精细的 L2 损失,其中还包括某处。这样,您的网络将生成正态分布的所有参数,而不仅仅是平均值,并且对于每个潜在向量您实际上可以采样几个合成图像 然而,我们通常很高兴为每个生成一个图像。因此,如果我们只取最可能的那个是可以的,即所得预测后验的平均值。毕竟,这也是我们在线性回归中对点估计所做的。σσzx^
z