потеря -ELBO вариационного вывода, реализованная в вероятности тензорного потока Байесовская нейронная сеть - PullRequest
0 голосов
/ 27 апреля 2018

Я использую пример кода на Байесовская нейронная сеть , реализованная с использованием Вероятность 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 вариационных параметров, за исключением того, что существуют дополнительные логарифмические члены и постоянный член. Любые комментарии по этому поводу?

1 Ответ

0 голосов
/ 27 апреля 2018

Атрибут losses слоя TensorFlow Keras *1003* представляет вычисление побочного эффекта, такого как штрафы регуляризатора. В отличие от штрафов регуляризатора для определенных переменных TensorFlow, здесь losses представляет вычисление дивергенции KL. Посмотрите реализацию здесь , а также пример docstring :

Мы иллюстрируем байесовскую нейронную сеть с [вариационным выводом] ( https://en.wikipedia.org/wiki/Variational_Bayesian_methods),
предполагая набор данных features и labels.

  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)
  loss = neg_log_likelihood + kl
  train_op = tf.train.AdamOptimizer().minimize(loss)

Он использует оценку градиента Flipout для минимизации
Расхождение Кульбака-Лейблера до постоянной, также известной как
Свидетельство отрицательной нижней границы. Он состоит из суммы двух слагаемых:
ожидаемое отрицательное логарифмическое правдоподобие, которое мы приближаем через Монте Карло; и дивергенция KL, которая добавляется через термины регуляризатора которые являются аргументами для слоя.

...