Bayesian Neural Network でサンプルコードを実行しています Tensorflow Probability を使用して実装されています。
私の質問は、変分推論に使用されるELBO損失の実装についてです。 ELBOは、コードに実装されているneg_log_likelihood
とkl
の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ノルムにかなり近いことがわかります。これについて何かコメントはありますか?
TensorFlow Keras Layer のlosses
属性は、正則化ペナルティなどの副作用計算を表します。特定の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勾配推定器を使用して、
カルバック・ライブラー発散から定数まで、別名
否定的な証拠の下限。これは、次の2つの項の合計で構成されます。
予想される負の対数尤度。モンテカルロで概算します。 KLダイバージェンスは、レイヤーへの引数である正則化項を介して追加されます。