SVI(Stochastic Variational Inference)①|Pyroドキュメントに学ぶ統計モデリングの実装 #3

f:id:lib-arts:20200915170215p:plain

当シリーズではPyroのドキュメントを元に統計モデリングの実装について確認しています。

Pyro Documentation — Pyro documentation

#1ではPyroの導入として概要の確認・インストール・簡単な動作確認を、#2ではPyroを用いた推論について取り扱いました。

#3では#2で用いたSVIの詳細について確認を行います。

SVI Part I: An Introduction to Stochastic Variational Inference in Pyro — Pyro Tutorials 1.4.0 documentation

以下、目次になります。
1. 理論面の把握
2. 実装の確認
3. まとめ

 

1. 理論面の把握
1節では理論面の把握を行います。

f:id:lib-arts:20200927165653p:plain

上記は#2の際に確認しましたが、PyroにおけるSVI(Stochastic Variational Inference)においては、model、guide、optimizerの3つを主な引数とするので、その辺を念頭に置きながらご確認いただけたらと思います。

f:id:lib-arts:20200927180259p:plain

SVIは変分推論(Variational Inference)の考えがベースとなっていますが、変分推論を理解するにあたって上記のELBO(evidence lower boud)はまず最初に抑えると良いです。

f:id:lib-arts:20200927180525p:plain

式自体は上記と同様で、EMアルゴリズムの文脈で出てくる式を主に話を進めます。さて、さらに変分推論自体は変分法(calculus of variations)が元になっており、変分法は関数を入力とする関数である汎関数(functional)の最適化を扱う分野とされています。ここで確率分布のq(z)に対して汎関数のELBOの最大化(KL divergenceの最小化とみて良い)を行うのが変分推論です。

f:id:lib-arts:20200927181130p:plain

上記のように、この際に用いるq(z)のことをPyroではguideとしています。

f:id:lib-arts:20200927190651p:plain

また、このページでは上記のような「コインに細工されているかどうか」を取り扱う問題設定を元に実装しています。すなわち、『表と裏が同じ頻度で出るか』を考えるとしています。

f:id:lib-arts:20200927191004p:plain

確率モデリングを元に「コインに不正がないか」を考えるにあたって、ベータ分布(beta distribution)を用いて事前の知見を表現した上で考えるとされています。ここではBeta(10,10)を用いており、最終的にf=0.5がピークとなる対称的な確率分布になれば「不正のないコイン」として良いだろうとされています。また、確かめるにあたっての実験として10回コイン投げを行ったとしています。

f:id:lib-arts:20200927192044p:plain

観測については上記のように、6回が表で4回が裏が出たとしています。

これらの前提を元に2節では具体的な実装を確認していきます。


2. 実装の確認
2節では実装の確認を行います。

f:id:lib-arts:20200927192945p:plain

まず、確率モデルについてですが、上記のように記載されています。Beta(10,10)に基づいてサンプリングした"latent_fairness"をfに代入し、fをdist.Bernoulliの引数に与えています。また同時に観測値も与えています。

f:id:lib-arts:20200927193539p:plain

 

Primitives — Pyro documentation

pyro.sampleの引数にobsで与えていますが、ドキュメントを確認すると観測データをこのように与えるとしています。

f:id:lib-arts:20200927193922p:plain

次にguideの設定ですが、上記で解説されています。ここでのq(f)の制約としてはq(f)は0〜1の範囲における確率分布であらねばならないことについて言及されています。それを受けてここではシンプルな設定として、\alpha_{q}\beta_{q}をパラメータとする新たなベータ分布を考えるとしています。また、ベルヌーイ分布とベータ分布の共役性(conjugacy)についても簡単に言及されています。

f:id:lib-arts:20200927194734p:plain

optimizerに関しては、上記のようにAdamを用いています。

f:id:lib-arts:20200927195057p:plain

実行結果は上記のように、事後分布における平均と近しい値である0.532..になっていることが確認できます。またここでコインのfairnessを評価するにあたっては、頻度だけに注目すると0.60になっていたのが、0.532...とより0.5に近い値になっており、サンプルが少ない際に極端な結論にならないようにしてくれていると考えて良いと思います。


3. まとめ
#3では"SVI Part I: An Introduction to Stochastic Variational Inference in Pyro"について取り扱いました。
#4では引き続き、"SVI Part II: Conditional Independence, Subsampling, and Amortization"について確認していきます。

SVI Part II: Conditional Independence, Subsampling, and Amortization — Pyro Tutorials 1.4.0 documentation