为什么在许多实现中变分自动编码器的损失与纸张相反?

2024-06-13 08:09:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我理解自动编码变分贝叶斯的论文。我正在阅读一些实现本文的tensorflow代码。但我不明白这些代码中的损失函数。因为很多代码都是用同样的方式编写的,可能我错了。在

问题是这样的。下面的等式来自AEVB paperenter image description here 损失函数是这样的。该方程可分为正则项和重构项。因此,它变成

Loss_function = Regularization_term + Reconstruction_term

但是,很多代码都用负号来实现这个正则化项,比如

^{pr2}$

例如,在this code中,第79行显示正则化项为

KLD = -.5 * tf.reduce_sum(1. + enc_logsd - tf.pow(enc_mu, 2) - tf.exp(enc_logsd), reduction_indices=1)

然后,它只是增加了重建项。在

loss = tf.reduce_mean(KLD + BCE)

我不明白。KLD的符号与文中的方程相反。有很多这样的代码。我想我错了,但我不知道哪里错了。你能解释一下为什么会这样吗?在

参考代码:code1code2code3


Tags: 函数代码reducetftensorflow方式变分方程
1条回答
网友
1楼 · 发布于 2024-06-13 08:09:27

方程(10)是我们想要最大化的对数似然损失。它相当于最小化负对数似然(NLL)。这就是优化函数在实践中的作用。注意,Reconstruction_term已经在tf.nn.sigmoid_cross_entropy_with_logits中被否定(参见https://github.com/tegg89/VAE-Tensorflow/blob/master/model.py#L96)。我们还需要否定Regularization_term。在

所以代码实现了Loss_function = -Regularization_term + -Reconstruction_term。在

相关问题 更多 >