HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

最大事後確率推定(MAP推定)の基本

 

 

follow us in feedly

f:id:s0sem0y:20160923214706p:plain

はじめに

MAP推定とは

その名の通り、事後確率を最大にする推定方法。

尤度を最大にする方法を最尤推定というが、最尤推定の哲学は、「統計パラメータは正しいものが唯一存在する」というものです。つまり、データ\bf x_nは唯一の正しい統計パラメータ\bf θで表現される確率分布から生起するということです。

 

一方、MAP推定の哲学は、統計パラメータ自体も確率変数だと考え、手元にあるデータ\bf x_nからパラメータ\bf θが確率的に決まると考えます。正確にはこれはベイズ統計学の哲学ですが、ベイズ統計学の基本的なパラメータ推定方法がMAP推定ということになります。

 

どちらが優れているか

どちらが統計学として優れているかというのは、「優れている」という言葉の定義によります。

ベイズ統計学は大雑把に言えば、ある意味、統計学がサイエンスであることを諦めた方法であるとも言えます。つまりベイズ統計は、統計パラメータというものを用いて、データの根源に潜む唯一の解を探索することを諦め、有限の確率的に生起するデータからパラメータ自体も集めたデータに依存する確率的な変数であると考えてしまうのです。

 

このことは賛否両論あるところですが、工学的応用を考える上では、ベイズ統計学は手元のデータだけで妥当な決定をするための便利な道具になります。推定しようというパラメータ自身がデータに依存する確率変数であることを認めれば、データが新たに手に入った時、その新たなデータを反映することで簡単にパラメータを更新(ベイズ更新)することができます。

 

しかし、実はここまでは通常の統計学もそれほど否定するものではありません。

なぜなら、(パラメータを確率変数だと考えることはさておいて)データが新たに手に入り、それが推定に使えそうだというならば、そもそもさっきまでのデータが不十分だったんだと考えて、唯一の正しいパラメータをもう一度検討しようとすることはできるためです。

 

ベイズ統計学が確率分布を扱う際の最も特異な点は、「主観確率」の存在にあります。

手元にデータがあろうがなかろうが、きっと「データはこういうことになっているだろう」と考えられる場合には、それを確率分布に反映してしまうことができるのです。MAP推定はそのような主観を含めたパラメータの推定を行います。

言わば、データと主観から確率的にパラメータを推定するのがベイズ統計学ということになります。(ただし、今「主観」と言ったもの自体に、何らかの経験則や統計的裏付けがあってもいいので、そういう意味では客観的な別の指標を反映しやすいということにもなります。)

 

そして、このことが実は、機械学習における正則化に繋がることを今回は数式を追いながら見て行きましょう。

 

尤度、事後分布、事前分布

ベルヌーイ分布

例題としては非常に簡単なベルヌーイ分布を採用します。

ベルヌーイ分布とは、簡単に言えば不均一なコインを1回投げて表になるか裏になるかの確率を表現するものです。この場合、表が出る確率に相当するμを知ることができれば、裏が出る確率は1-μと決まります。

確率変数はx=\{Head,Tail \}という事象に対応しますが、数式として表現するためにx=Headx=1で表現することにし、x=tailx=0で表現することにします。

(いつでも実際の事象と、それに対応する数値を結びつけて定義するようにしましょう。でないと数式が得られません。確率変数とは、変数という名前がついていますが、現実の事象を数値に変換する関数であるとも言えます。)

 

これで、結局、「1が出るか0が出るかの確率変数x」の確率分布を以下で表現できます。

 

p(x;μ)=μ^x(1-μ)^{1-x}

 

コインを投げるのは1回です。つまり、xは1回のみ、01の値を取ります。コインを投げてみて、x=1となる確率は

 

p(x=1;μ)=μ^1(1-μ)^{0}=μ・1=μ

 

となります。逆にx=0の場合の確率は

 

p(x=0;μ)=μ^0(1-μ)^{(1)}=1・(1-μ)=1-μ

 

