我一直在尝试使用张量流概率进行一些实验,但我遇到了一些问题:
2。在不使用keras.model.losses的情况下以KL损失实现tfp: 由于某些软件生产和硬件支持限制,我正在尝试使用tf1.10和tfp0.3.0训练我的模型。问题是对于tf <= 1.14,tf.keras.model不支持keras模型中的tf.layers,因此我不能立即使用原始模型。有没有办法从tf构造中不是从model.losss而是从网络的层或权重来获得KL损失?
3。批处理规范化或组规范化在贝叶斯深度学习中仍然有帮助吗?
答案 0 :(得分:0)
1a)在TFP示例中,num_examples
变量指的是迷你批次的数量(假设您是指本示例here,则是您的M。
1b)ELBO将始终大于交叉熵(定义您的可能性)。看一下如何在ELBO中找到KL散度项。 (以及将每个权重/参数假定为独立的完全平均场方法)。
由于假定的后验因子分解(假设每个参数都是独立的),因此可以将关节分布写为乘积。这意味着当您在大约10到20之间计算KL时,当您获取日志时。后验和先验,您可以将其写为每个参数之间的KL项之和。由于KL> = 0,因此对于您添加到模型中的每个参数,您将在ELBO中添加另一个正项。这可能就是为什么您的3D模型损失更多的原因,可能是因为有更多参数。
发生这种情况的另一个原因是,如果您的数据较少(您的M小于KL项的权重)。
1c)我不确定任何具体的指导原则,因为对于培训您主要是对渐变感兴趣。损失大并不意味着梯度大。看一下ELBO中负对数似然和KL项所贡献的梯度。如果KL项太大,则可能需要更多的先验信息或更多数据(您可以简单地扩展KL项,但这对我的贝叶斯人来说有点令人讨厌)。
1d)是,如上所述,通常更多的参数==更高的ELBO(对于Backprop在Bayes中使用的平均场方法)。
2)我不确定解决此部分的最佳方法。我将谨慎地使用未明确支持的旧版本。他们将这些警告/例外放入其中是有原因的。
3)对于变分推理(如Backprop在Bayes中所做的那样),Batchnorm很好。对于MCMC等采样方法,不再适合使用批量归一化。看看https://arxiv.org/pdf/1908.03491v1.pdf,了解适用于批处理规范的信息,其采样方法约为。贝叶斯推断。
此外,就像臭鼬一样,最好在可能的地方包括代码和指向源的链接:)