gpt4 book ai didi

python - 对于变分自动编码器,重建损失应该计算为图像的总和还是平均值?

转载 作者:行者123 更新时间:2023-12-05 03:50:02 25 4
gpt4 key购买 nike

我正在学习这个变分自动编码器教程:https://keras.io/examples/generative/vae/ .

我知道VAE的损失函数包括对比原图和重建的重建损失,以及KL损失。但是,我对重建损失以及它是在整个图像(平方差和)还是每个像素(平均平方差和)上感到有点困惑。我的理解是重建损失应该是每像素 (MSE),但我遵循的示例代码将 MSE 乘以 28 x 28,即 MNIST 图像尺寸。那是对的吗?此外,我的假设是这会使重建损失项显着大于 KL 损失,我不确定我们是否想要这样。

我尝试删除乘以 (28x28) 的乘法,但这导致重建效果极差。无论输入如何,基本上所有的重建看起来都是一样的。我可以使用 lambda 参数来捕获 kl 散度和重建之间的权衡,还是不正确,因为损失具有精确的推导(而不是仅仅添加正则化惩罚)。

reconstruction_loss = tf.reduce_mean(
keras.losses.binary_crossentropy(data, reconstruction)
)
reconstruction_loss *= 28 * 28
kl_loss = 1 + z_log_var - tf.square(z_mean) - tf.exp(z_log_var)
kl_loss = tf.reduce_mean(kl_loss)
kl_loss *= -0.5
total_loss = reconstruction_loss + kl_loss

最佳答案

例子

我熟悉那个例子,我认为 28x28 乘数是合理的,因为操作 tf.reduce_mean(kl_loss) 取所有的平均损失图像中的像素将产生 0 到 1 之间的数字,然后将其乘以像素数。这是 another take带有用于创建 VAE 的外部训练循环。

问题是后塌陷

以上不会成为问题,因为它只是乘以一个常数,如果不是因为您指出的 KL 散度 项。 KL 损失作为一个正则化器来惩罚潜在变量概率分布,当使用高斯组合进行采样时,该概率分布与编码器创建的样本不同。自然而然,问题来了,reconstruction loss应该多少,penalty应该多少。这是一个研究领域。考虑 β-VAE,据称它通过增加 KL 损失的重要性来解开表征,另一方面,增加 β 太多,你会得到一种称为后验的现象崩溃Re-balancing Variational Autoencoder Loss for Molecule Sequence Generationβ 限制为 0.1 以避免该问题。但它甚至可能不像 The Usual Suspects? Reassessing Blame for VAE Posterior Collapse 中解释的那么简单. Diagnosing and Enhancing VAE Models中提出了一个彻底的解决方案.同时Balancing reconstruction error and Kullback-Leibler divergence in Variational Autoencoders建议有一种更简单的确定性(更好)的方法。

实验和扩展

对于像 Minst 这样简单的东西,尤其是那个例子,尝试试验。保留 28x28 项,并将 kl_loss 任意乘以常数 B,其中 0 <= B < 28*28。在训练过程中跟踪kl损失项和重建损失项,并将其与第一个引用图进行比较。

关于python - 对于变分自动编码器,重建损失应该计算为图像的总和还是平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63679934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com