TensorFlow : Edward API : 推論 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 11/28/2018
* 本ページは、Edward サイトの API : API and Documentation – Inference を翻訳した上で適宜、補足説明したものです:
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
Edward API : 推論
推論
確率モデルでどのように推論を遂行するかを記述します。背景については、推論チュートリアル を参照してください。
潜在変数 \((\mathbf{z}, \beta)\) を持つ、データ \(\mathbf{x}_{\text{train}}\) のモデル \(p(\mathbf{x}, \mathbf{z}, \beta)\) を持つと仮定します。事後推論問題を考えます :
\[
q(\mathbf{z}, \beta)\approx p(\mathbf{z}, \beta\mid \mathbf{x}_{\text{train}}),
\]
そこでは タスクは事後分布 \(p(\mathbf{z}, \beta\mid \mathbf{x}_{\text{train}})\) をパラメータ \(\lambda\) でインデックス付けされた分布の族 \(q(\mathbf{z},\beta; \lambda)\) を使用して近似することです。
Edward では、z と beta をモデルの潜在変数として、そこでデータ x_train を持つ確率変数 x を観測します。qz と qbeta を事後分布を近似するために定義された確率変数とします。この問題を次のように書きます :
inference = ed.Inference({z: qz, beta: qbeta}, {x: x_train})
Inference は 2 つの入力を取る抽象クラスです。最初は 潜在確率変数 beta と z のコレクションで、それぞれの潜在変数に関連付けられた「事後変数」qbeta と qz を伴います。2 番目は 観測確率変数 x のコレクションで、データ x_train に関係付けられます。
Inference は qbeta と qz の分布のパラメータを事後分布 \(p(\mathbf{z}, \beta\,|\,\mathbf{x}_{\text{train}})\) に近接するように調整します。
inference の実行は一つのメソッドを実行するように単純です。
inference = ed.Inference({z: qz, beta: qbeta}, {x: x_train}) inference.run()
Inference はまた訓練手続きの fine control もサポートします。
inference = ed.Inference({z: qz, beta: qbeta}, {x: x_train}) inference.initialize() tf.global_variables_initializer().run() for _ in range(inference.n_iter): info_dict = inference.update() inference.print_progress(info_dict) inference.finalize()
initialize() は \(\lambda\) のためにアルゴリズムの更新ルール (計算グラフ) を構築します; tf.global_variables_initializer().run() は \(\lambda\) (グラフの TensorFlow 変数) を初期化します; update() は \(\lambda\) を更新するためにグラフを一度実行します、これは収束までループで呼び出されます; finalize() はアルゴリズムのが停止するとき任意の計算を実行します。
run() メソッドはこの手続きの単純なラッパーです。
他の設定
推論の間他の設定を強調します。
モデル・パラメータ。モデル・パラメータはモデルのパラメータで、そのために常に点推定を計算してそれについて不確かではありません。それらは tf.Variable で定義され、そこでは推論問題は :
\[
\hat{\theta} \leftarrow^{\text{optimize}}
p(\mathbf{x}_{\text{train}}; \theta)
\]
from edward.models import Normal theta = tf.Variable(0.0) x = Normal(loc=tf.ones(10) * theta, scale=1.0) inference = ed.Inference({}, {x: x_train})
推論アルゴリズムのサブセットだけがモデルパラメータの推定をサポートします。(この推論サンプルはどのような潜在変数も持たないことにも注意してください。それは \(\mathbf{x} = \mathbf{x}_{\text{train}}\) を観測すると仮定して theta を推定することについてのみです。推論が事後推論とパラメータ推定の両者となるようにそれらを追加できます。)
例えば、モデルパラメータは、Keras と TensorFlow Slim のような高位ライブラリからニューラルネットワークを適用するときに有用です。より詳細については model compositionality ページを見てください。
条件付き推論 (= Conditional inference)。
条件付き推論では、事後分布のサブセットだけが推論されて残りは他の推論を使用して固定されます。推論問題は :
\[
q(\mathbf{z}\mid\beta)q(\beta)\approx
p(\mathbf{z}, \beta\mid\mathbf{x}_{\text{train}})
\]
ここで \(q(\mathbf{z}\mid\beta)\) のパラメータは推定されて \(q(\beta)\) は固定されます。Edward では、確率変数をデータの他の確率変数にバインドすることにより条件付けを可能にします。
inference = ed.Inference({z: qz}, {x: x_train, beta: qbeta})
compositionality ページ では、多くの条件付き推論アルゴリズムを組み合わせてどのように推論を構築するかを記述します。
暗黙的な事前サンプル (= implicit prior samples)
潜在変数はそれらに渡るどのような事後推論なしでもモデルで定義可能です。それらは単一のサンプルで暗黙的に周辺化されます。推論問題は :
\[
q(\beta)\approx
p(\beta\mid\mathbf{x}_{\text{train}}, \mathbf{z}^*)
\]
ここで \(\mathbf{z}^*\sim p(\mathbf{z}\mid\beta)\) は事前サンプルです。
inference = ed.Inference({beta: qbeta}, {x: x_train})
例えば、暗黙的な事前サンプルは敵対的生成ネットワークのために有用です。それらの推論問題は潜在変数に渡るどのような推論も要求しません; それは事前分布からのサンプルを使用します。
以上