HELLO CYBERNETICS

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

ベイズ統計

 

 

follow us in feedly

スポンサーリンク

はじめに

ベイズだの頻度論だので盛り上がっているので、ぶん殴られる覚悟で書いてみます。

データとモデル

観測値がランダムに見える場合、それを確率変数 X として扱います。

さて、今、X には我々が知ることのできない真の分布 q(X) があるとしましょう。もしも、X を無限回観測し満遍なくデータを集められるとすれば、q(X) の形状を把握することができるかもしれません。

ところが、そんなのは幻想であって実際に無限回の観測を行うことはできません。すなわち、最初に述べたとおり真の分布 q(X) は、我々が知ることのできない分布なのです。

確率モデル

真の分布を知らない中で、このランダムに見える X が、どのようにランダムなのかを”ざっくりと”モデル化したものが X の確率分布(確率モデル) p^(X) です。p^(X) は何らかの数式で与えられます。ところで、そのモデルは万能でしょうか。p^(X) が左右対称な形状をしているならば、左右非対称な分布を表現することはできません(例えば、正規分布は平均を中心に左右対称だ)。

では、もう少し工夫に富んだ、表現力豊かな分布を使えば良いのでしょうか。それでも、真の分布を知らないのだから、"ざっくりと"作った確率モデルが、真の分布を形状を捉えるに足るかは、やはり知る由もないのです。

では、確率モデルは無力なのでしょうか。

それは違います。

確率モデルは、真の分布を表現するには足らないものかもしれません。しかし、「X は全く規則を持たずに、一様にバラバラな値として観測される」と思ってしまうよりは遥かに的を得た p^(X) を作ることができます。

それは、「真の分布を表現することはできないが、自分が設定した p^(X) が表現できる範囲の中では真の分布に近いであろう形状に仕立て上げることができる」ということを意味しています。なあんだ、やっぱり真の分布を知ることはできないんじゃないか…と思うかもしれません。その通りです。

しかし、当てずっぽうで物事を予想するよりはマシな道具を獲得できる、というのは十分に便利で強力です。それが確率モデルです。

確率モデルを作る

さて、確率モデルをどのように作れば良いのか、ということが重要になります。今、観測されたデータをヒストグラムで表現してみました。

f:id:s0sem0y:20200208150303p:plain

さて、このデータを発生させている真の分布は(私を除いて)この世の誰も知らないという状況です。このデータを見て、どのように確率モデルを作ればよいのでしょうか。

まず、偶然かどうか定かではありませんが、形状が左右非対称に見えます。ということは、正規分布のような左右対称の分布を使うのはミスマッチであると言えるのでしょうか(これは時として批判を受ける事柄である。最小二乗法は誤差を正規分布と仮定したときの最尤推定の結果に等しい。であるから、もしも非対称にバラついているような状況で、最小二乗法を用いるのはおかしいという指摘である)。

実際のところは、それは場合によるとしか言えないのです。

「左右非対称に見えるデータに対して、左右対称な分布でモデル化を行った場合、どう考えても真の分布にはなりえないじゃないか?」と思うかもしれません。しかし思い出してください。確率モデルを作ろうと思ったその段階で、私達は「真の分布それ自体を知るすべを持ち合わせておらず、真の姿を知ることを諦めている」のです。

だから、このデータを集めた理由、すなわちモデル化した末にどのように便利な道具として確率モデルを使いたいかに応じて、あてがう確率モデルは設計者が決めることであると言えます。

例えば、これが金塊の存在を表すヒストグラムで、我々が今、確率モデルを作ってる理由は、最も金塊が多い領域 X に"ただ1回だけ"採掘命令を送るという意思決定のためであるとするならば、最も可能性の高そうな尖った部分だけに興味があるはずです。そういった場合には、極端な話、最頻値だけを調べれば良いことになります(確率モデルの話からそれているようだが、実際、最頻値を得ることは、デルタ分布でモデル化するのと変わり無い)。

すなわち、上記のデータに対してどのようなモデルを設定するのかは、左右非対称であることを上手に表現すべきであるのか、裾の広がり方を十分に把握したいのか、など、自分が知りたいと思う粒度によって決められることなのです。(もちろん、左右非対称なヒストグラムが得られており、その形状に特に興味があるような状況で、正規分布を設定したならば、それは設計ミスであると言えるかもしれません。)

言えるのは、確率モデルと統計学が提供してくれるのは、データに対して確率モデルをあてがったときに、「データに対して確率モデルが妥当なものになるように調整する手立て」だと言えます。この手立てをどのように利用するかは設計者に委ねられるということです。

複雑なモデルを使うことが最善手であるか