となり、確かに考えていた不均一なコイン投げに相当していることが分かります。

パラメータの推定とは、コインを実際に複数回投げてみて、実際に起こる事象を観測してみることでμがいったいどれくらいの値なのかを計算することです。

当然、これはコインを投げる問題ではなく、選手Aと選手Bがボクシングの試合をして、どちらが勝つかという問題にも当てはめられます。二者択一の確率を表すのがベルヌーイ分布です。

 

パラメータの推定方法の違い

最尤推定と尤度

ベルヌーイ分布は以下で表されました。(ちなみに先ほどのようにx=1が表を、x=0が裏を表すように確率変数を定義しておきます。)

 

p(x;μ)=μ^x(1-μ)^{1-x}

 

この場合におけるパラメータμを知るために、実際にコインをN回投げて以下の結果が得られたとしましょう。

 

D=\{1,0,0,1,1,0,1,0,1,1,......,0 \}

 

Dは確率変数の実現値x_1,x_2,...,x_Nを並べたものです。このDというものが得られる確率を考えます。ここでコインを投げるという事象は、毎回独立であるので、前の結果が後の結果に影響を与えることはありません。1回投げるたびに、p(x;μ)=μ^x(1-μ)^{(1-x)}によって値が決定します。

例えば最初の3回\{1,0,0 \}が起こる確率というのはx=1x=0を確率分布に代入してみて

 

p(x=1;μ)p(x=0;μ)p(x=0;μ)=μ・(1-μ)・(1-μ)

 

となります。N回投げたのならば、その時のxの値を代入してひたすら積を取っていけばいいわけです。全部を書き下すのは面倒なので、文字を使います。今、xn回目の値がx=x_iだったとしましょう。すると結局

 

p(D;μ)=\prod_{i=1}^{N} μ^{x_i}(1-μ)^{1-x_i}]

 

が、Dが実現する確率です。

ここで、もしもμ=0.01のような場合(これはx=1となる確率を表している)、D=\{1,0,0,1,1,0,1,0,1,1,......,0 \}のようなデータは得られるでしょうか。あまりにもx=1が発生し過ぎだと感じるでしょう。つまりμ=0.01はなんかおかしいということです。

このデータが実際に実現したものである以上、パラメータμDが実現するような値になっていないといけないわけです。

そこで、Dが実際に実現し、その確率が上の式で表されたならば、その確率が一番高くなるようにμを決めよう、というのが最尤推定です。

 

p(D;μ)

 

のように、「確率分布からデータが実際に生起した際の確率」のことを「尤度」と呼びます。

そしてこの尤度を最大にするのが最尤推定ということになります。

 

MAP推定と事後分布

MAP推定では尤度を最大化するということをしません。

事後確率を最大化します。

 

p(D;μ)

 

という尤度に関して、μも確率変数だと思えば以下のように書くことができます。

 

p(D|μ)

 

つまり、尤度というのは確率変数μがとある値のときの、データが生起する確率(μの条件付き確率)ということです。通常μは唯一の値を持ち、確率変数などではないというのが統計学の考え方ですから、このように条件付き確率で表現することはしません。

 

μを確率変数と考えからには、逆に

 

p(μ|D)

 

という確率を考えることができます。これは、確率的に生起したデータDが得られたときに、μが取る値の確率を表現しています。これを事後分布と呼びます。

たしかに、仮にデータの採取が不適切である場合と、適切である場合を考えれば、集まるデータDは違ってくるわけで、確率的に集まるDによって推定されるμも確率的にブレるという考え方は、実用上あり得そうな仮定です。

 

そして事後分布確率は、ベイズの定理により以下のように変形することができます。

(ベイズの定理は、条件付き確率の、条件と結果を入れ替える作用を持っています)

 

p(μ|D)=\frac{p(D|μ)p(μ)}{p(D)}

 

この数式を見てみると、分子の第一因子p(D|μ)が尤度となっています。第二因子p(μ)が事前確率(事前分布とも言います)と呼ばれるものです。これがいったい何者なのかは通常誰にも分かりません。主観確率というものはこの部分に介入してきます。

