はじめに
思いの他反響のなかったベイズに関する以下の記事に続き、性懲りもなくベイズの話をします。(ディープラーニングみたいに爆発的な流行は無いけど、ベイズは今後絶対注目度が高まるよ!!)
ベイズ推定の概要
前回はベイズがどういう考えをしていて、結果的にどういうことをしていることになるのかという話を(不正確な点も含みながら)説明しました。
今回は若干踏み込みつつ、しかし深入りし過ぎないように、それで更に理解が深まるように説明していきます。
統計学の考え
手元に集まるデータは確率分布から生成されたものであるという考えが、統計の基本です。
あるデータは、確率分布から生成されていると考えるわけです。例えば、サイコロを1回振ったらどの目が出るでしょう?という問に対して、それは○○の目が出る確率がうんちゃらかんちゃらで、それを知る方法(推定法)を考えましょう!ということです。これは当たり前に感じるでしょうか?
しかしニュートン力学によれば初期状態が決まり、運動方程式が分かれば未来は完全に予測できます。サイコロをどの角度でどのように投げ、床の材質やサイコロの材質(反発係数)、サイコロの重心が分かれば、実は計算すれば分かるのかも知れません。でも、そんなことを正確に計算できるような実データはほとんど世の中にはありません。
なので統計を使いましょうということになります。
データが発生するメカニズムを完全に把握することを諦めて、○○な傾向があるということを言うに留めるということです。
伝統的統計学の考え
を発生させる傾向を表現したのが確率分布です。では確率分布がどのようなものであるか、ということを知れば一通り統計の役割を果たせたということになります。
しかし、先ほど述べたとおり、統計はデータが発生するメカニズムを完全に把握できるということではありません。何らかの傾向を見つけたとしか言えないのです。それでも、その傾向がより正確に知ることが出来たのであれば、それはそれで実用上有用な情報になり得ます。
したがって伝統的な統計学では大量のデータから、データが発生するメカニズムに非常に近い確率分布を推定しようとします。
基本的な流れは
データを複数観測する。
が数学的によく知られた、どの確率分布に似ているかを考える。
に当たりをつけて、大量のデータからの形状を決定する(推定)。
推定されたが本当にまともなものであるかを吟味する(検定)。
という形になります。当然、最初に当たりをつけたがそもそも合っていないのであればお話になりません。推定したのは良いもの、結局はそれが絶対に合っているとは一生言えないのです。でも、なるべく本物のメカニズムの傾向に近いものを見つけたいという心情があります。
伝統的な統計学ではデータが発生する背後にはメカニズムに伴った「真の分布」というものが存在しており、その真の分布を知ることが目標になります。
仮定したという確率分布がパラメータによって形状が完全に決まるとすれば、その分布をという表記で表しておき、真のパラメータに近いパラメータを求めてやりたいということになります。
そしてそのが本当に正しいのか、あるいは仮定した確率分布自体がそもそも間違っていないかを慎重に検討することになります。
ベイズの考え
データを発生させている確率分布があるとしましょう。なにか適当な分布を探してとしておいて、真のに近いを求めようという流れには、当然たくさんの穴があります。
データが確率的に発生しているので、そもそもデータは真のメカニズムを体現する正確なものであると言えるでしょうか。例えば、たくさんのデータセットとの2つがあるとき、を使って推定する結果とを使って推定する結果はピッタリと一緒にはならないでしょう(だからこそ統計的な考えでは検定を行う)。
私達は手元の全てのデータを使いますが、結局はそれはこの世に存在するありとあらゆるデータや未来に発生しうるデータの中のほんの一部を使った推定に過ぎません。
すなわちデータセットが確率的に得られたほんの一部のデータであるので、これから推定しようとするパラメータは、現在手元に得られているデータによって確率的に推定されると考えるのです。
すなわち手元のデータからがどのような値だと言えるかの確率を求めます。このデータセットを使った場合はである確率がであるなどというわけです。
伝統的な統計学では、真のをピタリと求めようとするので、これを点推定と呼びます。一方で、ベイズでは「が○○である確率は××である」というのに留めるのです。
まずは、データのメカニズムを知ることを諦め、傾向だけを知ろうとしたのが統計学でした。
更に傾向をハッキリと求めようとした統計学に対して、その傾向をハッキリ言い切ることすらやめたのがベイズ統計学というわけです。
悪い言い方をしているように見えますが、結局これが機械学習で言うところの「過学習」しない本質的な理由になります(つまり実用上とても良い考え方)。
つまり、推定したいのはではなく、なのです。データからがいくつだと言えるのかの確率を知りたいのです(データの条件付き確率)。
ベイズ統計学
さて、ベイズの哲学は頭に入ったでしょうか。
あとは方法論だけです。
ベイズ統計学の基本道具
ベイズ統計学で使う道具は非常に少ないです。その道具を列挙します。
乗法定理
確率変数とが同時に得られるとしましょう。
その確率はと表記されます。この確率を同時確率と言いますがこれは以下のように変形することがいつでもできます。
これを乗法定理と呼びます。すなわち同時確率は、一方の確率変数が得られる確率に、その確率変数が得られた上で他方の確率変数が得られる確率の積になっているということです。
これはいつでも成り立ちます。
52枚のトランプから1枚だけカードを選びを引き当てる確率をとしましょう。更に52枚のトランプから同時にカードを2枚引いて、が得られる確率をと書くことにします。
さて、以下の手続きを行ってみましょう。
まず、カードを1枚引きます。それはというカードでした。これが得られる確率はでした。もう1枚カードを引きましょう。それがである確率はであると言えるでしょうか。明らかに言えません。とは52枚のカードからを引き当てる確率です。既に1枚引いたのでトランプは51枚になっていますし、私達はを既に引いてるので、次にこのカードを引くことは絶対に無いと知っています。
明らかに2枚目のカードがである確率はとは違う何かです。したがってこれをと書くと決めます(の条件付き確率)。
今、実際に2枚目を引いてみたところ、そのカードはでした。つまり、上記の手続きにおいて、どんなことが起こったかというと
と時系列的に確率的な事象が起こったのです。ところで、今手元にはカードが2枚あります。
同時に一瞬でカードを2枚引くことと、順番に1枚ずつ引くこと、これらは最終的に手元に2枚のが現れるという事象に影響は与えていません(同時に引いても、1枚ずつ見て引いても、確率は変わらんということ)。
なので
と言えるのです。
むしろ、という1つの出来事と、という2つの出来事の関係を結びつけるものをと決めたということです。
独立性
乗法定理というのはむしろ現実を表す出発点です。いつでもこの形で書くことが許されます(許されるのではなく、それが絶対である)。つまり以下の乗法定理というのは現実の全てを表しうるために非常に一般的な式になっているということです。
上記の式がもっと簡単になる特殊なケースも存在します。それが独立性です。
が独立であるとは、
であるということと決めます。乗法定理は出発点でしたから、これを乗法定理の式にいれてやると、
ということになります。すなわち、同時確率は、個々の確率の積で表すことができると、読み替えることができます。
これは、サイコロを2回振るなどの場合に成り立っています。1回サイコロを振って出た目を知ったところで、次のサイコロの出る目に関する何かを知ったことにはなりません。先ほどのトランプの例で言えば、最初にカードを引いて、それを見てから戻し、もう一度ランダムにカードを引くというのも独立性を有していると言えます。
これはベイズで使われるというより、統計全体で使われます。
データをN個観測したとして、その確率データが得られる確率はでありますが、データ1つ1つが独立であると考えれば
と変形できるのです。私達が知りたいのは大抵、データが現れる確率そのものです(これが分かれば、今後どんなデータが出てくるのか予測できるわけ)。
今手元にN個のデータが得られましたが、これが起こる確率はそれ相応に高いはずです(じゃなければ都合良くデータが集まることなど無い)。なので、それを念頭においてが起こる確率を最大にするような確率分布の形状を決めるのが最尤推定法です(言わば手元に得られたデータを正当化しようとする姿勢である)。確率分布の形状をとか適当にパラメータをおいてを上手く決定するということになります。
今データは独立だと考えているので、適当においた関数を使うと
という関数の最大化問題に落ち着きます。大抵は掛け算はしんどいので、をとって
の最大化に持ち込みます(足し算になった!は単調増加なので最大化の解は元の関数と同じ)。
基本的に多くの場合は独立性をデータに仮定します。そうすることで実データが手に入った確率(尤度という)が比較的シンプルになるのです。一方で時系列データのように、データが現れる順番を考慮しなければおかしなことになる場合もあります(というか条件付き確率は出発点であって、運が良ければ条件付きが外れるというだけ)。
加法定理
との同時確率に関して
がいつでも成り立ちます。これを加法定理と呼びます。
同時確率を考えた際に、一方の確率変数が取りうるパターンすべてを網羅してしまえば、だけを考えることと同じという意味になります。
(実はこれも決まり事(公理)であって、本来はというふうに表記されます。このように確率というものを規程したところから、議論がスタートするのです。だから本当はこれが一番最初。)
以上がベイズ統計学で使う道具になります。
少ないです。
再度表記しておくと
(独立な時)
(常に!)
(常に!)
これだけです。これさえ頭に入れておけばとりあえず式変形は追うことができます。
一応、確率変数が連続値の場合、和で数え上げる事ができないため(例えば気温を確率変数としたら、全てを網羅するために足し算はできない。これが積分の始まり)、積分で表現しておくことにします。
この3つのうち、仮定が入っているのは一番上の独立に関する式だけで、他はいつでも成り立っているので好きなように使って良いのです。一番上の式は大抵、データが得られることに関して、それぞれのデータが独立であるという文脈で使われることが大半です。
ベイズの定理
これらをごちゃごちゃ変形してみましょう。
まずは乗法定理から
これの真ん中と右に注目してください。
この部分に関して、中学生並の式変形を食らわします。両辺で割って
出ました。ベイズの定理です。乗法定理について両辺をで割ることにすれば、
とも表せます。どっちもいつでも使えるのです(だって乗法定理変形しただけだから)。とりあえず、いま変形した下の方の式をもうちょっとだけ変形します。ポイントは加法定理を使うことです。
これで分母のを変形してやりましょう。
さあ、乗法定理や加法定理はいつでも使っていいので、もうちょっとだけ遊びましょう。再び乗法定理を見ましょう。
これの真ん中と左の関係式を使ってみましょう。これを先ほど得た式の分母にぶち込んでやれば
これもベイズの定理として出てくる式です。でも全部同じ意味です。
何度も言いますが使ったのは加法定理と乗法定理だけです。したがって、これはいつでも成り立ちます。すなわちベイズの定理はいつでも成り立っているのです。見た目がややこしいだけです。
ベイズでの統計パラメータの考え方
さて、ベイズの定理が出てきたところでベイジアンは更に式変形の遊びを続けます。しかし、ここからの遊びはベイジアンにしかできないことです。
ベイズの哲学を思い出しましょう。
「伝統的な統計学では、真のをピタリと求めようとするので、これを点推定と呼びます。一方で、ベイズでは「が○○である確率は××である」というのに留めるのです。」
がいくつになるのかというのは確率的にしか求めないのです。すなわち、パラメータを確率変数と見ているわけです。実際には手元のデータによって、という値が推定される確率を求めることになるため、データの条件付き確率
という形になります。これを「事後分布」とか言いますが、哲学を思い出せば非常に自然な流れです。ベイジアンはが確率変数だというふうにみているので、(確率変数に関してかならずいつでも成り立っている)ベイズの定理に当てはめても良く
という式になります。ベイズ推定では、ベイズの定理で右辺のように展開できるため、右辺を求めていこうという流れになります。
右辺の方が難しそうじゃないか!と思うかも知れません。しかしよく見てください。分子と、分母の積分の中身は全く一緒です。
そして、分子におけるというのは要するに、パラメータが決まっている時のが得られる確率であり、尤度と呼ばれるものです。は既に観測しているものなので、何に条件付けられているかはともかくとして、その確率分布を適当な形でおいてしまうことができそうです。
例えば、データのヒストグラムが山の形になっていれば正規分布にしてみるとか、ある2種類の値しか取らないならばベルヌーイ分布にするなどができます。
そうだとしてもはどうするんだ?ということになります。思えば統計学は正確なを求めたいというのが本音でした。なのにベイズ統計学では、なるものを予め仮定しなければならないのです。こいつはとんでもないどんでん返しで、ベイズ統計が批判されてきた理由になります(否定されていたのはベイズの定理ではない)。
このは事前分布と呼ばれるものです。しかし、事前分布は上手く選べば推定に影響を及ぼさなくなります(無情報事前分布という)。またデータが十分に多くあれば、事前分布が外れていたとしてもその影響は小さくなることも知られています。
推定に悪影響がなければ、結局残るのはを確率分布で考えるかどうかという哲学の話であり、実問題においてはが完全にピッタリ求まることのほうが少ないと言えるでしょう(もちろん求められそうならそれでも良い。というかベター。理想を言えば運動方程式に相当するものまで求まると良いですね)。
ベイズ機械学習
さて、確率の基本式に従い、が確率変数だと認めさえすれば
と書けることを見ました。忘れてはいけないのは、乗法定理と加法定理はいつでも使いたい放題であるということです。これらを駆使すれば、まだまだいくらでも式変形ができます。
機械学習で行われる基本的な仮定と学習
さて、データが沢山の1つ1つのデータで構成されておりとあるとしましょう。もしもこれら1つ1つのデータがが全て独立であれば、私達がを収集する確率というのは、
と表しておくことができます。統計の基本的な考えは、で決定される確率分布からが出てきてるとしてを求めることでした。ベイズでは自体も確率変数なので、確率変数であるとした時の条件付き確率という見方をします。
すなわち手元のデータは確率変数であるに条件付けられたから集まったと見ます。
(データからが決まるのか、からデータが決まるのか、どっちだよ!と思うかも知れません。でもベイズの定理はいつでも成り立っており、順番を交換しても良いということが数学的に規定されています。今ややこしいのは、パラメータというものがやけに特別だと感じてしまっているからです。どっちかどっちなんてことはないんです。この話は後述します)
したがって手元のデータに関しては
と表記することになり、データは手元にあるので適当に分布を仮定する手がかりもあるというわけです。したがっての事後分布は
とより一層(見た目は)ややこしくなっています。が、実際にはデータが独立であるという仮定を使ったので、むしろ本質的には簡単になっているんです(だって一個一個のデータの確率を掛け算するだけですよ!)。
とりあえず上記の状態でなんとかの確率分布を求めていくことを「ベイズ学習」と呼ぶことになります。
機械学習の方法論
見た目が悪いので、
と書いて続けていきます。さて、一旦右辺の分子を見直しましょう。
ゴチャゴチャ変形してきたのに一旦戻してしまいますが、乗法定理で
さて、の方には各データ点が独立という仮定を置くことでなんとか形にすることが出来ました(分布はヒストグラムとかから仮定する。そして独立なら、あとは掛け算しまくるだけ)。
問題はの方ですが、実用上は計算しやすい分布を適当においてしまいます。
計算しやすいというのは、尤度の分布を仮定したら、その分布と掛け算をした時に数学的に難解な式にならないような分布にするということです。
これは共役事前分布と専門的には呼ばれます。小難しいこと言わなくとも尤度に対して計算が楽になる分布という意味で結構です。しかしそれでも普通は上手く計算できるものではありません。なぜなら分母に積分があるからです。
MAP(最大事後確率)推定
MAP推定ではを最大化するを決めます。この場合はもう積分がしんどいから確率分布を求めるのをやめて、適当にを求めるということです。分母はの積分なので(というより加法定理によって)
となっており、そもそもは分母に含まれていません。したがって、分子の
を最大化しようと考えるわけです。これはを定数の如く扱えば、単に最尤推定をしていることと代わりがありません。を掛けるとどんな良いことがあるのかというと、仮にに関する何らかの情報を有していれば、それを最大化したい関数に組み込めるということになります。
これは結果的に機械学習で使われる正則化と同じ効果を持っています。
しかし、は確率変数だと豪語していたのに、確率分布は求めませんというのは少し悲しいです(というか小難しいことしなくても、普通の推定に正則化を入れましょうというだけで話が済む)。
変分ベイズ
の計算を困難にする大きな要因は分母にあります。
なので、分母が上手く計算できるようにしたいというのが変分ベイズです(もっと広く言えば積分を計算したい)。高校の時、積分の問題を沢山解いたかも知れません。しかし解ける問題でなくては採点できないのでそうなっているだけで、世の中には積分できない関数の方が多いのです。
事前分布と尤度の仮定を上手くおけば、実は以下の積分
は解くことができる場合もあります。しかし統計パラメータは大抵1つではなく、例えば最も身近な一次元ガウス分布であっても
と2つのパラメータを持っています(これは簡単な例だから上手く求まる)。しかし大抵、積分できません。そこでパラメータを複数持つ確率分布に関して
などの変形を行います。いわば「確率変数とには独立である」と仮定することになります。これはいつでも行える変形ではありません。私達が常に使って良いのは乗法定理と加法定理です。
は常に成り立っていても、上記の独立性は本当かどうかわからないのです。
それでも、例えば、今日の平均気温は20度でした。今日の気温のばらつきが分かりますか?昼と夜で温度差が6度だったとして、平均気温は分かりますか?(もしかしたら、分かるんかもしれんけど、パラメータに意味をもたせた時に、本当に独立だってこともある)。
また、パラメータに意味を持たせない、物的実体を持たない何かだったとしても良いんじゃないでしょうか(そもそも、データの特性が知りたいのだから、背後にあるパラメータがハッキリ具体的に何かはわからなくても良い)。独立に分解された何かが、上手くを表現しうるのであればそれで良いのです。分解の仕方は表現力に影響をもたらすことだけを把握しておけば良いのです。
サンプリング
においての困難は分母の積分でした。
しかし、私達が知りたいのは左辺です。なので左辺を直接求めるという方法を取ります。とりあえずにだけ着目すれば
という形をしていることが分かります。分母は非常に難しいということが分かっているのですが、仮に積分が解けた時にはは消えています。なので何らかの定数だと思うことにしておきます。
サンプリング法とは、上手いを選んでそこから乱数としてを発生させ、その確定値を沢山使って分布を近似していくことになります。もちろんただ乱数を発生させていくだけでは、最初に選んだが再現されるだけです。
そこの手順を上手く構築するのがサンプリング法の枠組みになります。
ベイジアンが見ているもの
全てを確率変数だと捉えてきたベイジアンにも、
ただ1つ、確率変数だと考えるのではなく、勝手に固定して決めてしまっているものがあります。それは確率分布の仮定それそのものになります。
モデルの仮定は正しかったのか?
すなわち、ベイジアンは「ガウス分布を仮定したら、パラメータである平均と分散を得たいということになり、推定される平均と分散はデータセットに依存した確率変数だ」という発想のもと、「求めるのはデータに条件付けられたパラメータの確率分布」という道を進みました。
しかし、この話の中で唯一固定的に決まってしまっているのは「ガウス分布」の部分です。ガウス分布を仮定したら求めるのは平均と分散だけであり、そしてそれ以外の形状はいかなる方法をとっても獲得することが出来ません。
すなわち固定的に決まってしまっている分布の仮定(通常は「モデル」と言う)をとして、
という確率分布が考えられるのです。実際、モデルによっては明らかに変わります。データとパラメータの同時分布は、モデルに条件付けられているということです。
つまり今まで学習しようとして事後分布とは
と書くことができるのです。
ここまで来ると、ベイズの定理では分母には重大な意味があるということが分かります。
さて、モデルが確率変数だと考えてみた場合、今手元にあるデータがであるときに、このデータからどのようなモデルを仮定すればいいでしょうか。を確率変数だと思えばの条件付き分布
を考えることができます(これは単に乗法定理を変形しただけです)。この確率が高くないようなはそもそも、今手元にあるによって仮定されるべきではありません。
そして、この右辺分子のに着目してください。
となります(に関する加法定理です。右から左に読んだほうが分かりやすい)。
この右辺は、私達が学習しようとしていたベイズの定理により書かれた事後分布
の分母になっているのです。
実は近似したり定数だと見てみたりしていた分母は、むしろデータとモデルそのものを結びつけうる重大な役割を担っていたのです。
さて、ここで、何かしらのモデルを仮定し、パラメータの事後分布を求めるということに成功したとしましょう。その時には分母も求まっているはずです。
そうなれば、が求まったことになります。したがって、この値が大きければ仮定したモデルのもとで、実際にが得られる確率が高いということで、それ相応に良いモデルを選んだということになります。
更に踏み込んで
で分母を無視することにしましょう(分母はどのモデルを選択するかに関わらず、データそのものが得られる確率であるから、モデルの仮定の議論とは無関係)。
ここでというのはこの世にあるありとあらゆるモデルのうち1つというモデルを選択する確率であり、選択肢は無数にあります。なのでどのモデルに対しても選ぶ確率は均等であると考えれば、
となってきます。こう考えると、右辺は学習ができたという段階で求まっているわけですから、その値から、手持ちのデータがそのモデルであるという確率が見積もられるのです(あくまで比例しているだけ)。
実用上は、複数のモデルで機械学習を試してみた時に
が各について求まりますから、
そのときの右辺の分母の値を見比べることで、どのモデルが良かったかを表す指標になるのです。
これは機械学習では通常「モデルエビデンス」と呼ばれる量になります。
ハイパーパラメータ
さて、続いて学習の方に戻りましょう(学習の時では、とあるモデルで固定して行うのでは確率変数ではなく定数となり消えている)。
以下のベイズの定理の事前分布を考えましょう。
このは予め適当な仮定をすることになっていました(大抵は共役事前分布)。しかしそれが確率分布である以上、その形状を決定するパラメータが事前分布にも出てくることになります。そのパラメータをとしておきましょう。
そうすると、徹底したベイジアンならば、そのパラメータすら確率変数に感じます。すなわちではなく、実は私達がおいている事前分布はという条件付き分布なのではないかと思えてくるのです。そうなると、今まで考えていた事後分布は
と書き換えられます。を人間が確率的に(というか当てずっぽうに)選んだのもとで考えると決めてしまえば、
という形になり、これは上記の数式の基では定数になるので、分布の中に出てくるとかとか普通の数字と変わらなくなり、結局
を考えることになります。この式の元で値を分布を求めるというのは、要するに事前分布を仮定し、更に事前分布の形状までもこれだ!と決め込んでいることになります。このような値のことをハイパーパラメータと呼びます。
徹底したベイズの手法ではこのハイパーパラメータも学習の中で求めようとします。事前分布のハイパーパラメータも確率変数と考え、事前分布(超事前分布)を与えます(階層ベイズ)。
全て確率変数から始める
さあ、すべてを確率変数と考えているベイズには慣れてきたでしょうか。
(徹底した)ベイジアンにとっては全てがこんな感じで確率変数に見えているわけです。
ならば、これから考えることが何であれ、確率分布というものをと書いておくことにしましょう(この時点でモデルを決めることになる)。これまでは、形状はによって決まり、そして手元にあるのはデータだけだというふうに考えてきましたが
どっちが特別ということはあまりありません。
私達は全てが確率変数であると考えており、確率分布を知ることで偶然にも役に立たせられることもあるかもしれないというだけのことです。つまりこれから扱う変数は全て確率変数と思って、
から始まり、実データがならの挙動を知りたいので、これを適当に乗法定理で
としてみて、加法定理で
としてみて、が分かったバンザイ!ということなのです(もちろんこれを実際に解くのは至難の業。そしてこれを見れば分かる通り、同時分布というのはかなり多くの情報が集約されていると言える。いつでも乗法定理や加法定理で、好きな条件付き分布を出せるのだ。逆に言えば、これを求める時、それらの多くの分布を求めなければならない)。
最尤推定では
を、ベイズでは
あるいは
という確率分布を考えてきたということになります。
データからが得られたらどんな嬉しいことがあるのか。
その実用的な嬉しさについては予め前回の記事で説明しておきました。ぜひご覧ください。
最後に
基本的には全部確率変数と見ることです。そして求めるのは確率分布です。使うのは乗法定理と加法定理のみでした。(たまに独立を仮定)
とりあえずいろいろ式を弄ってみるのが良いでしょう。感覚がつかめると、意外と本(PRMLとか)も読めます。実際に使っているのはさほど難しい変形ではありません(もともとガンマ分布とかスチューデント分布とかがややこしい式をしているというだけ。PRMLの場合、解析的に解こうとする場合の解説もあるので、そういうところは厳しく感じるが)。
モデリングができるようになると後は実際に学習を行わなければなりませんが、これはPyMCやEdwardなどライブラリが充実してきているので心配はいらないでしょう(と、自分に言い聞かせている)。