読者です 読者をやめる 読者になる 読者になる

作って遊ぶ機械学習。

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

グラフィカルモデルを使いこなす!~有向分離の導入と教師あり学習~

さて、前回はグラフィカルモデルの描き方と簡単な事後確率の推論をやってみました。今回以降は、下記のようなもう少し現実的な確率モデルに対する推論をグラフィカルモデル上でやってみる予定です。

 

・教師あり学習(今回)

・半教師あり学習

・共変量シフト

・転移学習

・潜在変数モデル(EMアルゴリズム

 

今回は導入として、有向分離(D-separation)と呼ばれる、より複雑なモデルに対する確率変数の独立性をチェックするための手法を紹介します。これを使って、教師あり学習である回帰モデルや識別モデル(2つともグラフィカルモデル上の区別はないです)に対する推論結果がどうなるかを見てみたいと思います。

  

今回やることも基本的には前回の3つのノードを使った単純なグラフィカルモデルと同じです。

machine-learning.hatenablog.com

あるグラフィカルモデルが与えられ、さらに一部のノードが観測されたとき、残りの観測されていないノードの確率分布(事後分布)を計算します。このとき事後分布は一般的には複数の確率変数が絡みあった複雑な形状をしてしまっています。グラフィカルモデルから変数間の独立性を読み取り、事後分布をよりシンプルな積に分解して表すのが今回の課題になります。

というわけで、その独立性を発見するためのシステマチックな手法である有向分離をさっそく紹介します。

 

<有向分離(D-separation)>

与えられたグラフィカルモデル上でノードAとノードBが独立であるか判断したいとします。AとB間の間のすべての経路がブロックされていればAとBは独立になります。あるノードCが経路をブロックしているかどうかを判定するには次のフローチャートを使います。

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

むむ、なんだかでかい図が出てきてちょっと嫌な感じです。慣れないうちは非常にめんどくさそうな手続きに見えてしまいますが、慣れてもめんどくさいので諦めてください。この図は次の具体的なモデルで使っていきましょう。

 

・具体例)教師あり学習

では、今回は教師あり学習をグラフィカルモデルで表現し、それに有向分離を適用してみましょう。一番単純な教師あり学習は回帰・識別モデルです。これはグラフィカルモデルでは次のように書くことができます。

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

$x_1$と$y_1$は教師あり学習のための訓練データということにしてください。そして$x_2$と$y_2$はテストデータです。$\theta$は$x$から$y$を推定するための未知のパラメータです。$y$が連続変数を取る場合は回帰で、離散値を取る場合は識別(分類)になります。このグラフに対応する式も書いておきましょう。

\[ p(y_2, x_2, y_1, x_1, \theta) = p(y_2|x_2, \theta)p(x_2)p(y_1|x_1,\theta)p(x_1)p(\theta)\]

グラフと式をよく見比べて対応が取れていることを確認してみてください。モデル作りはこのようにまだデータが1つも観測されていない状態からスタートします*1

実際には、教師あり学習では、$x_1$と$y_1$が訓練データとして観測され、さらに予測したい$y_2$に対する入力値$x_2$が観測されます。描き直してみましょう。

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

手元に持っている観測データが条件付けられましたね。ついでに式も書いておくと次のようになります。

\[ p(y_2, \theta | x_1, y_1, x_2) \]

さて、この分布を単純化してみることにしましょう。まず始めに、確率の乗法定理を使って事後分布を積の形で書いてあげます。

\[p(y_2, \theta | x_1, y_1, x_2) =p(y_2| \theta, x_1, y_1, x_2)p(\theta | x_1, y_1, x_2)\]

単純に$y$と$\theta$を2つの項に分けて書いてみただけです。まだちょっと式が長いので、ここでいよいよ有向分離を導入して2つの項をそれぞれダイエットしてみることにしましょう。

 

・$p(y_2| \theta,  x_1, y_1, x_2)$の項をダイエット

さて、この項をグラフィカルモデルで描いてみましょう。この項では$\theta$が条件付けられているので黒丸になります*2

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

さて、$y_2$と他の変数たちの独立性を見ていきましょう。まず始めに、$y_2$と$\theta$は独立でしょうか?そんなわけないですよね。なぜなら2つのノードは隣り合っているので、どうあがいても依存してしまいます。同様の理由で$x_2$も隣にいるので依存してしまいます。

では、$y_1$はどうでしょうか?$y_2$と$y_1$の間の経路は、$\theta$を経由する以外にはありません。したがって、$\theta$が2つのノードをブロックしているかどうかを確かめればOKです。ということで、先ほどのフローチャートを使ってみましょう。

  1. $\theta$は●?  Yes!
  2. $\theta$は→●←? No!   =>   ブロックする(B1)

