終末 A.I.

Deep Learning を中心に、週末に機械学習するエンジニアのブログ

ベイズ統計を理解する(1) 〜 最尤推定、MAP推定、ベイズ推定 〜

先日、下記のような記事が上がっていまして、小説生成を目論む私としては気になって論文にも目を通してみたのですが、どうやら生成モデルを利用しているらしいということしか分からず、理解が足踏みしてしまっています。

wired.jp

最近、Deep Learning 周りでは生成モデルが流行ってるようで、DCGANを使ってイラストを自動で生成するアルゴリズムが年末にバズっていたように、この周辺はじわじわホットトピックになってきている感があります。

qiita.com

しかし、生成モデルを理解するには Deep Learning だけでなくベイズ統計周りの知識が必須になります。利用するだけならどなたかが実装するのを待てばよいのですが、新しくでた論文の内容を実装してみようと思うと、ベイズの基礎くらいは必要な印象を受けました。

そこで、今回からしばらくはComputer Vision Modelsのテキストを使用して、ベイズ統計について学んでいきたいと思います。また、こちらのテキストは日本語での解説動画が上がっていますので、こちらもご参考ください。

www.udemy.com

前置きが長くなりましたが、今回はモデルのフィッテングに使用される、最尤推定、MAP推定推定、ベイズ推定について書いていきたいと思います。

以下では、{\theta}はモデルのパラメーター、{\hat{\theta}}はパラメーターの推定値、{x_{1...I}}は観測値(省略して単に{x}と記述することもあります)、{x^*}はモデルにフィットするか評価する値とします。

最尤推定

最尤推定は、下記のように観測値の尤度が最大化するようなパラメーターを推定します。

{\hat{\theta} = argmax(Pr(x_{1...I}| \theta))}

新しいデータがモデルにどれだけ適合するかは、{Pr(x^*|\hat{\theta})} を計算すれば良いので簡単に求めることができます。

例として観測変数が正規分布から生成されるようなモデルを考えます。このとき、推定するパラメーター{\hat{\theta}} {\hat{\mu}} {\hat{\sigma}^2}になります。式展開の詳細は、上記で紹介してある本や資料を見ていただくとして、{Pr(x|\theta)}正規分布の場合、最尤推定を行うと{\hat{\theta}}は解析的に簡単に求める事ができ、下記のようになります。

 {\hat{\mu} = \frac{\sum_{i=0}^I x_i} {I}}

 {\hat{\sigma}^2 = \sum_{i=0}^I \frac{{(x_i - \hat{\mu})}^2} {I}}

見ていただいてわかるように、それぞれ観測点の平均と分散になります。以上が最尤推定による学習の概要となります。

MAP推定

MAP推定は、事後確率を最大にするパラメーターを推定する方法です。式は下記のようになります。

 { \displaystyle
\hat{\theta} = argmax(Pr(\theta|x)) \
= argmax(Pr(x | \theta) Pr(\theta))
}

ベイズの定理に従い素直に展開すると{Pr(x)}が分母につきますが、この値は{\theta}によらず一定であり、式を最大にする{\theta}を求める際には不要なので除いています。最尤推定法と比較してみると、事前確率が推定に影響を与えるかどうかの違いがあります。

新しいデータがモデルにどれだけ適合するかは、{Pr(x^*|\hat{\theta})} を計算することで求めることができます。これは最尤推定の時と同じですね。

同じく、例として観測変数が正規分布から生成されるようなモデルを考えます。この時、事前分布である{Pr(\theta)}正規分布の共役事前分布である逆ガンマ分布であると仮定します。式展開の詳細は省略しますが、この場合も解析的に簡単に{Pr(x|\theta)}を求めることができ、下記のようになります。

 {\hat{\mu} = \frac{\sum_{i=0}^I x_i + \gamma \delta} {I + \gamma}}

 {\hat{\sigma}^2 = \sum_{i=0}^I \frac{{(x_i - \hat{\mu})}^2 + 2 \beta + \gamma{(\delta - \hat{\mu})}^2} {I + 3 + 2 \alpha}}

 {\alpha , \beta , \gamma , \delta}は逆ガンマ分布のハイパーパラメーターです。 {\hat{\mu}}に注目していただくと分かりやすいように、事前分布の情報の分、最尤推定の時と比べてハイパーパラメーターで推定値が補正されています。以上がMAP推定による学習の概要となります。

ベイズ推定

ベイズ推定は、観測値にが当てられた時にパラメーターの事後確率分布を推定する方法です。先程までの最尤推定やMAP推定はベイズ推定がパラメーターの分布を推定するのに対して、最大になるパラメーター一点のみを推定するので点推定と呼ばれます。

ベイズ推定の式は下記のようになります。

 { \displaystyle
Pr(\theta|x) = \frac{\prod Pr(x_i | \theta) Pr(\theta)} {Pr(x)}
}

ここで求めたパラメーターの事後分布を用いて新しい値の評価を行いますが、この評価の仕方も点推定の場合とはかなり異なります。ベイズ推定では、ある値が観測されるようなモデルに新しく観測された値がフィットするかを評価します。式は下記のようになります。

[tex: { \displaystyle Pr(x^ | x) = {\int Pr(x^ | \theta)Pr(\theta | x) d \theta} }]

例として観測変数が正規分布から生成されるようなモデルを考えます。{Pr(\theta)}はMAP推定の時と同じく逆ガンマ分布であると仮定します。 この時、推定されるパラメーターの事後分布は解析的に求めることができ下記のようになります。

 { \displaystyle
Pr(\theta|x) = NormInvGam(\tilde{\alpha}, \tilde{\beta}, \tilde{\gamma}, \tilde{\delta})
}

また、{Pr(x^*|x)} も解析的に求める事ができ、下記のようになります。

{ \displaystyle
Pr(x^*|x) = {\frac{1} {\sqrt{2 \pi}} {\frac{\sqrt{\tilde{\gamma}} \tilde{\beta}^{\tilde{\alpha}}} {\sqrt{\breve{\gamma}} \breve{\beta}^{\breve{\alpha}}}}} {\frac{\Gamma(\breve{\alpha})} {\Gamma(\tilde{\alpha})}}
}

{ \tilde{\alpha}, \tilde{\beta}, \tilde{\gamma}, \tilde{\delta}, \breve{\alpha}, \breve{\beta}, \breve{\gamma}} {\alpha , \beta , \gamma , \delta}と観測値{x}から計算されるパラメーターです。このようにだいぶ複雑になりますが、解析的に求める事ができるため素早く簡単に計算できます。以上がベイズ推定による学習の概要となります。

学習結果の比較

平均が0、標準偏差が2の正規分布からサンプリングしたデータを使用して、上記の各モデリング手法による学習結果を比較してみました。ちなみにベイズ推定は式を入力するのが面倒くさかったのと、ベイズ推定ライブラリの使用方法がよくわからなかったので結果は載せていません。 赤が元の分布、青が最尤推定で学習した分布、緑がMAP推定で学習した分布です。MAP推定では、中心が0、標準偏差が2~4くらいのパラメーターが最も表れやすい事前分布を与えています。

I=10

f:id:KSKSKSKS2:20160522210026p:plain

I=100

f:id:KSKSKSKS2:20160522210256p:plain

観測数が10の時は、学習が不完全で中心付近の大きく分布がよってしまっています。MAP推定は最尤推定とくらべ、事前分布の影響を見て取ることができます。一方、単純な分布なこともあり観測数が100もあれば、いずれも十分に元の分布を再現できるに至っています。

学習に使用したコードは下記のとおりです。といっても、上記の式に合わせてコード書いてあるだけなんですけどね。