Path: blob/master/site/ja/probability/examples/FFJORD_Demo.ipynb
25118 views
Copyright 2018 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
セットアップ
まず、このデモで使用するパッケージをインストールします。
FFJORD バイジェクター
この Colab では、元々 Grathwohl, Will, et al. arxiv リンクの論文で提案された FFJORD バイジェクターを説明します。
手短に言うと、このアプローチの背後には、既知の基礎分布とデータ分布間の対応を確立するという考えがあります。
この関係を確立するには、以下を行う必要があります。
基底分布が定義される空間 とデータドメインの空間 間のバイジェクティブマップ , を定義します。
確率の概念を に転移するために、実行する変形を効率的に追跡します。
2 つ目の条件は、 に定義された確率分布のために、以下の式で形式化されます。
FFJORD バイジェクターは、変換
この変換は、状態 の進化を説明する関数 がうまく動作する限り可逆的であり、log_det_jacobian
は、次の式を組み込むことで計算することができます。
このデモでは、ガウス分布を moons
データセットで定義される分布にラップするように、FFJORD バイジェクターをトレーニングします。これは以下の 3 つのステップで行います。
基底分布を定義する
FFJORD バイジェクターを定義する
データセットの正確な対数尤度を最小化にする
まず、データを読み込みます。
次に、基底分布をインスタンス化します。
多層パーセプトロンを使用して、state_derivative_fn
をモデル化します。
このデータセットでは必要なことではありませんが、通常 state_derivative_fn
を時間に依存させると有利です。ここでは、t
をネットワークの入力に連結しています。
次に、FFJORD バイジェクターのスタックを構築します。バイジェクターごとに ode_solve_fn
と trace_augmentation_fn
があり、独自の state_derivative_fn
モデルであるため、これらは様々な変換のシーケンスです。
これで、base_distribution
を stacked_ffjord
バイジェクターでラップしてできた TransformedDistribution
を使用することができます。
ここで、トレーニングの手順を定義します。単純に、データの負の対数尤度を最小化します。
基底分布と変換した分布のサンプルをプロットします。
0%| | 0/40 [00:00<?, ?it/s]
学習率を使ってより長い期間トレーニングすると、さらに改善します。
この例では説明されていませんが、FFJORD バイジェクターはハッチンソンの確率的トレース推定法をサポートしています。特定の Estimator は、trace_augmentation_fn
を通じて提供されます。同様に、カスタム ode_solve_fn
を定義することで、別のインテグレーターを使用することも可能です。