そして分母のp(D)に関しては、単にデータp(D)が生起する確率でありますが、これはMAP推定では計算する必要はありません。

なぜなら、今推定したいのはμであって、分母はμを含まないため単なる定数倍にしかならないからです。従ってMAP推定では

 

p(μ|D)∝p(D|μ)p(μ)

 

と表してしまい、この確率を最大にするようなμを獲得します。

 

事後分布を見てみる

事前分布

以下の式

 

p(μ|D)∝p(D|μ)p(μ)

 

において、右辺の第一因子が尤度、第二因子が事前確率であると言いました。

尤度はデータが手に入っていれば、最尤法を考える時と同じように式にすることができます。ベルヌーイ分布の場合は

 

p(D|μ)=\prod_{i=1}^{N} μ^{x_i}(1-μ)^{1-x_i}

 

でしたね。

しかし事前確率とは一体何でしょうか。これはどうすればいいのでしょうか。

端的に言えば、MAP推定とは、尤度に何らかの確率を掛けたものを最大化する推定ということになります。その何らかの確率をどうするのかが肝になってきます。

 

この際に使われるのが共役事前確率です。

尤度自体は、ベルヌーイ分布を仮定するのかガウス分布を仮定するのかによって姿を変えます。コレに対して事前確率は勝手に決めることができてしまうのです。従って、尤度の形に合わせて「計算が面倒にならないような」確率分布を適当に当てはめてしまおうというのが共役事前確率の考え方です。

 

ベルヌーイ分布に対してはベータ分布というものが用いられます。

ベータ分布は

 

Beta(μ|a,b)=\frac{\Gamma (a+b)}{\Gamma (a) \Gamma (b)}μ^{a-1}(1-μ)^{b-1}

 

という式で表されます。ここで\Gamma(x)=\int_0^∞ u^{x-1}e^{-u}duという関数(ガンマ関数)ですが、これはそういうもんだと思っておいてください。今回は関係ありませんのでガンマ関数の部分は適当にA(a,b)と表してしまって

 

Beta(μ|a,b)=A(a,b)μ^{a-1}(1-μ)^{b-1}

 

という分布を事前分布として選びます。

すると、事後分布は

 

p(μ|D)∝p(D|μ)p(μ)=\prod_{i=1}^{N} μ^{x_i}(1-μ)^{1-x_i}A(a,b)μ^{(a-1)}(1-μ)^{(b-1)}

 

となりますね。尤度の方でx_iというのは01の値であり、例えば1が1回0が2回ならば

 

p(x=1;μ)p(x=0;μ)p(x=0;μ)=μ・(1-μ)・(1-μ)=μ^1(1-μ)^2

 

となるのを先ほど見ました。この部分はN回投げるならば

 

\prod_{i=1}^{N} μ^{x_i}(1-μ)^{1-x_i}=μ^{\sum_{i=1}^N x_i}(1-μ)^{\sum_{i=1}^{N} (1-μ)}

 

と表すことができます。すると事後分布の式はとても綺麗に

 

p(μ|D)∝μ^{\sum_{i=1}^N x_i}(1-μ)^{\sum_{i=1}^{N} (1-μ)}A(a,b)μ^{(a-1)}(1-μ)^{(b-1)}

 

=A(a,b)μ^{(\sum_{i=1}^N x_i)+a-1}(1-μ)^{(\sum_{i=1}^{N} (1-μ))+b-1}

 

と表すことができます。A(a,b)μを求める上では関係ない定数倍なので事後確率は結局以下のように表すことができます。

 

p(μ|D)∝μ^{(\sum_{i=1}^N x_i)+a-1}(1-μ)^{(\sum_{i=1}^{N} (1-μ))+b-1}

 

共役事前分布を用いることで、事後確率が元々の尤度からほとんど姿を変えること無く書き表すことができました。そして、この事後分布は、あたかもx=1a-1回分だけ多く出ており、かつx=0b-1回分だけ多く出たという形になっています。

