web-dev-qa-db-ja.com

TensorFlow確率のベイジアンレイヤーのプロパティ損失は何を表していますか?

Bayesian Neural Network でサンプルコードを実行しています Tensorflow Probability を使用して実装されています。

私の質問は、変分推論に使用されるELBO損失の実装についてです。 ELBOは、コードに実装されているneg_log_likelihoodklの2つの項の合計に等しくなります。 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の基準ですが、よくわかりません。その場合、私たちはまだ何かが欠けています。 [〜#〜] vae [〜#〜] 論文、付録Bによると、著者は、事前分布が標準正規分布である場合にKL項を導出しました。追加の対数分散項と定数項があることを除いて、変分パラメーターのL2ノルムにかなり近いことがわかります。これについて何かコメントはありますか?

11
rort1989

TensorFlow Keras Layerlosses属性は、正則化ペナルティなどの副作用計算を表します。特定のTensorFlow変数に対する正則化ペナルティとは異なり、ここでは、lossesはKL発散計算を表します。 ここでの実装docstringの例 をチェックしてください:

[変分推論]( https://en.wikipedia.org/wiki/Variational_Bayesian_methods )、でベイズニューラルネットワークを説明します。
featureslabelsのデータセットを想定しています。

  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勾配推定器を使用して、
カルバック・ライブラー発散から定数まで、別名
否定的な証拠の下限。これは、次の2つの項の合計で構成されます。
予想される負の対数尤度。モンテカルロで概算します。 KLダイバージェンスは、レイヤーへの引数である正則化項を介して追加されます。

4
Dustin Tran