2021年2月20日土曜日

ベイジアンネットワーク①

 ■ はじめに

確率的に起きる事象に関して、限られた情報から正しく意思決定するためにはベイジアンネットワークは非常に強力なツールになる。ここでは、ベイジアンネットワークとは何か?pythonで実装するにはどうすれば良いか?を解説したい。また実際のデータを用いてベイジアンネットワークの計算結果から意思決定を行う例も示す。

■ ベイジアンネットワークとは?

ベイジアンネットワークは確率モデルの一種で、複数の事象の関連性を有向非巡回グラフ(Diredted Acyclic Graph: DAG)を用いて表現しようとするモデルだ。ここでDAGとは、ノードとそれらを繋ぐ有向エッジから構成され、ループ構造が存在しないグラフ構造のことをいう。

下の図のようにベイジアンネットワークでは、DAGの各ノードを確率変数とし、ノード間が有向エッジで繋がれている場合は子の確率変数を親の確率変数の「条件付き確率」で表せると考える。


■ 同時確率と条件付き確率

ここで同時確率と条件付き確率について復習しておきたい。

複数の事象を考えるときに、それらが同時に起きる確率を「同時確率」という。2つの確率的に起きる事象を確率変数AとBとすると、AとBがそれぞれaとbの値となる場合の確率を\(P(A=a, B=b)\)というように表す。

一方で「条件付き確率」とは、「既にある事象が起きたと確定した条件下で」他の事象が起きる確率を示す。確率変数Aがaの値をとった「条件下」でBがbの値をとる確率を示し\(P(B=b|A=a)\)と表す。

また、確率の連鎖律(Chain Rule)より下式が成り立つ。
\[P(A=a, B=b)=P(B=b|A=a)P(A=a)\]

※以降、簡略化のため\(P(A=a)\)などは\(P(A)\)のように確率変数の実現値は省略して表記する。

■ベイジアンネットワークでの同時確率

上記の連鎖律を用いると上図のネットワークで確率変数\(X_1\)〜\(X_5\)の同時確率は
\[P(X_1, X_2, X_3, X_4, X_5)=P(X_5| X_3)P(X_4| X_3)P(X_3|X_1, X_2)P(X_1)P(X_2)\]
となる。
ここで、
  • \(P(X_3 | X_1, X_2)\)は、親である\(X_1\)と\(X_2\)がそれぞれ \(X_1=x_1\)、\(X_2=x_2\)と確定した時の\(X_3\)の条件付き確率。
  • \(P(X_1)\)、\(P(X_2)\)はそれぞれ、\(X_1=x_1\)、\(X_2=x_2\)の実現値をとる確率。
  • \(P(X_5 | X_3)\)や\(P(X_4 | X_3)\)は、親である\(X_3\)が(\(X_3=x_3\)と)確定した時の\(X_4\)、\(X_5\)の条件付き確率。
を示している。この式を注意深く見るとベイジアンネットワークの同時確率は一般的に各ノードの親ノードに関する条件付き確率の積、つまり
\[P(X_1, ..., X_n)=\prod_{i=1}^n P(X_i| Parents(X_i)) \tag{1}\]
の形に書けることが容易に想像がつく。ここで\(Parents(X_i)\)は確率変数\(X_i\)の親ノードを表している。

■ 具体例

簡単なベイジアンネットワークの具体例で同時確率を求めることをしていこう。
ここでは下図のような仮想的なシチュエーションの因果関係の例として考えていく。
ある家に警報システムが導入されており、家に異常(強盗 or 火事)が発生すると警報サイレンが鳴り、それを聞いた近所の人が警察もしくは消防に連絡することになるという因果関係を示している。

それぞれの事象の確率変数は事象が発生(1)するか否(0)かの2値をとる。幸い強盗や火事が発生する可能性は極めて低いが、若干火事の発生確率の方が大きい。また強盗や火事が発生すると高確率でサイレンが鳴るようになっているが、強盗や火事以外の異常でなる可能性もある。またサイレンが鳴るとそれを聞いた近所の人が警察もしくは消防に連絡をする確率が高まる。

この時、何も起きない、すなわち\(B=F=S=P=D=0\)となる確率はいくらだろうか?先ほどのベイジアンネットワークの同時確率である(1)式に当てはめ表から実際の数値をとると、
\[P(B=0, F=0, S=0, P=0,D=0)\\\\=P(P=0|S=0)(D=0|S=0)P(S=0|B=0, F=0)P(B=0)P(F=0) \\\\=0.99*0.96*0.9*0.99*0.98=0.83\]
と計算ができる。

ここまででベイジアンネットワークでの同時確率を求めることまでできた。ベイジアンネットワークの強力なところは、このモデルを用いると、ある事象が発生した場合に、その要因の分析が可能であることである。例えば上の例では警察に通報が行き(P=1)消防に通知が行かない(D=0)という事象が発生したときにその要因が火事である確率、もしくは強盗である確率を求めることができる(要因推定)。
次回は、要因推定について詳しく見ていきたい。