さて、自分の知りたい粒度を考慮して確率モデルを作ったとしましょう。 今、綿密に、データの形状を考慮して十分に複雑なモデルを仮定したとします。そして、完璧にデータの形状を表現することができたとしましょう。

それは、今後の応用を考える上で最高傑作が出来たと言えるのでしょうか。

ここで重要になるのは、得られているデータが(我々の知る由もない)真の分布の姿を伝えてくれているかです。 真の分布を知ることを諦めたはずだったのに、今更何を言い出すのか?と思うかもしれませんが、これは非常に重要なことです。

なぜなら、我々はデータに対してモデル化を実施しました。では、今後、新たなデータが得られるとき、そのデータはどんな分布から生ずるのでしょうか。今、我々がモデル化した分布から生ずるのでしょうか?

当然違います。データは相変わらず真の分布から生成されるのです。

手元のデータで綿密に設計された確率モデルは、あくまで手元のデータを再度生成するというシミュレーションを上手に行ってくれるものにすぎません。

すなわち作った確率モデルは、真の分布 q(X) から生成された N 個のデータ

x1,x2,...,xNq(XN)

に関して、確率モデル p^(X) によって

x1,x2,...,xNp^(XN)

というサンプリングシミュレーションが、高い確率で実現できるように調整されたものになっているのです(最尤推定の場合は…だが)。 では、その N 個のデータとやらは、q(X) それ自体を表すのに十分でしょうか?冒頭でも述べました。それは無限個、満遍なくデータを得られたときだけの話であって、q(X) を完全に把握することは有限のデータでは不可能なことです。

ですから、実は手元のデータに対して綿密に作られた確率モデル p^(X) が最高傑作であると言える保証などどこにもないのです。 むしろ、データが少ない中で、やけに複雑なモデルでデータを無理やり表現できるようにしてしまったとすれば、俗に言う過学習という現象が起こってしまいます。

例えば、下記は100個のデータのヒストグラムです。峰が2つあるように見えます。しかし、実はこれはNumpyで生成した標準正規分布からのサンプルなのです。もしもデータを見て、多峰の分布によるモデリングをしてしまった場合、それは良いモデリングと言えたでしょうか(…これは極端な例であるかもしれないが、有限データを扱っている限り、こういうことは常に付きまとう)。

f:id:s0sem0y:20200208155040p:plain

だからこそ、我々がやるべきことは、手元のデータは真の分布を完全に知るための情報を持ち合わせていないという前提で、自分が行いたい応用に応じて確率モデルを設計するということなのです。

モデルの具体的な作り方

さて、上記では簡単な例で、真の分布を知ることはできないし、データは真の分布を表現してくれるとも限らないし、そんな中で確立モデリングをしなければなりません。ということを伝えました。

では、世の中には確率モデルを作る方法としてどのようなものがあるのかというのを簡単に説明します。

モデルの仮定

通常は確率モデルを作る手段として、パラメータ θ を介して調整を行うという形式になります。その場合、確率モデルは

p(Xθ)

などと表されます。この θ を引数に取る関数の作り方によって、モデルが表現できる範囲が制限されることになります。p(Xθ) を設計したら、あとはデータを見ながら θ をどのように扱えば良いのかを決めていくという流れになります。

アンサンブルモデル

データが真の分布を表現するには足らないとすれば(それは常にそうなのである)、データから θ を決め打ちしてしまうのは少し不安が残りそうです。ですので、例えば

p(Xθ1)p(Xθ2)p(Xθ3)p(Xθ4)

と複数個の θi を準備しておいて、これらを混ぜ込んで使うという発想が考えられます。すなわち実際に用いる予測モデル p^(X) として

p^(X)=iaip(Xθi)

としてみるということです。ここで aiθi を使ったモデルをどれくらい予測モデルに反映するかを決める係数です。この係数は

iai=1

となるように定められます。そうすることで、確率モデル p(Xθi) を混ぜ込んだあとの p^(X) 自体も確率分布に仕立て上げることが出来ます。もしも θi を有限個選ぶのではなく、確率分布のパラメータ θ は大抵の場合実数なのだから、考えられる範囲全ての θ を使ってみようと思うならば に変わって

p^(X)=θa(θ)p(Xθ)dθ

という形式になります。ここでは θ を使ったモデルに対する重み関数 a(θ) が、

θa(θ)=1

というようになっていれば、離散のときと同様 p^(X) が確率分布になってくれます。アンサンブルモデルは機械学習手法としてよく用いられる方法であり、データ分析コンペ、Kaggleでも常套手段となっています(通常のアンサンブルモデルの場合は、予測が確率分布の形式で得られるかどうかは問題ではない。そういう意味では、ここでの予測分布の作り方は、アンサンブルモデルの一種のようなものである)。

