作って遊ぶ機械学習。

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

多峰性の事前分布ってどうやって作るの?

ベイズ学習では、複雑なモデルにおけるパラメータの学習を効率的に行うために、しばしば観測モデルに対する共役な事前分布を仮定します。例えばベルヌーイ分布のパラメータの事後分布を推定するために、事前分布をベータ分布にしたりします。ウェブを検索すると様々な確率分布のパラメータに対応する共役事前分布のリストを見つけることができますが、そもそも、データを表現する観測モデルが決まってしまうと自動的にそのパラメータの事前分布が決まってしまうのは何だか窮屈な感じがしてしまいます。

今回はグラフィカルモデルを工夫することによって、もっと自由な、例えば多峰性の事前分布などを簡単に作れることをお話ししたいと思います。

 

[必要な知識]

下記をさらっとだけ確認しておくといいです。

 

さて、改めてベイズ学習におけるパラメータの学習を書いてみると次のようになります。

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

ここで{x}は観測データ、{\theta}はモデルのパラメータです。さらに{p(\theta|x)}はパラメータの事後分布{p(x|\theta)}尤度関数{p(\theta)}はパラメータの事前分布と呼ばれています。ベイズ学習を言葉に翻訳すると、

「パラメータに関する我々の事前知識{p(\theta)}は、観測データに対するモデルの尤もらしさ{p(x|\theta)}を通して、事後の知識{p(\theta|x)}に変換される」

というプロセスになります。

で、今回は尤度関数を計算するモデルとして次のようにガウス分布を仮定します。

{ p(x| \theta) = \mathcal{N}(x| \mu, \Sigma_x ) }

ここで今回推定したいパラメータは平均値{\theta=\mu}であり、分散{\Sigma_x}に関しては既知で固定であるものとします。

 

・単峰性事前分布によるガウス分布の推定

まず始めに、ガウス分布の平均値パラメータに対する一番シンプルな事前分布の選び方は、共役事前分布であるガウス分布を使うことです。*1

{ p(\mu) = \mathcal{N}(\mu | m, \Sigma_{\mu}) }

ここで{m}{\Sigma_{\mu}}はそれぞれ平均値と分散パラメータであり、{\Sigma_x}と同様固定値であるものとします。

このモデルに対して{N}個のデータを観測した後の事後分布は、グラフィカルモデルで表現すると次のようになります。

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

さて、さっそく事後分布を計算してみましょう。事後分布はベイズの定理から次のように計算できます。

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

両辺対数を取って計算を進めることにします。{\mu}に関する分布を求めたいので、無関係な項はすべて定数項{c}に吸収させてしまいます。

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

結果はやはりガウス分布になり、新たに文字{\hat{m}}{\hat{\Sigma}_{\mu}}を導入すれば次のように書けます。

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

・多峰性事前分布によるガウス分布の推定

さて、今度は先ほどの単純な共役事前分布と違い、{\mu}に対して{K}個の異なる平均値の分布からなる、多峰性の事前分布を構築してみましょう。感覚的な例をいうと、推理小説で「犯人が一人なのはわかっているけど、容疑者が複数いる」というような状況設定です。

これは次のグラフィカルモデルで示すように、新たな潜在変数{z}を導入することによって実現できます。

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

まず始めに新しく登場した{z}に対する確率分布を定義してみましょう。ここではもっとも単純な離散変数の分布であるカテゴリカル分布を使います。

{\begin{eqnarray} p(z) = Cat (z|\pi) = \prod_{k=1}^{K} \{ \pi^{(k)} \}^{z^{(k)}} \end{eqnarray} }

ただし{\sum_{k=1}^{K} \pi^{(k)}=1 }です。さらに、{\mu}の分布は次のように{z}の条件付き分布になります。

{ \begin{eqnarray} p(\mu|z) = \prod_{k=1}^{K} {\mathcal{N}(\mu| m^{(k)}, \Sigma_{\mu}^{(k)})} ^{z^{(k)}} \end{eqnarray} }