はい、どうでしょうか。ちゃんとB1の結果にたどり着けたでしょうか?$\theta$が$y_2$と$y_1$を結ぶための唯一の経路をブロックしてしまっているので、2つの変数は独立であることが分かります。同じ理由で$y_2$と$x_1$の経路も$\theta$によってブロックされますね。

というわけで、$y_2$に対して、$\theta$と$x_2$には依存関係があり、$y_1$と$x_1$に対しては独立であることがわかりました。これで式が次のようにダイエットできます。

\[ p(y_2| \theta,  x_1, y_1, x_2)=p(y_2| \theta, x_2) \]

 

・$p(\theta | x_1, y_1, x_2)$の項をダイエット

さて、この項も改めてグラフィカルモデルを描いてみましょう。

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

この項では$y_2$が登場していないので点線で描いてみました。

さて、ここから$\theta$と他の確率変数との依存性を見ていきます。まず見た瞬間すぐにわかるのは、$x_2$とは独立であるということです。経路そのものが存在しませんよね。

一方で$y_1$は隣り合っているので依存してしまいますね。

では$x_1$はどうでしょうか?先ほどと同様、$\theta$と$x_1$の間の経路を見てみると、唯一、$y_1$が間にいます。これが経路をブロックしているかどうかをフローチャートを使って調べればOKですね。

  1. $y_1$は●?  Yes!
  2. $y_1$は→●←? Yes!   =>   ブロックしない(UB1)

おっと、さっきと違って経路上のノードがブロックしませんね。この場合は、$\theta$と$x_1$は依存することがわかりました。したがってこの項では$x_2$のみが消えて

\[ p(\theta | x_1, y_1, x_2) =p(\theta | x_1, y_1)\]

となることがわかります。

 

さて、ちょっと長かったですが、以上、教師あり学習のモデルに対する事後分布を考えると次のような形になることがわかりました。

\[p(y_2, \theta | x_1, y_1, x_2)=p(y_2| \theta, x_2)p(\theta | x_1, y_1)\]

この式の意味するところを解釈してみましょう。

まず右側の$\theta$の分布を見てください。この分布は、パラメータ$\theta$の分布を学習するには訓練データである$x_1$と$y_1$だけ必要だよ、と言っています。テスト入力$x_2$は学習には影響しないようですね。次に左側の$y_2$の分布を見てみると、未観測である$y_2$の分布を推定するためにはパラメータ$\theta$と入力値$x_2$のみが必要で、過去の学習データである$x_1$は$y_1$がどうだったかなんて知らないよ、と言っています。これは教師あり学習のひとつのシンプルさであり、また制限でもあると言えます*3

ちなみに、実際の応用の場面では学習後の$\theta$なんかどうでも良くて$y_2$の予測だけが知りたいということが多いと思います。この場合は次のように確率の加法定理を使って$\theta$を消してあげる操作が必要になります。これは周辺化(marginalization)と呼ばれています。

\[p(y_2 | x_1, y_1, x_2) = \int p(y_2| \theta, x_2) p(\theta | x_1, y_1) d\theta \]

この式が簡単に計算出来るかどうかは具体的な確率分布(ガウス分布など)の設定の仕方に依ります。*4

 

さて、ちょっと長くなってしまったので「めんどくさ」って思われている方もいるかもしれません。しかし、今回の教師あり学習の例をよく振り返って見ると、ベイズ学習で行っていることは確率モデルを設計してその事後確率を推定しただけです。ベイズ推定が最尤推定を発展させたものとして説明されているのをよく教科書とかで見かけますが、そうではなく、単に確率の加法定理と乗法定理を使って条件付き確率分布を求めているだけと捉えると、ベイズの考え方のシンプルさがわかっていただけるかと思います。

 

次回以降はもっと複雑なモデルに対して有向分離を適用し、事後確率を求めていきたいと思います。

*1:グラフ上ではまるで訓練とテストでデータが1つずつしかないように見えますが、今回の例ではデータが$N$個ある場合でも同じ議論になるので省略しました。

*2:黒丸が「観測データ」だと思い込んでいるとちょっと混乱するかもしれません。この項は$\theta$がある値で条件付けられた場合の$y_2$の確率分布を表しています。

*3:発展的話題ですが、テストデータの入力$x_2$もパラメータの学習に含めたい場合は、共変量シフトと呼ばれる入力$x$の分布を考慮する学習モデル等を考える必要があります。また学習データそのものによって柔軟に未知変数の分布を推定したい場合には、ガウス過程等のカーネルモデルを使う必要があります。

*4:この例だと、例えば$p(y|x)$に対してガウス分布を設定し、$p(\theta)$に対して共役事前分布であるガウス・ウィシャート分布などを設定すれば解析的に計算できます。また別の機会で具体的な計算方法を説明したいと思います。