θa(θ)=1 という形式を見ると、実は a(θ) 自体も確率分布の体をなしているということです。 a(θ) は個々の確率モデル p(Xθ) をそのように混ぜ込むのかを決める重要な部品になります。

この a(θ) を手元のデータ XN={x1,...,xN} から上手に決めてやる必要があります。いま改めて、a(θ)D によって決められる確率分布であるという意味を込めて

a(θ)=p(θXN)

と書くことにしましょう。これをアンサンブルモデルを構築する上では、p(θXN) を求めることが「学習」に相当することになります。これを求め終えたときには、予測モデルは

p^(X)=θp(θXN)p(Xθ)dθ

と表されます。この予測モデルのことを通常は、ベイズ予測分布と言います。 通常、同時確率分布に関して p(a,b)=p(ab)p(b)=p(ba)p(a) が成り立つので、

p(θXN)p(XN)=p(XNθ)p(θ)=p(XN,θ)

と書き表すことが出来、ベイズ予測分布に必要なパーツ p(θXN)

p(θXN)=p(XNθ)p(θ)p(XN)

と表すことが出来ました。これを通常、事後分布と呼び、p(θ) を事前分布と呼びます。 ここに確率モデル p(Xθ) に追加で p(θ) なる分布を追加で仮定しなければならないことになりました。

これが、実に波紋を呼ぶ場合があるようですが、実はこれは下記で紹介するモデル構築方法の一般的な形式であることを後に説明します。

点推定モデル

上記のようにアンサンブルすることなく、ただ1つの θ を採用する方法も考えられます。 何らかの方法で、データ XN={x1,...,xN} から良さそうな θ=θ^ を1つ見つけて p^(X)=p(Xθ^) としてしまう方法です。

これはアンサンブルをする方法を考える必要もなく、素早くモデルを構築する手段として優秀でしょう。単純なモデルを作りたい場合には有効です。

最尤推定

点推定の方法として最も有名なのが最尤推定です。

データ XN={x1,...,xN} に対して、確率モデル p(Xθ) をあてがってみたときに、

x1,x2,...,xNp(XNθ)

というシミュレーションを実施することが出来ます。このシミュレーションが成立する確率(尤度)が最も高くなるように θ を何らかの方法で調整して、そうして見つかった θ^ を使って予測モデル

p^(X)=p(Xθ^)

としてしまう方法です。当然のことながら、手元のデータをシミュレーションできる確率が高くなるようにしているだけなので、手元のデータが偏っていたりした場合には、容易に過学習を行ってしまいます。

制約付き最尤推定※ (最大事後確率推定)

(※造語です) 次に、点推定の手法として制約付き最尤推定を紹介します。

上記のように最尤推定を実施した場合は、手元のデータをシミュレーションする確率が最も高い θ を選んだのでした。とすれば、θ は手元のデータによって決められてしまうものであるわけです。そして思い返せば、手元のデータというのは見えない真の分布 q(X) から生成された確率変数の実現値でした。

そうであるとするならば、データが手に入って確率モデルをつくるという全体の流れにおいて、θ というのは確率変数であると言えます。

そこでデータ X とパラメータ θ の同時確率分布 p(X,θ) を考えて、

x1,x2,...,xNp(XN,θ)

というシミュレーションが高い確率で行われるような θ を選ぼうという戦略が取れます。同時確率分布は常に

p(X,θ)=p(Xθ)p(θ)

という分解が可能になります。すなわち、同時分布を設計することは、最尤推定におけるp(Xθ) に加え、θ 単独に対して p(θ) という確率分布(事前分布)で表現される範囲しか値を取らないという制約を入れて、点推定を行っていることになります。

この手法は、特に回帰モデル p^(YX,θ^) を作る際に、回帰係数 θ がやたらと大きな値を取らないように制限する手法として用いられます(リッジ正則化は p(θ) を正規分布、 Lasso正則化は p(θ) をラプラス分布にしている)。

そしてこれは、下記の事後確率分布

p(θXN)=p(XNθ)p(θ)p(XN)

において、右辺の分子を最大化していることになります(分母は θ から見れば定数)。これが最大事後確率推定と呼ばれる理由です。この事後確率を最大化するような θ=θ^ によって予測モデルを

p^(X)=p(Xθ^)

と作ることができます。

ベイズ予測分布と点推定

さて、事後分布を構築するために事前分布なるものが必要になることを垣間見ました。これは結論を述べると、今まで考慮していなかった決め打ちの分布を、ちゃんと考慮し直すことに相当します。

