人口知能や機械学習を勉強しているとたびたび目にするMCMCやベイズといった言葉。
現在ワシントン大学大学院で統計を学んでいる私が、超簡単に数式を使わずに説明していきたいと思います。
MCMCの使い道
MCMCとはMarkov Chain Monte Carlo、日本語で書くとマルコフ連鎖モンテカルロのことです。
MCMCはそもそも何のために使うのか?という学習の目的をまずは最初に説明します。
乱数の生成
MCMCは乱数の生成に使われます。乱数とは文字通り、ランダムに決まる数のことです。
パソコンを使って乱数を生成するのですが、どういう乱数を生成するか、どういう分布を持つ乱数を生成するか、を考える必要があります。
例えばサイコロを振れば1から6まで等確率ででますが、サイコロの出る目を乱数とすれば、1から6まで等確率にしかもランダムに取ってくれないとこまるわけです。
もしサイコロの形が歪で1が出る確率が90%だとしましょう。そのときこの分布に従う乱数を何百個も生成すれば、やはり1がでる頻度は90%くらいになっていてほしいわけです。
難しい分布の乱数の作り方
ちまたでよく使われる分布に従う乱数の生成の仕方はすでにプログラムで書き込まれています。しかし、統計や機械学習を勉強していると、みたこともないような分布の乱数を生成させなければいけないときがあります。
確率密度の計算もできない難しい分布の乱数をどうやったら生成できるのか?というのが問題です。
そしてこの問題を解決するのがMCMCというわけです。
乱数が作れたらうれしいこと
いったん乱数が作ることができれば、色んな事に応用できます。
- シミュレーション:
その分布に従う乱数が取得できたわけですから、その結果を用いてシミュレーションを行うことができます。 - 積分計算:
ベイズMCMCでよく使われますが、積分を計算するときに乱数を使った足し算をすることで、積分の近似値を得られます。
マルコフ連鎖とモンテカルロの解説
ここではマルコフ連鎖とモンテカルロについて、誰にでもわかるように簡単な定義について解説します。
最新の情報だけが重要:それがマルコフ
普通、未来を予測するために過去と現在の情報が必要ですよね。でもマルコフ連鎖は違います。
集めた情報のうち、最も直近のものだけが重要だというのがマルコフ連鎖であり、これがマルコフ連鎖の定義です。
例えば、サイコロを投げるごとに出た目を足していくゲームをしましょう。これまで5回なげてきて、出てきた目の和は下図のようになってるとします。
1回目 | 2回目 | 3回目 | 4回目 | 5回目 | 6回目 |
1 | 5 | 11 | 14 | 17 | 予想したい |
このとき6回目の数値がいくつになるかを知りたければ、1~4回目までの数値は全く必要なく、5回目だけの情報から6回目の数値の確率をはじきだせます。
つまりどれだけ情報を持っていても、直近のデータだけで十分だということです。
例えば他にもこんな例を考えてみましょう。
1回目 | 2回目 | 3回目 | 4回目 | 5回目 | 6回目 |
1 | 5 | ? | 14 | ? | 予想したい |
あなたが知っている情報は1回目、2回目、4回目の数値です。このとき6回目の数値を予想するのに重要なデータは4回目の数値だけです。
なぜなら、5回目の数値は4回目の数値にサイコロで出た目を足して得られ、6回目はその数値にまたサイコロで出た目を足すだけで得られるため、4回目以前のデータがいらないからです。
このように、直近のデータだけが重要であるものをマルコフ連鎖といいます。
モンテカルロは数をこなすということ
モンテカルロというのはいわゆる近似のことで、数をこなして近似していけということです。
例えば、コインを投げて表が出る確率を知りたいとしましょう。そこで、どうやって確率を予測するかというとこれは実に直感的です。
何回もコイントスをして、表が出た割合を計算すると、これがだいたい表の出る確率になりそうですよね。何回も同じ試行をして、平均をとってあげるというのがモンテカルロです。
その結果、コインで表が出る確率は50%だとモンテカルロ的に言えるわけです。
マルコフ連鎖は収束する
マルコフ連鎖の重要な理論について最終的に行きつくところは決まっているというのがあります。
マルコフ連鎖の定常分布
ここでは違うマルコフ連鎖の例を考えてみましょう。コイントスをして表がでれば1を足して、裏が出れば1を引いていく。こういう操作を繰り返していきます。
するとこれもまた、直近の数値がわかればその次の数値も表か裏かで決定できるので、マルコフ連鎖になります。
どういうことか?下の図をみてください。
56回目 | 57回目 | 128回目 | 129回目 | |
数値 | 15 | 予想したい | 15 | 予想したい |
56回目で15だったとします。すると57回目では表が出れば15+1になり、裏が出れば15-1になります。
128回目でまた15になったとします。この時も同じく、129回目では表が出れば15+1になり、裏が出れば15-1になります。
つまり、直近の数値さえ同じであれば、次の数値の予想値(分布)も同じになるということです。
これがどういうことかというと、同じ状況になれば何回もまた同じことを繰り返すわけですから、最終的にいきつく分布がだいたいわかるということです。
この、マルコフ連鎖が最終的に行き着く分布のことを定常分布(Stationary Distribution)といいます。
マルコフ連鎖の作り方
マルコフ連鎖は直近の数値で次の数値の分布が決まるものです。
つまり、1つ前の数値が決まっていれば、次の数値が取りうる値の分布も決まっているわけです。
前の数値がわかる | → | 次の数値の分布がわかる |
逆を言えば、この関係式さえ定義してしまえば、マルコフ連鎖がつくれたことになります。
例えば状態が3つしかないマルコフ連鎖を考えればわかりやすいです。この場合のマルコフ連鎖であり得るパターンは次の通りです。
直近が1の時 | 1→1 | 1→2 | 1→3 |
直近が2の時 | 2→1 | 2→2 | 2→3 |
直近が3の時 | 3→1 | 3→2 | 3→3 |
これらの確率を全て定義してしまえば、マルコフ連鎖が作れたことになります。
そして一旦マルコフ連鎖が作られれば、これは最終的に定常分布に行き着きます。
求める分布に収束するマルコフを作る
MCMCを行う目的は、ある分布に従うような乱数を生成させることにあると、言いました。
ここでもし、その分布を定常分布(最終的にマルコフ連鎖が行き着く先)として持つマルコフ連鎖が定義できれば、それはかなりうれしいことになります。
何故かというと、そのマルコフ連鎖の極限がその分布になるためで、それはすなわち、その分布に従う乱数が生成できるということだからです。
ではどうやって特定の分布を定常分布にもつようなマルコフ連鎖を作るのかというと、Gibb's Sampling(ギブズサンプリング)やMH algorithmがあります。
これらのアルゴリズムを使うことで特定の分布に収束するマルコフ連鎖が作られるので、そこからその分布に従う乱数を近似的に取得することができるというわけです。
マルコフ連鎖モンテカルロの解説
先ほど説明したマルコフ連鎖とモンテカルロ、これをつなげてマルコフ連鎖モンテカルロですが、これが何なのかをここでは説明します。
二つの概念をつなげる
- マルコフ連鎖:
直近のデータだけが大事 - モンテカルロ:
何回も同じ試行を繰り返す
この二つを組み合わることで、MCMC(マルコフ連鎖モンテカルロ)について説明ができます。
まずマルコフ連鎖の収束性を用いて、特定の分布の乱数を生成させることができます。モンテカルロで使うので、乱数はたくさん持ってきましょう。
ここで得られた乱数を用いて、モンテカルロ的に(つまり和をとるだけ)積分を計算していきます。
求めたいベイズ推定の積分
ベイズ推定のアイデアは
パラメータは固定された数値ではなくランダムで定まるものである。
というものです。そして、与えられたデータからパラメータの分布(事後分布 Posterior distribution)を計算しようとすると、積分が出てきてどうも面倒くさいことになります。
もしこの積分の計算を省略できればかなり楽になります。
そもそも目的はパラメータ推定じゃない
そもそも論として、パラメータを推定することが第一目的ではなく、推定したパラメータを用いて次に出てくるデータを予測することが第一目的のはずです。
つまり次のようなことができればベストなわけです。
- 事後分布(Posterior distribution)の計算をせずに
- でも事後分布が持つ情報は使って
- 前のデータから次のデータを予測したい
これが全てMCMCを使えば解決するというわけです。
事後分布に従う乱数の生成は上で書いた通りで、事後分布を定常分布として持つマルコフ連鎖を作ることで得られます。
事後分布の情報はたくさん乱数を生成することで得られます。
前のデータから次のデータを予測したいときにモンテカルロ近似を使うわけですが流れは次のようになります。
与えられたデータから事後分布に従う乱数を作る |
出た乱数をパラメータにもつ事前分布を計算する |
得られた事前分布を足していく |
足し算をしていく部分がモンテカルロの部分で、つまり積分値の計算になります。
どのような値を計算しているかというと、まさしく、与えられたデータから次のデータとなる確率を計算していることになります。
数式を使った説明
最後の最後に数式を使った説明をステップごとにします。
与えられたデータx、予想したい値y、パラメータ\(\theta\)とします。
与えられたデータxから次のデータがyとなる確率を計算したいのが、ベイズ推定の基本です。
数式に直すと
$$p(y|x)=\int p(y|\theta) p(\theta|x)d\theta$$
となり、これを計算したいのですが積分はPCで計算ができないのでモンテカルロで近似、つまり和にします。
$$p(y|x)\sim \sum_{i} p(y|\theta_i) $$
ここで\(\theta_i\)は\( p(\theta |x)\)に従う乱数です。つまりマルコフ連鎖の下りで発生させた乱数です。
これを使った和をとることで積分の中にある\(p(\theta |x)\)の部分が消えていますが、これはパラメータ\(\theta \)が確率\(p(\theta |x)\)で発生するためで、既に確率の情報が\(\theta \)に組み込まれているからです。
計算するのが難しい \(p(\theta |x)\)を直接ず計算せずに、\(p(y|x)\)を計算できることこそがベイズMCMCということです。
サンプリングは選び方次第
以上がベイズMCMC(マルコフ連鎖モンテカルロ)の説明となります。
サンプリングの仕方にはそれぞれメリットデメリットがあるので、これはまた別の話になりますが、MCMCの根本的な理論はここで書いた通りになっています。
参考になれば幸いです。