tf概率中KL损失系数的适当值

时间:2019-11-14 02:07:34

标签: tensorflow bayesian tensorflow-probability

我一直在尝试使用张量流概率进行一些实验,但我遇到了一些问题:

    KL损耗系数的适当值: a)在Blundell 2015年的论文中,系数设置为1 / M(M:迷你批次的数量)。在tfp给出的示例中,系数为1 / mnist_data.train.num_examples。 b)当我从2d输入量转换为3d图像量时,即使除以mnist_data.train.num_examples,KL损失仍然比交叉熵(〜1)大得多(〜1k)。 c)为该系数获得适当值的准则是什么,也许就像两个损失项应该在相同的数量级上一样? d)当前系数仅考虑训练样本的数量,而不考虑网络复杂度或网络中参数的数量,我假设KL损失随模型的复杂性而增加。

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。批处理规范化或组规范化在贝叶斯深度学习中仍然有帮助吗?

1 个答案:

答案 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,了解适用于批处理规范的信息,其采样方法约为。贝叶斯推断。

此外,就像臭鼬一样,最好在可能的地方包括代码和指向源的链接:)