2021年2月2日火曜日

ベイズ学習の枠組み②

 前回の投稿では、ベイズ学習は以下の2ステップで行っていくことを述べた。

  1. 確率モデルの構築:グラフィカルモデルなどを利用しながら、事象の同時確率を定式化する。
  2. 推論:上で定式化した同時確率分布と、その未知のパラメータに対する周辺確率から事後確率を求める
実際にこのステップに従って、非常にシンプルな例の推論を行ってみたい。これによって実際に同時確率と周辺確率を計算することで、事後確率が推論できることが実感できるとおもう。

ここで考える例は以下のとおり。
例)箱の中のボールの数の推論
ある箱の中にボールが3つ入っている。ボールの色は赤か白のどちらかだが、どの色が何個入っているかはわからない。ここで箱の中からランダムに1つボールを取り出しそのボールの色を確認後箱の中に戻すという操作を行う。
【ケースA】1回の試行で「白」が出た場合
【ケースB】3回の試行で「白→赤→白」が出た場合
の2つの場合で箱の中の白ボールの数がどのように推論できるかを見ていこう。

■【ケースA】1回の試行で「白」が出た場合

上のように、確率モデルの構築→推論とステップを踏んで進めていこう。

▼確率モデルの構築

この場合の事象は下図のようなグラフィカルモデルで表せる。ここで\(W=\{0, 1, 2, 3\}\)は白玉の数を示す確率変数で、\(W\)の値により試行時に取り出される玉の色\(X=\{r, w\}\)の確率が決まるというモデルになっている。

また、簡単な確率の考察からそれぞれの確率は下表のようになる。ここで箱の中の玉の数は何の情報もないため等確率で発生するものとして\(P_0(W)=1/4\)、ここで\(W=\{0,1, 2, 3\}\)としている。この\(P_0(W)\)を事前確率という。

▼推論

「1回の試行で白ボールを取り出した」というデータが確定したもとでの白ボールの数を推論したいので、求めたいのは事後確率\(P(W|X_1=w)\)であり、条件付き確率の定義から
\[P(W|X_1=w)=\frac{P(W,X_1=w)}{P(X_1=w)}=\frac{P(W,X_1=w)}{\sum_W{P(W, X_1=w)}}\tag{1}\]
と書ける。上記の最左辺の分子と分母はこれまでの情報で計算できることがわかると思う。それぞれ求めていってみよう。
分子の同時確率は\(P(W, X_1)=P(X_1|W)P(W)\)であり、\(P(W)_0=P(W)\)とすると、
上の表から以下のように計算できる。
\[\begin{cases}P(W=0, X_1=w) & =P(X_1=w|W=0)P_0(W=0)= 0 \cdot \frac{1}{4} = 0 \\P(W=1, X_1=w) & =P(X_1=w|W=1)P_0(W=1)= \frac{1}{3} \cdot \frac{1}{4} = \frac{1}{12} \\P(W=2, X_1=w) & =P(X_1=w|W=2)P_0(W=2)= \frac{2}{3} \cdot \frac{1}{4} = \frac{1}{6} \\P(W=3, X_1=w) & =P(X_1=w|W=3)P_0(W=3)= 1 \cdot \frac{1}{4} = \frac{1}{4} \\\end{cases}\]

また(1)式の分母である周辺確率は
\[P(X_1=w)=\sum_{W}P(W, X_1=w) = 0+ \frac{1}{12} + \frac{1}{6} + \frac{1}{4} = \frac{1}{2}\]
となり、同様に\(P(X_1=w)=\frac{1}{2}\)となる。

(1)式にこれらの結果を代入すると
\[\begin{cases}P(W=0|X_1=w) & = 0 / \frac{1}{2} = 0\\ P(W=1|X_1=w) & = \frac{1}{12} / \frac{1}{2} =\frac{1}{6}\\ P(W=2|X_1=w) & = \frac{1}{6} / \frac{1}{2} =\frac{1}{3}\\ P(W=3|X_1=w) & = \frac{1}{4} / \frac{1}{2} =\frac{1}{2}\\ \end{cases}\]
となり、1回目に白ボールが出た場合、確率的には箱の中のボールは全部白の可能性が一番高いと推論できることを示している。

■【ケースB】3回の試行で「白→赤→白」が出た場合

ケースAと同様の考察を繰り返すと良いが力尽きたので気が向いたら追記予定。
要点は、ボールを試行の度に箱に戻すため、Wが決定された状態では、各試行間は独立なので\[P(X_1,X_2,X_3)=P(X_1)P(X_2)P(X_3)\]
となることを利用すれば良い。

2021年2月1日月曜日

ベイズ学習の枠組み①

ベイズ学習は、観測できない未知の変数\(W\)の確率分布\(P(W)\)を、観測された事象(データ)\(D\)が得られたという条件のもとで推論するものです。すなわち事後分布\(P(W|D)\)を求める作業になります。

