作って遊ぶ機械学習。

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

ややこしい離散分布に関するまとめ

今回は離散分布(discrete distribution)の代表格である多項分布(multinomial distribution)や、その共役事前分布であるディリクレ分布(Dirichlet distribution)との関係性や計算方法を整理したいと思います。

離散分布というと、本来はポアソン分布(Poisson distribution)なども含めた離散値を出力するような分布全般のこと指します。しかし実際に論文などを読んでいると、くじ引きのように単純に出目の比率が与えられたような分布を離散分布と名付けてしまっている場合もよく見られます。まぁ文脈的に誤解を招くことはあまりないと思うのですが、くじ引きの分布をもっとキッチリ表現するなら、複数あるカテゴリーから1つを抽出するという意味でカテゴリカル分布(categorical distribution)と呼ぶのが適切かと思います。あるいは、観測回数が1の場合の多項分布とかって呼ぶこともできますね。

とまぁ別に名前はどうでもいいのですが、これらの離散分布の関係性をまとめてみると次の図のようになります。

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

ピンクの線が多次元変数への一般化で、オレンジの線が複数回の試行を行った場合に対する一般化です。グレーの点線矢印は、それぞれの確率分布に対する共役の関係性を示しています(矢印の元に当たるのが共役事前分布(conjugate prior)です)。 

結論としては、多項分布とその共役事前分布であるディリクレ分布の計算だけある程度馴染んでおけば、後はその特殊な例なのでいちいち気にする必要はないということになりますね。

 

 

<各確率分布の自己紹介>

さて、これからいろいろ計算確認をする前に、それぞれの確率分布の定義式を列挙してみます。

 

・ベルヌーイ分布(Bernoulli)

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

お馴染みのひしゃげたコインの分布です。{x}は0か1のどちらかの値を必ず取り、パラメータは{\mu \in [0,1]} をみたします。*1

・二項分布(Binomial)

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

コイントス{N}回行った時の、表面の回数に関する分布です。したがって{m}は0以上{N}以下の整数値を取ります。ベルヌーイ分布と同様、{\mu \in [0,1]} です。

・カテゴリカル分布(Categorical)

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

こちらもお馴染みの{K}面を持つひしゃげたサイコロの分布ですね。{K}次元ベクトルである{\bf{x}}の要素{x_k}は0か1のどちらかの値を必ず取り、いずれか1つの{x_k}しか1にならないので、{\sum_{k=1}^{K} x_k = 1} をみたします。それぞれの出目の確率は{\mu}で与えられ、{\sum_{k=1}^{K}\mu_k = 1}をみたすように設定します。

・多項分布(Multinomial)

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

{K}面を持つひしゃげたサイコロを{N}回投げた時の、出目の回数に関する分布です。したがって{K}次元ベクトルである{\bf{m}}の要素{m_k} は非負の整数値を必ず取り、{\sum_{k=1}^{K} m_k = N} をみたします。カテゴリカル分布と同様{\sum_{k=1}^{K}\mu_k = 1}です。

・ベータ分布(Beta) 

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

コイントスの共役事前分布に当たる分布です。コインの「ひしゃげ具合」に関する分布になります。この分布から出てくる値{\mu}は過ならず0と1の間に収まってくれるように作られています。分布の特徴を決める{a}{b}は、0より大きい実数値を設定する必要があります。ちなみに正規化項に当たる部分にはイカつい格好のガンマ関数(gamma function){\Gamma()}の塊がいます。ガンマ関数は階乗「!」の実数値バージョンですが、これはライブラリとか使えば簡単に計算できるのであまり怖がる必要はないです。*2

・ディリクレ分布(Dirichlet)

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

