作って遊ぶ機械学習。

~基礎的な確率モデルから最新の機械学習技術まで~

アニメでわかるベイズ推論によるパラメータ学習

さて、今日はガウス分布を使った簡単な実験を行って、ベイズ推論における機械学習の本質の一端を説明したいと思います。せっかくなので前回取り扱った多峰性事前分布も実験に取り入れてみたいと思います。

 

改めてベイズ学習を数式で書くと次のようになります。

{p(\theta | x) \propto p(x|\theta)p(\theta) }

パラメータに関する事前の知識{p(\theta)}が、尤度関数{p(x|\theta)}を通して、事後の知識{p(\theta|x)}に変換されるんでしたね。今回はこのプロセスをアニメーションを見ながら確認してみようというお話です。

 

で、今回は次のような平均値パラメータ{\mu=0}を持った真のガウス分布のパラメータを推論する問題を考えてみたいと思います。

{N(x|0, \Sigma)}

分散{\Sigma}は簡単化のため、既知で固定ということにしておきます。先ほどのベイズ学習の表記を使うと{\theta = \{\mu \}}ということになりますね。

 

さて、データ{x}に対する観測モデル{p(x|\mu)}はガウス分布を使うとして、事前分布{p(\mu)}は違ったものを3種類用意してみたいと思います。そして実際に真のガウス分布からサンプルされたデータを与えてあげることによって、それぞれの事前分布たちがどのような事後分布に成長していくのかを観察してみたいと思います。

 

<共役事前分布A>なだらかな分布を持つ、あまり事前情報のない分布

f:id:sammy-suyama:20160302054954p:plain

 

<共役事前分布B>ちょっと偏った思想を持つガンコな分布 

f:id:sammy-suyama:20160302055037g:plain

 

<多峰事前分布C>多峰性を持つちょっと優柔不断な分布

f:id:sammy-suyama:20160302055050g:plain

 

さて、これらの個性的な登場人物に対して、真の平均値0を持つ未知のガウス分布からサンプルされたデータ点を1つずつ与えてあげるとどうなるのでしょうか?アニメを作ったのでご覧ください。

 

・共役事前分布A

f:id:sammy-suyama:20160302055301g:plain

・共役事前分布B

f:id:sammy-suyama:20160302055709g:plain

・多峰性事前分布C

 

f:id:sammy-suyama:20160302055809g:plain

 

左の図には再びそれぞれの事前分布の形状を表示しています。右の図は観測されたデータを元に計算されたパラメータの事後分布で、ピコピコ現れる縦線は観測されたデータを表しています。得られた分布はデータ点に対する密度分布{p(x)}ではなく、平均値パラメータに関する不確かさ{p(\theta|x)}を表しているので注意してください。細くて0に集中している分布ほど、平均値パラメータが0であることの確信の高さを表しているんですね。

 

さて、改めてデータ数がある程度十分に観測されたとき(40点)の事後分布を比べてみましょう。

f:id:sammy-suyama:20160305024310p:plain

興味深いのは、それぞれが違う事前分布から学習をスタートしたにもかかわらず、ある程度学習データが集まるとみんな同じような事後分布に収束していることです。ただ、ガンコ者の事前分布Bは未だに最初の知識をほんの少し引きずっているように見えます(平均値が左にずれてますね)。優柔不断だった事前分布Cは、多峰性の形状がほとんど失われ一つのガウス分布に収まっているように見えますが、それでも事前分布Aと比べると若干あいまいさを残した広めの結果になっていますね。

この結果はベイズ学習において、もっとも重要な特性を示しています。データが少ないうちはそれぞれの推論結果は事前分布の形状に大きく左右されます。しかし証拠となるデータがたくさん集まるにつれて、最初の知識による影響は次第に薄れ、すべての事前分布たちが似たような形状の事後分布に収束していきます。

ベイズ推論が「異なった意見を持つ人たちでも証拠さえ十分に集まれば最終的に合意を得る」という、非常に理にかなった原理に基づいていることが分かります。*1

 

さて、この結果から機械学習におけるベイズ学習の利点をいくつか見ることができます。

第1に、ベイズ学習ではデータの数が少ない(最悪の場合0個!)の場合でも何かしらの予測結果をひねり出すことができます。データが少ないなら少ないなりに、事前知識を駆使して何かしらの結果を出してくれるのがベイズ学習の強みです。

第2に、ベイズ学習は複雑なモデルに対する学習においても力を発揮することができます。実際の機械学習の問題では、上記のような単純なガウス分布の平均値を推定するだけの簡単な問題はありません。混合ガウス分布や隠れマルコフモデルに代表されるような、グラフィカルモデルを駆使したはるかに複雑なモデルを使って問題を解くのが通常です。このようなモデルでは学習に必要なデータ数が多くなるのが通常で、「ビッグデータ」といえどもまるで学習データが足りない、というような状況はよく起こります。*2

第3に、ベイズの定理を使ったこのような事前分布から事後分布への学習プロセスは、非常に自然で効率的な逐次学習の手段になります。これは、例えばリアルタイムで学習・予測するようなオンラインシステムを開発する場合や、他のモデルで学習した結果を別のモデルに組み合わせたりする場合に非常に便利な特性です。

 

以上、今回は簡単な実験でベイズ学習の本質に迫ってみました。細かい技術面に注目するとベイズ学習の利点は実はこれだけではありません。また別の機会でベイズ学習におけるモデル選択や予測分布に関するお話をしたいと思います。

*1:ちなみに事前分布で確率0を割り当ててしまった領域に対しては、いくら学習しても合意に至りません。今回のようなガウス分布の例では実数すべての値に対して0ではない確率を割り当てているのでそういったことは起こりませんが、実際のモデルでは、事前のモデルで表現しえないような予測結果は決して得ることができないという事実は、当たり前ですが知っておいた方がいいでしょう。

*2:ビッグデータの本質は、ただ単にデータのレコード数が増えるということではなく、データの次元数が増加することにあると個人的には考えています。予測精度を高めるためには様々なリソースから得られたデータを統合して学習に使う必要がありますが、このような多次元データに対しては、最尤推定や最適化などの手法は簡単にオーバーフィットしてしまうため、ベイズ学習が有効な解決手段になります。