在 VAE 目标函数中缩放 KL 散度和重建损失有什么影响?

人工智能 目标函数 梯度下降 变分自动编码器 kl-散度
2021-11-04 21:49:30

变分自编码器的损失函数有两个组成部分。第一个分量是重建损失,对于图像数据,它是输入图像和输出图像之间的像素级差异。第二个组件是 Kullback-Leibler 散度,它是为了使潜在空间中的图像编码更“平滑”而引入的。这是损失函数:

 loss =xx^2+KL[N(μx,σx),N(0,1)]=xd(z)2+KL[N(μxσx),N(0,1)]

我正在使用变分自动编码器对着名艺术品的数据集进行一些实验。我的问题涉及缩放损失函数的两个组成部分,以便操纵训练过程以获得更好的结果。

我提出两种情况。第一种情况不会缩放损失分量。 VAE - 无缩放

在这里,您可以看到损失函数的两个组成部分。观察到 Kullback-Leibler 散度的数量级明显小于重建损失的数量级。还要注意“我的著名”画作已经无法辨认。该图像显示了输入数据的重建。

未缩放的重建

在第二种情况下,我用 0.1 缩放了 KL 项现在我们可以看到重建看起来好多了。

VAE - 带缩放 规模化重建

问题

  1. 通过缩放损失函数的分量来训练网络在数学上是否合理?还是我在优化中有效地排除了 KL 项?

  2. 如何从梯度下降的角度理解这一点?

  3. 公平地说,我们是在告诉模型“我们更关心图像重建而不是‘平滑’潜在空间”?

我相信我的网络设计(卷积层、潜在向量大小)能够学习参数以创建适当的重建,因为具有相同参数的卷积自动编码器能够完美地重建。

是一个类似的问题。

图片参考: https ://towardsdatascience.com/understanding-variational-autoencoders-vaes-f70510919f73

1个回答

答案 1。

变分推理(VAE 所基于)的动机是减少,其中 p(z) 是我们选择的隐藏变量 z 的分布。做一些数学运算后,我们可以把这个表达式写成——KL(q(z|x)||p(z))

KL(q||x)=log(p(x))Σzq(z)log(p(x,z)q(z))

对于给定的 x,RHS 的第一项是常数。所以我们最大化第二项,使 KL 散度变为零。

我们可以将第二项写成

Eq(z)[log(p(x|z)]KL(q(z|x)||p(z))

(尝试将 p(x,z) 写为然后展开。这里,p(z) 是我们选择的分布,即高斯分布)。我们认为从 z 到 x 的过程是确定性的,而 z 是高斯的。因此,第一项可以替换为(我们将 z 替换为因为它是确定性的——现在这是确切的证明) . 所以我们有——p(x|z)p(z)exp(log(||xx^||2))x^

maximize(||x(^x)||KL(q(z|x)||p(z)))

我们得到了我们的损失函数。

我们也知道变分自编码器几乎永远找不到最佳解决方案,所以我不确定使用权重会如何影响它(我也不知道它在数学上是否有意义)。

答案 2。

我们可以说 KL 散度具有正则化效果。

这个页面有一些很好的实验,可以帮助你理解当你减少 KL 散度部分时潜在空间会发生什么。

答案 3。

是的,你可以这么说。您正在修复尺寸,但对分布很宽容。实际上,您正在通过这样做来接近自动编码器。

分离-

我想把你引向这篇文章。它解释了为什么我们选择最小化而不是(后者是难以处理的)以及如果我们为估计量 q(z) 选择较少的自变量。KL(q(z|x)||p(z))KL(p(z)||q(z|x))

另外,您是否尝试过增加潜在空间的尺寸?它还可以具有“去正规化”的效果。似乎模型对数据的拟合不足——与减少正则化项相比,重建损失与正常损失相比很高。

希望能帮助到你。