つまりベルヌーイ分布に対してベータ分布という共役事前分布なるものを導入した場合には、このa,bを適当に調整することによって、もともとコインがどれだけ偏っていそうかという主観を反映できるというわけです。

このように、勝手に設定できる(しなければならない)パラメータ(今回はa,b)のことをハイパーパラメータと呼びます。 

 

共役事前分布自体は、完全に数学的な都合で導入されていますが、式を整理した結果、何らかの解釈が得られる場合もあるのです。計算がめんどうとかがどうでもいいなら、何らかの分布を自分で適当に事前分布に設定することも可能です。

 

 

MAP推定

事後分布がわかったところで、この確率分布が最大となるようなμを計算します。

ここで、事後分布は「データが集まった時のパラメータのとる値の確率」を表していることを思い出しましょう。つまり、事後分布をが最大となるμというのは、最尤推定ほど面倒な説明が全く必要なく、「パラメータμが確率的にいろんな値を取るので、一番よく出る(確率の高い)μを選びましょう」という単純なアイデアになります。

 

事後分布の最大化

対数を取る

最尤推定でも同じですが、事後分布は基本的に積の形に連なっていくので「対数」を取ってしまいます。これをしていい理由は、対数が単調増加関数であるため、変換をしたとしても変な山ができたりしないことが挙げられます。

そして更にf(x)の対数を取って\log f(x)としてxで微分すると

 

\{ \log f(x)\}'=\frac{f'(x)}{f(x)}

 

となり、f'(x)=0のとき\{ \log f(x) \}'=0となるのが分かります。つまり、f(x)の極値とと\log f(x)の極値は一対一に対応するのでこの変換は正当化されるわけです。

 

p(μ|D)∝μ^{(\sum_{i=1}^N x_i)+a-1}(1-μ)^{(\sum_{i=1}^{N} (1-μ))+b-1}

 

の対数を取れば

 

\log p(μ|D)=\{(\sum_{i=1}^N x_i)+a-1\} \log μ+ \{(\sum_{i=1}^{N} (1-μ))+b-1\} \log (1-μ)

 

と表すことができます。

 

求めたいパラメータで微分する

そしてこの式が最大となるようなμを求めたいので、μで微分して0となる条件を解けば、MAP推定解μ_{MAP}が得られます。

 

μ_{MAP}=\frac{(\sum_{i=1}^N x_i)+a-1}{N+a+b-2}

 

と求まります。簡単な計算なので余力があればやってみてください。

 

 

追加の話題

推定法

事後分布を使った推定法はMAP推定だけではありません。

事後分布のことを思い出してください。

 

事後分布は「データが集まった時のパラメータのとる値の確率分布」です。

 

つまり、事後分布が求まった時点で、パラメータという確率変数がどのような値を取りそうかというのを見ることができます。最も確率が高くなる値を選択するのがMAP推定ですが、せっかく確率分布そのものを獲得できているわけですから、期待値を計算してみるということもできるはずです。

 

ベイズ理論に興味があれば探してみてください。

 

正則化との関連

回帰や分類の問題に対しても、確率分布をフィッティングするという形式で問題を捉えることができ、その際にMAP推定を使うことができます。

そうした場合は、事前分布が正則化項の役割を担います。理由は単純で

 

p( {\bf θ}|D )∝p(D|{\bf θ})p({\bf θ})

 

 

を最大化しようとする際に、対数を取ることを見ました。

この段階で対数を取れば、右辺は

 

\log p(D|{\bf θ}) + \log p({\bf θ})

 

と分解されます。第一項は尤度ですから、通常の推定です。そして第二項が事前分布であり、この項が何らか別の影響を及ぼしてきます。事前分布の選択の仕方によって、何らかの正則化項を追加することができるのです。

特に、線形回帰の問題において事前分布にガウス分布を仮定すると、L2正則化が適応されます。

 

 

 

記事

s0sem0y.hatenablog.com

 

s0sem0y.hatenablog.com