サイコロの共役事前分布に当たる分布です。サイコロの「ひしゃげ具合」に関する分布ですが、混合モデル(mixture model)に使われるほか、自然言語処理で使われるLDA(Latent Dirichlet Allocation)の由来にもなっていますね。出てくる値は必ず{\sum_{k=1}^{K}\mu_k = 1}をみたしてくれるように分布が作られています。また、すべての{k}に対して{\alpha_k}は0より大きい実数値を設定する必要があります。ここでもまたイカつい{\Gamma()}の塊が先頭にありますが、多くの場合で無視して計算できるので気にしなくても大丈夫です。

 

 

<各確率分布の関係性> 

さて、自己紹介が終わったところでそれぞれの分布の関係性を式で確認してみましょう。ここでは、多項分布やディリクレ分布がその他の分布の特別な場合であることを確認してみます。

 

・多項分布=>カテゴリカル分布

多項分布において>{N=1}と設定してあげれば、

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

となり、カテゴリカル分布に一致します。{N=1}と設定したことにより{m_k}は0か1かしか取らなくなったことと、{1!=0!=1}の計算に注意してください。

・多項分布=>二項分布

多項分布において次元を{K=2}と設定してあげれば、

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

となり、二項分布になります。{m_1+m_2=N}の制約があるので、実質{m_1}のみの確率分布になるのがポイントです。パラメータもわざわざ2個持つ必要はなく、{\mu_1+\mu_2=1}を考慮すれば{\mu_1}だけ持っておけば大丈夫ですね。

・ディリクレ分布=>ベータ分布

ディリクレ分布において次元を{K=2}と設定してあげれば、

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

となり、ベータ分布になります。ここでも、{\mu_1+\mu_2=1}の制約条件を利用することによって実質{\mu_1}のみの確率分布にすることができます。

 

同様に、ベルヌーイ分布はカテゴリカル分布から{K=2}とおくか、二項分布から{N=1}とおくと導けます。簡単なので省略します。

 

 

<共役事前分布とベイズ推論>

さて最後に、ディリクレ分布が多項分布の共役事前分布であることを確認してみましょう。共役事前分布とは、観測モデル{p(m|\mu)}とかけ合わせた後に同じ関数形状が出てくるような分布のことです。つまり、ベイズの定理

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

を適用したときに、事前分布{p(\mu)}と事後分布{p(\mu|m)}が確率変数{\mu}に関して同じ形式の関数になるように{p(\mu)}を定めるということですね。このような事前分布を選んでおくと、各種推論計算が解析的に簡単に計算できるようになるほか、データを小分けにして学習させるオンライン学習(online learning)を構築することも容易になります。オンライン学習は逐次学習(sequential learning)追加学習(incremental learning)とも呼ばれるようです。

ということで、ディリクレ分布を事前分布とし、多項分布に従うデータ{m}を観測した後の事後分布を計算してみましょう。

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

正規化項(ガンマ関数とか階乗とか含んでる項)を無視して計算するのがラクする秘訣です。さて、結果の式を見てみると、ディリクレ分布と同じ関数形状をしていることがわかります。したがって{\hat{\alpha}_k=\alpha_k+m_k}とおいてあげれば、

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

ということになり、事後分布もディリクレ分布になることがわかりました。*3

また、上のベイズ推論で{N=1}と置けば、カテゴリカル分布のパラメータに関する学習も同様にディリクレ分布を使って行うことができることがわかります。これは特に混合モデルクラスタリングなど)を扱うときに出てくる計算なので、ある程度慣れておくと便利です。

今回の記事がよくわからん!という方には,次のような入門書もあります.

books.rakuten.co.jp

*1:ちなみに英語で「べるぬうい」と言っても通じません。「バヌーリ」という方が近いです。

*2:ガンマ関数はプログラム上実装することはそれほど多くはないのですが、どうしても計算する必要がある場合は、対数を返してくれる関数(lgammaなど)を使うと良いです。通常はものすごく大きい値になってしまうので。

*3:「事後分布の計算結果がカテゴリカル分布にも見えるんだけど・・・」という方は、ちょっと落ち着いてみてください。今は{m}ではなく{\mu}に関する分布をベイズの定理を使って計算しています。したがってこの関数形状はディリクレ分布一択になります。