上記では、推定というものよりも、それによって構築される予測モデルに着目してきました。ここでベイズ予測分布を出発点にしましょう。これはアンサンブルモデルの一種であることを見ました。

p^(X)=θp(θXN)p(Xθ)dθ

p(θXN)=p(XNθ)p(θ)p(XN)

さて、事後分布として、p(θXN) が得られたケースを考えましょう。その時、アンサンブルモデルを構築できるにも関わらず、その分布で最も高い確率を取るような θ を抜き出して、それだけを使って予測分布を作ることにしてしまいましょう。これはすでに説明した通り、最大事後確率推定で得られる予測分布になります。

つまり最大事後確率推定というのは、事後分布を求めた上でわざわざ他の情報を捨てて最頻値と考えられる θ のみを採用する手法であると言えます。利点は、最頻値を探すだけなら、そもそも事後分布を完全に得る必要はなく、推定が楽ということです。そういう意味で、事後分布を求める手間を省けるので、それで予測が上手く行くならば積極的に使って良いでしょう。

どちらにしても最大事後確率推定をするためには

p(θXN)=p(XNθ)p(θ)p(XN)

の設計をする必要があり、ここに p(θ) という事前分布の設計が必要になります。これは仮定しなければならないことが増えて、不確定要素を増やしてしまってるようにも見えます。

ところで最尤推定とは

p(XNθ)

を最大化する手法でした。これを最大事後確率推定と比較してみれば、事前分布 p(θ) と呼ばれるものにデルタ分布(ある一点にしか値を持たないような分布)だと決め打ちして最大事後確率推定をしていることに相当します。

すなわち、最尤推定は事前分布を考えないクリーンな方法というわけではなく、むしろ、集めたデータによって推定される θ のバラツキを一切考慮しないような事前分布を仮定したときの最大事後確率推定なのです。

ベイズ統計学

  • 事前分布と確率モデルを考慮した事後分布を構築し、事後分布を重みに確率モデルのアンサンブルを利用(ベイズ推論)
  • 事前分布は設定するが事後分布を求めるのが辛いので、最大確率以外の重みを捨て単独の確率モデルを利用(MAP推定)
  • 事前分布をデルタ分布で決め打ちしたときのMAP推定(最尤推定)

であると言えます。すなわち、事前分布を設定することは、むしろ今まで決め打ちでやってきたことをちゃんと考え直すということに相当するのです。そして事前分布の設定で推定結果は変わります。

真の分布を知るすべが無い中で、目的と知りたい粒度に応じて「事前分布含め」確率モデルを構築するのがベイズ統計学なのだと思います。モデリングをやり直すこと、複数のモデルを比較検討すること、これらを念頭においておけば、いろいろな事前分布を検討してみる(そもそもの尤度関数側の方を検討してみる)ということを試すのは何も不自然なことではありません。なので、まずは事前分布としてデルタ分布を選ぶ最尤推定でざっくりとモデリングしてみる。あまりにも過学習が怪しいならば最大事後確率推定でモデルを作ってみる。というふうに段階を踏んでも構わないのです。

ベイズ予測分布を得ることの意義

さて、最尤推定と最大事後確率推定の場合は、事後分布に対して最適化問題の形でパラメータを推定することになります。 最適化問題では、必ずしも目的関数の大局的な形状を必要としません(逆に大局的な形状を最初から知っているならば問題は解けているも同然だ)。すなわち、事後分布を扱うと言いつつも、その分布を知っている必要はなく、具体的な値を代入して見てその数値を評価することさえすれば何かしらの最適化手法を使うことが出来ます。

一方でベイズ予測分布を構築するためには、事後分布の形状それ自体を知る必要があります。それは単に事後分布に対して最適化問題を解くよりも難しい話になります。そんなことをしてまでもベイズ予測分布を得る意義は何なのでしょうか。

もしも今向き合っているデータが、比較的単純な分布でモデル化してしまえそうならば、最尤推定などを用いてしまってもいいでしょう。そうではなく、「特異モデル」と呼ばれるものを使わなければならないほどに複雑なデータであった場合には、ベイズ統計学の手続きに頼る方が良いと言えます。

また、ベイズ予測分布はデータ X がバラつくのも当然のことながら、 パラメータ θ に関しても事後分布で推論された程度にバラつくことを想定しています。したがってそれを考慮して得られた予測分布は、原理的に過学習するということはなく、もしもデータが無いような領域に対する予測を迫られた場合には、一応の予測を出しつつも、その予測には自信が無いということを明確に数値化します(もちろん、それらの数値は設計したモデルの元での話だが)。

ベイズ統計学の主題

