变分自动编码器和验证损失

机器算法验证 深度学习 验证 损失函数 自动编码器
2022-03-30 11:16:17

我正在试验 Keras(Tensorflow 后端)和变分自动编码器。我的损失函数是经典的,即重建误差和KL散度之和。

当我为我的模型提供验证数据时,Tensorboard 会显示一个“validation_loss”,它是根据验证数据计算得出的。我想知道验证数据上“损失”函数的正确形式应该是什么;我认为它应该只包含重建错误,而不是 KL 部分:它正确吗?

换句话说,KL散度对验证数据的意义是什么?

2个回答

简短的回答是:不要放弃 KL 术语。

由 VAE 优化的重建误差加上 KL 项是对数似然的下限(也称为“证据下限”或 ELBO)[1]对数似然是衡量模型解释数据的程度的一种方法。如果这就是您所追求的,那么尝试评估对数似然是有意义的。这不是直截了当的,但可能[2]

您可以使用 ELBO 作为对数似然的保守估计。因此,使用重建误差加上 KL 项作为您的validation_loss.

问问自己为什么要训练变分自编码器 (VAE)。如果你能回答这个问题,评估(和训练)你的模型的正确方法将变得更加清晰。重构误差对您的应用程序重要吗?如果是,那么重建错误可以用于验证,但是我会质疑您为什么要针对对数似然进行优化。

[1] Kingma & Welling,自动编码变分贝叶斯,2014(等式 2)

[2] Wu et al., On the Quantitative Analysis of Decoder Based Generative Models , 2017

如果您忽略正则化部分(KL 散度),您将无法将其与训练损失进行比较。确实,添加正则化是为了更好地优化模型的参数,而不是为了更好地逼近损失函数。您可以为此添加“mse”指标,

Model.compile(...,metric=['mse'])

您可以查看此 keras 问题页面以进行更详细的讨论。