例えば、赤玉と白玉が入っている箱がありそれぞれの色の個数の割合\(\theta\)が未知である場合、その\(\theta\)の確率分布\(P(\theta)\)を箱から無作為に取り出した玉の色のデータ\(D\)を得られた事実をもとに推論する、すなわち\(P(\Theta|D)\)を計算するというようなものになります。

もう1つの例としては線形回帰\( y=\boldsymbol{w} \cdot \boldsymbol{x} +b\)の学習パラメータ\(\boldsymbol{w}\)、\(b\)を未知の変数としその確率分布\(P(\boldsymbol{w})\)、\(P(b)\)を観測データ\(D\)から求める、すなわち\(P(\boldsymbol{w}|D)\)、\(P(b|D)\)を計算するというものが挙げられます。

ベイズ学習は一般的に以下の2つのStepで行っていくといえます。

▼ Step1:確率モデルの構築

まず、着目する事象が確率的なプロセスから発生するものだという仮定を置き、そのプロセスをモデル化することから始めます。モデル化には事象間もしくは変数間の関係性をグラフ表現するグラフィカルモデルが有用です。
また事象の確率プロセスがモデル化できるとそれはすなわち変数間の同時確率分布を定式化することになります。
例えば上の赤玉と白玉の割合の例の場合、下左図のようにモデル化することができます。
下図はすなわち、赤玉と白玉の割合自体も確率的に決まっており(\(P(\Theta)\))、そこから取り出される玉の色は玉の割合が\(\theta\)と決まった上での条件付き確率で表されるとモデル化していることになります。
また、線形回帰の例の場合も下右図のようにモデル化することができます(*)。未知のパラメータが確率的に決まっているものとし(\(P(\boldsymbol{w})\)、\(P(b)\))、かつ、データ自体も確率的に発生し、目的変数はそれら確率変数が決定された上での条件付き確率として表現できるというモデリングを行っています。


▼ Step2:推論

Step1で確率モデルが構築できたら、そのモデルと観測データから未知のパラメータの確率分布を推論します。これはすなわち冒頭での話のとおり、観測データ\(D\)を得た条件下で未知のパラメータがとる条件付き確率\(P(W|D)\)を推論することに相当します。
ではこの\(P(W|D)\)はどう計算すれば良いのかを考えていきましょう。条件付き確率の定義から
\[P(W|D)=\frac{P(W,D)}{P(D)}=\frac{P(W,X)}{\sum_W P(W,X)}\]
と書き換えられます。
分子の同時確率はStep1の確率モデルの構築ができた時点で定式化されており求めることができるし、分母は未知のパラメータの取りえる値全てに関して同時確率を足し合わす(周辺化する)ことで求められます。

つまりこの式は、どのような確率モデルの例であっても、同時確率とその未知のパラメータに対する周辺分布を計算することで事後分布\(P(W|D)\)を推論可能であるということを示していることになります。

実際の複雑な確率モデルを扱う場合、周辺確率を求めるのに非常にコストがかかるためサンプリングや変分法と呼ばれる近似手法によって事後分布を計算するケースが多いですが、おおもとのベイズ学習の発想は「同時確率とその未知のパラメータに対する周辺分布から事後分布を計算する」ということにあることは覚えておいた方が良いでしょう。

次回は、非常に単純なモデルを例に、同時確率とその周辺確率から実際にベイズ推論を行う例を見たいと思います。

2021年1月17日日曜日

Artificial Life(ALife)とはなにか?

 最近、ちょくちょくと人工生命(Artificial Life: ALife)というワードを聞くようになった。単語から読み取れるところなんとなくイメージできるけど、具体的にどういう研究なのか?どういう応用が期待できるか?人工知能(AI)と何が違うのか?などのイメージが沸かない。

ここここの記事がその疑問を少し解決してくれたので改めて整理したい。

■ キャッチフレーズは "Life as it could be."

人工生命のキャッチフレーズは"Life as it could be"、すなわち「あり得たかもしれない生命」などと言われるらしい。なるほど実際に地球上に存在する(していた)生物について研究する生物学とは異なり、よりメタ的な生命を研究する。つまり「生命」と呼べるものがもつ一般的な性質(生命であるための必要条件)を探ろうという学問と考えられる。そしてその必要条件が何かを探るために、構成論的にボトムアップで生命を作っていこうする。これは意識とは何かを探る、谷口忠大先生の記号創発ロボティクスとアプローチが似ている。


■人工知能との違い

人工知能は人間の知性すなわち、大脳新皮質の部分の役割にフォーカスしているのに対して、人工生命は身体知や生命維持など脳幹が司る知能にフォーカスを与えている。
さらに私が最もガッテンしたのが、適用方法の違い。人工知能は学習、人工生命は「進化」という違いがある。学習はある程度収束するものであるが、進化は終わりなき進化を続けていく(Open-ended evolution)。そして学習が個の範囲で閉じるのに対して進化は集団として個が相互作用しながら長期的、永続的に進んでいくものである違いがある。

少しづつ勉強を進めていこう。