はじめに
理論的背景の1つとしてベイズがある
「ベイズ」というのは理論的背景・考え方の1つだと思ってもらって構いません。
従って、「自然言語処理」と「画像認識」という分野の比べ方はできても、「自然言語処理」と「ベイズ」という比べ方をするものではありません。
ベイズというのは考え方であり理論であり、従って特定の応用分野のみを指す言葉ではありません。「自然言語処理のベイズ的取り扱い」だとか、はたまた「ニューラルネットのベイズ的取り扱い」などのような言葉の使い方ができ、非常にカバー範囲の広いものになっています。
ベイズの考え方
ベイズの考え方の特徴的な点として「パラメータを確率変数として考える」ことが挙げられます。
さらっとベイズについて調べていると「主観確率を認める」とか「ベイズの定理を使う」などの点が目につくかもしれません。しかし「主観確率」というのはベイズの立場でも注意が必要ですし、「ベイズの定理」自体はベイズ的な取り扱いをする場合でなくとも用いられます。
パラメータを確率変数だと考えるとどのようなことができるのでしょうか(あるいはどのように考えるべきだと言えるでしょうか)。
この問いかけにより、ベイズ理論を用いたアルゴリズムは、よく見る機械学習の手法とは一線をかいた推論を行います。
今回はその特徴を分かりやすく抑えて説明したいと思います。
ベイズを使った予測の結論
先に見通しをよくするため、ベイズ理論を使った場合の予測が結局何をしているのか、その結論を述べてしまいたいと思います。
機械学習とは入力に対して出力
を行う予測器
を
を調整することで上手く作り上げようというものです。ベイズの考えを使った機械学習では予測器
を以下のように構築します。
つまり、いろいろな予測器を考えて、それらを重み係数
で足し合わせたものになっているのです。こう見ると非常に単純明快ですね。
それぞれの予測器はそれぞれのパラメータ
を有しており、
という形をしています。つまり普通の機械学習では
を上手く求めて
をただ1つだけ構築し、それを予測器として使うのですが、
ベイズでは、を複数個準備して
も複数個準備し、それらを統合したものを予測器として使っているのです。
この際に予測器に対する重みの総和は
となるように求めます。つまり、構築される予測器
は、パラメータ
の予測器に対する重み付き平均になっているのです。
はパラメータ
が予測器としてどれだけ信頼が置けるのかを反映した係数になっていれば、上記の考え方真っ当に見えます。
ベイズの理論ではパラメータを確率変数と考えることで、自然とこのような予測器を構築します。
では詳しく見ていきましょう。
ベイズ理論
まず「パラメータを確率変数として考える」というのがどういうことかを確認していきます。
以下数式が出てきますが、分かる人ならそのまま、わからない人も日本語の解説を見てそういうもんだと思って読めば納得できるように書いていきます。
伝統的方法
確率変数と確率分布
データがN個、あったとしましょう。このようなデータ
は何らかの確率分布から現れていると考えられます。
確率分布から現れてくるデータは確率変数と言い、例えばコイン投げのケースであればコインの「表」や「裏」などが確率変数であると表現します。一方で、コインが表になる確率や裏になる確率について記述しているのが確率分布だと考えてください。まとめると確率変数は、確率分布から生起すると言います。
例えば、コインが表になる確率をとすれば裏の確率を
と考えることができるので、このような場合の確率分布は
という確率を反映した表現になっているべきで、このような分布は
と書き表すことができます(ベルヌーイ分布という)。ここで表や裏というのを数値的に扱うため、「を表」、「
を裏」と対応付けています。このように対応つけることで、上記の式は
と確かに最初に考えたコイン投げの確率をしっかり表現できています(です)。
ともかく、データは確率分布から出てきているということです。逆にその確率分布を知ることができれば、データのことをかなり把握できたことになるため、当然データ予測にも役立てられるというわけです。
このコインの話の場合は、たくさんコインを投げることで「」がたくさん得られるわけですから、これをデータ
とすることになります。
確率分布とパラメータ
集めたデータ()から、このコインの表、裏に関する確率分布を知りたいというのが統計的な推定と呼ばれるものです。コインは裏か表しか出ないので、その二者択一を表現した分布が以下でした。
この形で表されると仮定すると、この分布はを定めることで完全に形が決定されるため、この分布のパラメータは
だと表現します。すなわち
を知ることが統計的推定になります(機械学習で言えば学習に相当する)。
以下、一般に確率変数の確率分布をパラメータ
として
と表します。
パラメータは唯一無二!
確率変数を観測することで、その確率分布のパラメータを知りたいのですが、
パラメータというのは「唯一無二」であると考えるのが普通の統計の考え方です。
つまり「手元のコインは表が出る確率も裏が出る確率も明確に決まっている。真実というものが存在するのだが、それを我々は知らない。だからなるべく正確に知りたい」というスタンスなのです。
すなわち
に関してを実際に観測してみることで、妥当な
という未知のパラメータをただ1つ決定したいということなのです。
ベイズ的な考え方
パラメータは確率的に変動する
ベイズでは、パラメータに対して全く違う考えを持っています。
例えば、コイン投げを100回やって観測したデータから推定したパラメータと、その後、もう1度100回やりなおして推定したパラメータは同じになるでしょうか?近い値になれども、完全に一致することは難しいでしょう。
真実はいつも1つであり、コイン投げの背後には真のパラメータが有るかもしれません。しかし、有限このデータしか持たない我々には、結局それを知るすべはないのです。見方を変えれば、集めたデータ次第で推定されるパラメータが変わるということです。ここに着目して、
ベイズでは、確率分布のパラメータ自体も確率変数だと考えます。
普通の考え方では確率分布を
と表記していました。この表記では「」より右側はパラメータという確率変数とは異なる特別な存在であることを意識しています。一方で、ベイズの扱いでは、確率変数
の確率分布は
と表現します。これは条件付き分布と呼ばれるもので、例えばと書けば、確率変数
の値が決定したときの
の確率を表します。例えばトランプを引くときの一枚目と二枚目だと考えればわかりやすいでしょう。
通常の統計でもこのように確率変数と確率変数に関して条件付き分布を考えることはします。しかし、パラメータに関してこのような表記をするのはベイズだけです(最近はベイズを意識しようがしまいが、この表記が多いと言えば多いのですが)。
何が変わるのか
ベイズ的な取り扱いでは、確率分布のパラメータすらも、データ
が確率変数であるのと同じように、確率変数だと考えてしまいます。
そして、我々が既に手元に持っている(確定している確率変数)はの方です。従ってベイズ的な取り扱いではパラメータ
を推定する際に
を考えます。が分かっている時の
の確率を考えるというわけです。
心の中では、「このデータが集まったということは、確率分布を決定づける
は多分これくらいの値だろうな」と感じているわけです。正確なただ1つの真実など最初から求めていないというわけです。
ベイズの定理
ベイズの定理とは条件付き確率の順番を入れ替えて、計算しやすくする便利な公式です。これはベイズ的な考えでなくとも認められたものであり、広く応用されています。
普通のベイズの定理
通常、2つの確率変数に関するベイズの定理は以下となっています。
この定理は、は計算しにくいが
が計算しやすい場合に応用することができます。
ベイズ的なベイズの定理
何も特別なことはないのですが、ベイズ的な考えでは確率分布のパラメータすらも確率変数と考えるために、下記のようにベイズの定理を使うことができます。
が分かっている時の
の確率分布をこのように変換すると、分子の第一因子は通常考えられるパラメータ
のときの
の確率分布です。そして第二因子
は、素のパラメータの確率分布です。この部分は、知る由もない分布であるため、通常適当な仮定を置いて計算をしてしまいます。
ベイズではデータもパラメータも全部確率変数であるという意識があるため、上記のような変形も平気で行うことができます。
通常の統計学ではなるものは存在せず、確率変数ですら無いわけで、このような発想には至りません(許されません)。
実応用にベイズ
ここまではベイズ理論の心について見てきました。パラメータはデータによって決定される確率変数であるということでしたが、そのように考えると、実応用ではどのような変化が現れるのでしょうか。
機械学習の姿勢
機械学習では通常、データに対して
を出力する関数
を作りたいというのが基本的な考え方です。例えば今日の株価を入れたら明日の株価を予測して返してくれる関数などを作るために、過去のデータを学習させるケースなどが考えられます(それが実現できるかは別として)。
とりあえず、
という関数を考え、過去のデータをよく表すようなを決定していこうというのが通常の機械学習になります。
確率的な機械学習の考え
この時、が確率変数で、更に
も確率変数だと考えるのは自然です。
が決まれば、
が完全にぴったり決まることは難しく、ある程度ブレがあると考えるわけです。こう考えると、私達が知りたいのは、
を知っている時に、
がどんな値を取りやすいのかの条件付き確率分布
ということになります。この場合には例えば、が平均
で分散
の正規分布だと仮定します(別に正規分布でなくてもいいが、一例として)。
と考えるわけです。ここで平均とすることにします。
確率的な機械学習では、通常の機械学習の関数を統計的なパラメータのどこかに潜り込ませることで問題を定式化します。
式は以下のようになり、
このような仮定をした場合、「本来ならばの関係があり、平均的には
が与えられた時の
の値は
になるはずが、何らかのノイズによって分散
だけのブレがある」と考えていることになります。
統計パラメータの推定(学習)
このようにして定めた確率分布は、パラメータを明示すれば以下のようになります。
このように置いた確率分布のパラメータを知ることができれば、を入力した際の
の値が確率的にわかるので、上手く予測に使えそうだということになります。これが機械学習の基本的なモチベーションです。
さて、これに対して最尤推定を行えばは求まります(これは
に対する最小二乗法の結果と全く同じものになります。つまり、2乗誤差を損失関数とした普通の機械学習と同じ)。
統計的なパラメータの推定という行為が、機械学習での学習ということになってくるわけです。
今は正規分布を考えてきましたが、一般にはパラメータを考えて
を推定する(学習する)ことができれば、上手く予測に使えるということになります。
ベイズによる機械学習の姿勢
ベイズでの予測器
ベイズで入力に対する出力
の予測を行うというのは、数式で書くと以下のようになります。
この左辺から右辺への変形は「周辺化」(あるいは乗法定理)と呼ばれるものであり、いつでも必ず使うことができます。右辺を注意深く見てください。というのは先程普通の機械学習の時に考えていた予測器です。これが
を掛けて足し合わされています。
これが冒頭で述べた、パラメータの重み付き平均で予測を行うという意味です。
普通の機械学習ではが入力された時
の出力確率
が、ただ1つのパラメータ
によって
と構築できると考えていました。
しかし、そもそもベイズ理論ではたかだか有限のデータで真のパラメータを知るなんてことは無理だと考えていることを思い出してください。ですから、パラメータをただ1つ求めて、そのパラメータ
で予測を行うというのは、ある自信過剰で傲慢な態度だとも取れるわけです。
そこでは確率変数だと考えるわけですから、
を考えることができ、この
は、あるパラメータ
に関して、どれだけそれが正しいパラメータであるかの確率
を表していることになります。
だから、予測モデルは
くらいの重み付けで使うことにして、
という形で重み付けを行って、実応用ではを予測に使おうということになるわけです。
ベイズでの学習
では予測器を構築するために私達が知らなければならないのは何でしょうか。
この形を見た時に、私達が推定しなければならないの確率分布である
です。これがわかれば、適当な
を使った予測器に対して、その確率
を重み付けして予測器を作ることができる、というストーリーです。
さあ、ベイズではパラメータは手元のデータ
によって推定されるものであると考えていたわけですから、
自体を手元のデータ
による条件付き分布
で近似してしまおうと考えることができます。
ベイズの定理によって、
とすることができます。右側を求めてやることができれば、晴れて手元にデータがある場合のパラメータ
の確率が分かることになります。これを求めるのが、ベイズにおける学習です。
主観確率
さて、学習したいについてもう一度見てみましょう。
これは大変なことです。なんと右辺にが出てきています。私達は
を知りたいがために、
で近似することを考え、そしてそれをベイズの定理で変形してきました。これは困ってしまいます。
仕方がないので、を適当に置いてしまいましょう。このとき
の値に心当たりがあれば、その知識を分布に反映させます。そうでもなければ計算がしやすいように置いてしまいます(これが主観確率と呼ばれ、批判される原因となりました)。
ベイズ更新
なんと、これから本当に知りたいを
で近似した挙句、これを求めるために
を適当に置くというとんでもない状態になってしまいました(通常、これを事前分布という)。
しかし、データが十分に沢山あれば、この事前分布の影響は非常に小さくなることが知られています。また、仮に
を定数として置いてしまえば
であり、これは最尤推定でを求める時の姿勢となにも変わりません(ただし、最尤推定のように
をただ1つに決めるつもりはない)。ですから、実はやっていることのおかしさに比べて、理論上それほど変な事にもならないのです。
むしろ実は良い効用が考えられます。
を求める際にを適当に仮定して、上記を求めてしまい。また、有用なデータ
が集まったら、今度は上記で求まった
を事前分布
として活用して
のように再推定することができるのです。これをベイズ更新と言います。
他の手法との違い
ベイズ推定
信頼のできるが得られたら、
を
の近似と考え
で予測を行うのがベイズ推定です。
機械学習ではによって予測器を構築し、その
を求めることが学習だったのですが、
を1つに決めるのでは信頼ならないので、
で予測器
を重み付けしようというのがベイズ推定のモチベーションです。
MAP推定
MAP推定もを確率変数と考えるベイズの考えを使ったものですが、信頼のできる
が得られたら、確率
が最大となる
を使って、予測器を
と構築します。
MAP推定の観点からすれば、ベイズ推定というのは、最も信頼できる以外も予測器の構築に参加させたものであると見ることができます。
これは良いことなのか悪いことなのか微妙に感じるかもしれません。
しかし、が平坦な形をしているときは、
というのは他の
と信頼度に大差がないことになります。にもかかわらずそれだけを使うのは変です。
また、分布に多峰性がある場合には更に顕著になります。と異なるパラメータに際立って信頼性の高い、全く別の
が存在することになるわけですから、それを使うのと使わないのとではかなり差が出てしまいます。
最尤推定
最尤推定は尤度を最大化する
を使い予測器を構築します。MAP推定との違いは、ベイズの定理を見るとよくわかります。
となっており、MAP推定は尤度に事前分布
を掛けた形となっているので、違いは
によって生まれてくることになります。
MAP推定にしても最尤推定にしても、確率が最大となるを求める場合には対数をとる方が計算が楽(かつ、対数を取らない場合と結果は同じ)なので
がMAP推定の目的関数となり、がMAP推定では正則化項の役割を果たすことになります。
すなわち最尤推定というのは、データを完全に信頼し、更にそこから唯一のパラメータが決まると考え、正則化も用いず学習を行うことに相当し、実世界のデータに対しては大抵過学習を起こします。
最後に
まとめ
ベイズ推定はいろいろなパラメータで構築される予測器を、重み付け平均にして予測器を構築します。
は手元にあるデータ
で決めることにし
を予測器とするのでした。
これに対して、重み付け平均を取ることをやめて、を最大にする
のみで予測器を構築するのが、MAP推定による機械学習であり
が予測器となります。
これに対して、なんていう
を確率変数だと見たやり方をせず、データ
の方が真のパラメータ
によって
から生起しているのだと考え、
を最大化する
で真のパラメータを近似し、これを使って予測器を
とするのが最尤推定を用いた機械学習です。
ベイズ推定を更に学ぶ場合
普通は、最尤推定から始まって、MAP推定へと進み、ベイズ推定へと更に進化していく姿を見ていきます。しかし、このようにベイズ推定のモチベーションを予め把握して全体を見てみると、MAP推定や最尤推定が、むしろベイズ推定の簡素化したものであることがわかります。
そうであればベイズ推定はもっと世の中に出回っても良いのではないかと思えてくるはずです。
ベイズ推定の困難さ
性能の高さは申し分ないのですが、一方で数理的な難しさが立ちはだかります。最尤推定やMAP推定は、最大となる点を求めるだけでよく、実質「確率分布」を意識する必要はありません。学習は単に最大化問題となるだけのことです。そして、それによって求まったただ1つのを予測器に使います。
一方でベイズ推定は確率分布によって予測器に重み付けを行うので、確率分布を計算しなければなりません。MAP推定では
の分母はを含まないのでどうでもよかったのですが、ベイズ推定では分母を計算する必要があるのです。分母の計算自体も周辺化
によって実行します。
考えうる全てのパラメータの和になっています。計算量の問題が尋常ではありません。
これは予測器についても同様です。今回は分かりやすく
という重み付けの式を使いました。しかしパラメータというのは離散値ではありません。
かもしれないし
かもしれないし
かもしれないのです。微小な変化の和を取るのは積分になります。実際の予測器は厳密には
なのです。もちろんベイズの定理の分母も同じ事情です。計算機は如何にしてこの無限小の和を実行するというのでしょうか(もちろん、実際には離散化するしかなく、Σの式を使うことになる)。
現実的な解決方法
いま立ちふさがっている
はいずれもによる積分であり、しかも
の形をしています。これはに関する
の期待値と言います。困難な部分はこの期待値計算にあるわけです。
今も
も
も簡単な分布なら、手で積分計算をしてしまえるかもしれません。そうでなければ、期待値計算が上手くできる手法が必要になります。
ざっくり言えば、手計算を手助けするのが「変分ベイズ近似」であり、計算機による期待値のシミュレーションをなるべく正確に行おうというのが「サンプリング法」になります。
ベイズを実践的に使いたい場合は、上記のいずれかの勉強を進めると良いかもしれません(これがまた難しいのである。多分プログラムで見ることのできるサンプリング法の方が直感的にわかりやすい。変分法の方は数学苦手ならゲロ吐く)。
以下のブログでは、主にベイズ機械学習に関しての記事が書かれています。更にベイズを勉強してみたい方は是非参考にしてみてください。
machine-learning.hatenablog.com
補足
今回はどんな予測器を作っているのかという話から開始し、それをベイズ推定が実際に達成するところを見てきました。つまり、予測器を話の中心に置いてきたのですが、実際には予測器の重み付けに使うを求めること自体も苦労するのです。
は事前分布で適当に置くと言いましたが、当然適当に置いた分布にも何らかのパラメータ
が必要であり、それをハイパーパラメータと呼びます。そうなると、あるハイパーパラメータの元での
を求めるという学習の作業が必要であり、これに関しても
で
を重み付けするということが考えられます(ここまでして完全なベイズと言える)。
(待った、そうしたらハイパーパラメータの確率分布にも事前分布が必要で…更にまた…ってなってしまう。 → 階層ベイズモデルです。とにかく観測して手元にあるデータ以外は全部確率変数なんです。なのでそれらには全て確率分布を考えることができて、あとはベイズの定理や乗法定理、加法定理でゴニョゴニョやってくわけです。そうこうしているうちに、ベイズの狙いや意義が分からない場合は、意味不明になっていくのです)
不正確か
機械学習ではy = f(w,x)という予測器を考えて、当然本来なら入力データとそのラベルデータ
(離散なら分類、連続なら回帰)から
を学習するわけですので、
が手持ちデータであるすれば、予測器は
(過去データによって予測値が決まる)という表記が最も正確です。
(まあベイズの心が伝われば良いのだ)
関連記事