2010年10月27日水曜日

ベイジアンネットワークについて

友人から講義を受けたので ちょいメモ。

※以下の内容については私の理解の範囲なので誤りがあるかもしれません。

ベイジアンネットワークについて
ベイジアンネットワークは、ものすごく簡単に言うと、入力に対しての結果(*注1)をネットワークに学習させ、『この入力パターンのときは、こういう結果』という予測を得られるようにするシステム。

ここで注意しなければいけない点は、ベイジアンネットワークは関数ではないということ。つまり、未学習の入力については結果を出せないということ。イメージとしては、あるパターンについての結果一覧を記載したマトリックスに近い。

これだけではベイジアンネットワークはただのパターン一覧表のように思えるが、ベイジアンネットワークでは扱えるパターンの総数が違う。ベイジアンネットワークでは、2の100乗(該のオーダー)に達しても現実的な計算時間で 『それらしい結果(*注2)』を得ることができる。普通のRDBなどで実装した場合、総レコード数が1該などというテーブルではクエリの結果を得ることはできないだろう。

ベイジアンネットワークの応用について
商業的に応用することを考えた場合、学習のために用意するデータの入手方法が大きな問題となる。前に触れたとおり、ベイジアンネットワークは未学習の入力対する予想はできないため、それなりの結果を得るためには沢山の入出力データが必要になってくる。しかしながら、1000万レコード程度であれば現状のRDBのパターンマッチでも計算可能なことから、ベイジアンがターゲットとするデータ数は1000億などになる。1000億という入出力のデータをどうやって記録(入力)するのか?

例えば、将棋などでは過去の棋譜を相当数ベイジアンネットワークに学習させれば、それなりに強い将棋ソフトができそうに思えるが、そもそも億単位の棋譜を入力させることは人間業ではない。
よって、扱うデータをどのように収集するかということが重要になってくる。

*注1
入力要素の個数は2010年現在では100要素程度まで。結果の要素についても複数要素を扱える。

*注2
完全なパターンマッチではなく確率的な結果という点も特徴かもしれない。