Я использую пример кода на Байесовская нейронная сеть , реализованная с использованием Вероятность Tensorflow . Мой вопрос касается реализации потери -ELBO, используемой для вариационного вывода.
-ELBO равно суммированию двух слагаемых, а именно: neg_log_likelihood и kl, реализованных в коде. Мне сложно понять реализацию термина «кл».
Вот как определяется модель:
with tf.name_scope("bayesian_neural_net", values=[images]):
neural_net = tf.keras.Sequential()
for units in FLAGS.layer_sizes:
layer = tfp.layers.DenseFlipout(
units,
activation=FLAGS.activation)
neural_net.add(layer)
neural_net.add(tfp.layers.DenseFlipout(10))
logits = neural_net(images)
labels_distribution = tfd.Categorical(logits=logits)
Вот как определен термин 'kl':
kl = sum(neural_net.losses) / mnist_data.train.num_examples
Я не уверен, что здесь возвращает neural_net.losses, поскольку для neural_net не определена функция потерь. Ясно, что некоторые значения будут возвращены 'neural_net.losses', но я не знаю, что означает возвращаемое значение. Любые комментарии по этому поводу?
Мое предположение - норма L2, но я не уверен. Если это так, мы все еще что-то упускаем. В соответствии с приложением B к статье VAE авторы вывели термин KL, когда предшествующее является стандартным нормальным. Оказывается, она довольно близка к норме L2 вариационных параметров, за исключением того, что существуют дополнительные логарифмические члены и постоянный член. Любые комментарии по этому поводу?