このような{z}に対する記法は1 of K表記というように呼ばれたりします。例えば{z=(0,0,1,0)}のように、{z}{K}個ある要素のうち一つだけが1を取ることによって、どの分布が使われるのかを指示(indicate)することができます。

それでは事後分布を計算してみることにしましょう。

{p(\mu, z| x) \propto p(x,\mu,z) = p(x|\mu)p(\mu|z)p(z) }

今回は{\mu}{z}の2つの事後分布を求めなければなりませんが、これはそれぞれ別々に解析的に計算できます。まず上の数式から{\mu}に関わる項のみを取り出してみましょう。例によって対数計算を行うと、

{ \ln p(x,\mu,z) = \ln p(x|\mu) + \ln p(\mu|z) + c }

となります。先ほどの単峰性の例と同じように{\mu}のみに注目して計算を行うと、結果として{\mu}の事後分布は{z}に依存する形となり、次のような(条件付き)ガウス分布になります。

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

さて、今度は{z}の事後分布も求めてみましょう。これは{\ln p(z|x) = \ln p(\mu|z) - \ln p(\mu|z,x)}を考慮すれば簡単に計算できます。

{ \begin{eqnarray} \ln p(z|x) = \sum_{k=1}^{K} z^{(k)} (-\frac{1}{2} {\mu^{(k)}}' \Sigma_x^{-1} \mu^{(k)} -\frac{1}{2} \ln |\Sigma_{\mu}^{(k)}| \\ +\frac{1}{2} {\hat{\mu}^{(k)}}' \hat{\Sigma}_x^{-1} \hat{\mu}^{(k)} +\frac{1}{2} \ln |\hat{\Sigma}_{\mu}^{(k)}| +\ln \pi^{(k)})+c \end{eqnarray} }

{z}に掛け算されている部分が事後分布のパラメータになります。書き直すと次のようになります。

{ \begin{eqnarray} p(z|x) = Cat (z|\hat{\pi}) = \prod_{k=1}^{K} \{ \hat{\pi}^{(k)} \}^{z^{(k)}} \end{eqnarray} }

{\hat{\pi}}は次のように計算されます。

{ \begin{eqnarray} \hat{\pi}^{(k)} \propto exp\{ -\frac{1}{2} {\mu^{(k)}}' \Sigma_x^{-1} \mu^{(k)} -\frac{1}{2} \ln |\Sigma_{\mu}^{(k)}| \\ + \frac{1}{2} {\hat{\mu}^{(k)}}' \hat{\Sigma}_x^{-1} \hat{\mu}^{(k)} +\frac{1}{2} \ln |\hat{\Sigma}_{\mu}^{(k)}| +\ln \pi^{(k)} \} \end{eqnarray} }

実装上は{\hat{\pi}}が足して1になるように正規化してください。

以上、事後分布{p(\mu,z|x)}を見てみると、事前分布{p(\mu,z)}と同じ形状を持っていることになります。ガウス分布の平均値だからといって単純にガウス事前分布を使う必要はなく、今回のような多峰性のガウス分布を事前分布にしても、最適化のような計算をせずに解析的に事前分布と同じ関数形の事後分布が求まるんですね。*2

 

さて、ちょっと思った以上に計算式ばかりの記事になってしまったので今日は一旦ここで切ります。今回はガウス分布の平均値パラメータの事後分布を推定する例を使って、多峰性の事前分布をどのように構築したらよいのかを説明しました。次回は今回紹介した事前分布を使った簡単な実験を行い、ベイズ学習における興味深い特性に関してお話したいと思います。

 

=>続きの記事はこちらです。

アニメでわかるベイズ推論によるパラメータ学習 - 作って遊ぶ機械学習。

 

*1:ガウス分布の平均値の共役事前分布は「たまたま」ガウス分布になります。ガウス分布を観測、平均値ともに使っているので気を付けてください。

*2:ちなみにこの多峰性事前分布によるモデルは、混合ガウス分布とは異なります。混合ガウス分布の場合は潜在変数がデータ{x_n}ごとに割り当てられます。今回の例と違い、解析的に求めることは不可能で、変分近似のような近似推論法を使う必要があります。