TensorFlow Probability 层(例如DenseFlipout)有一个losses
方法(或属性)可以获取“与该层相关的损失”。有人能解释一下这些损失是什么吗?
浏览完Flipout 论文后,我认为损失是指权重和偏差的先验分布和后验分布之间的 Kullback-Leibler 散度。如果有人比我更了解这些事情,请纠正我。
TensorFlow Probability 层(例如DenseFlipout)有一个losses
方法(或属性)可以获取“与该层相关的损失”。有人能解释一下这些损失是什么吗?
浏览完Flipout 论文后,我认为损失是指权重和偏差的先验分布和后验分布之间的 Kullback-Leibler 散度。如果有人比我更了解这些事情,请纠正我。
您的怀疑是正确的,尽管记录不充分。例如,在下面的一段代码中
import tensorflow_probability as tfp
model = tf.keras.Sequential([
tfp.layers.DenseFlipout(512, activation=tf.nn.relu),
tfp.layers.DenseFlipout(10),
])
logits = model(features)
neg_log_likelihood = tf.nn.softmax_cross_entropy_with_logits(
labels=labels, logits=logits)
kl = sum(model.losses) # Losses are summed
# The negative log-likelihood and the KL term are combined
loss = neg_log_likelihood + kl
train_op = tf.train.AdamOptimizer().minimize(loss)
在layer的文档中DenseFlipout
提供,将losses
它们相加得到 KL 项,对数似然项单独计算,并与 KL 项结合形成 ELBO。
您可以看到这里添加的损失,经过一些间接说明,表明{kernel,bias}_divergence_fn
正在使用 ,而这反过来又默认为lambda
调用tfd.kl_divergence(q, p)
。