ベイズ統計学では、ベイズ予測分布

p^(X)=θp(θXN)p(Xθ)dθ

p(θXN)=p(XNθ)p(θ)p(XN)

によって、 X の真の分布 q(X) を知らないなりに真っ当なモデルを構築したと宣言します。

そうすると、理論的な観点で言うと、勝手に作った予測分布 p^(X) がどれほどに有効なのかということが問題になります(そんなことは他の方法でも同じだが)。また、実用的な観点で言うと、ベイズ予測分布を構築する上では、 p(Xθ) という確率モデルと p(θ) という事前分布の2つが必要になります。これらの組をどのように構築するとよいのか(= p(X,θ) という同時分布をどのように設計すると良いのか)ということが問題になります。

これらは結局のところ、p(Xθ)p(θ) の組を定めて事後分布を推論し、ベイズ予測分布を構築する。そしてそれを評価するという一般的な機械学習の試みを回すしかありません。しかし、それは闇雲にやればいいというわけではなく、ベイズ統計学にはそれらを評価する指針として、広く使える赤池情報量基準 (WAIC) と広く使えるベイズ情報量基準(WBIC)があります。「広く使える」というのは、「特異モデルにも使える」という意味があり、例えば普通の赤池情報量基準(AIC)は正則モデルにしか使えないという厳しい制約があったのに対して、WAICはそれを回避した情報量基準になっています。

特異モデルと正則モデル

ここで特異モデルというのは要は、性質がきれいでなく難しいモデルという具合で考えてもらえれば良いです。そしてきれいな方が正則モデルと言うわけです(何が正則かと言うと、フィッシャー情報行列が正則なのである)。

最尤推定は、正則モデルを扱っている限りはかなり良い予測モデルを構築できることが期待できます。だから、そういうキレイな問題を扱っている限りはベイズ予測分布などというものを持ち出す必要がそもそもなかったのです(事前分布をデルタ分布で決め打ちして、そして最大事後確率推定をするということで十分に良いものが作れた)。

近年はニューラルネットワークが訳の分からんパラメータで猛威を奮っている領域もあるように、複雑な特異モデルが優位に働く(言い換えれば、キレイな問題に分割できないデータを扱う)ケースも増えてきました。今から扱うデータを特異モデルで表現しようというときには最尤推定を行って何らかの方法で評価してみるということはあまり意味をなさなくなります。

何をいっているのかと言うと、複雑なモデルは尤度関数が多峰性を持っており、勾配法などの最適化手法ではそもそも最適解(最尤推定解)が得られていない(すなわちハナから最尤推定ができていない)ということもありますし、仮に大域的最適化手法によって最尤推定を確かに実施できたとして、特異モデルにおいては最尤推定解が良い解である保証がそもそも無い、あるいは著しく悪化するケースがあるのです。(ともすれば、ニューラルネットワークが上手い予測をするのは、むしろ最尤推定が不完全に終わっているという偶然の産物かもしれない…?)

また、これは最大事後確率推定の話をしても同じです。最大事後確率推定では事後分布 p(θXN) の最頻値になる θ だけを使って予測モデルを構築する手法でした。これは言い換えれば、事後分布が本来持っているバラツキの情報をすべて捨て去るということになります。仮に、最大事後確率推定をする際の事前分布をあれこれ工夫したり、超事前分布を敷いてみたりしても、最終的に最大事後確率推定で事後分布の最大となる点以外の情報を捨て去ってしまうならば、話は同じです。

ベイズ統計学のまとめ

ベイズ統計学は、事後分布の重み付けによって確率モデルをアンサンブルし予測分布を構築します。そして事後分布は、確率モデルと事前分布の組によって定義されます。最大事後確率推定は、事後分布が最大値を取るようなパラメータのみを1つ選んで予測分布を構築する手法であり、ベイズ予測分布の特殊な簡略法です。最尤推定は最大事後確率推定において事前分布をデルタ分布とする、パラメータのバラツキを考慮しない一点突破な推定方法です。

事後分布で、パラメータの複雑な振る舞いを考慮し、ベイズ予測分布を構築することで特異モデルに対する真っ向勝負が可能になります。キレイでない分布を使ってでも、なんとしてもデータに対する振る舞いをモデリングしようという試みは、「人間が容易に理解できるような単純な分布でなくとも良し」とする非常に実用的な考え方であると言えるでしょう。しかしただ闇雲なわけではありません。汎化誤差、真の分布との隔たりをちゃんと評価し、モデルが良い性能を持っているのかを適宜確認すればよいのです。

”本来真の分布を知るよしもない”という現実を振り返れば、むしろ現実的データ分析手法です。