HELLO CYBERNETICS

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

機械学習のための確率基礎とベイズの定理

 

 

follow us in feedly

今回は機械学習の数式を追えるようになるために必要と思われ確率の基礎を記事にします。数式を追うための講座なので、確率がなんたるものなのかはある程度知っている前提とし、様々な確率の公式や定理がどのように使われるのかを見て行きたいと思います。

複雑な機械学習への応用を見る前に、個々の公式がどのように適用されるのかを個別に見ておく方が今後の理解に繋がるかと思います。

 

 

 確率の基礎式

総和が1:確率密度関数

まず確率を数式として取り扱う際にメインとなるのは確率密度関数です。

確率密度関数p(x)とは以下のような性質を持っています。

 

\int_x p(x)dx=1

 

というものです。

離散的に書き表した場合は、

 

\sum_{x_i} p(x_i)=1

 

となります。離散的に取り扱えばp(x_i)の総和が1ですから、p(x_i)1つ1つがx_iに対する確率であると言えます。直感的にも分かりやすいですね。 

しかし連続的な値を表現する際には、p(x_i)dx(高さ✕微小幅)で初めて意味のある値を持ち、それをx_iの確率と言えます。ですからp(x_i)単体では密度関数という表現がなされるのです。

 

通常機械学習で用いられる「〜確率」と呼ばれるものは全て密度関数です。離散も連続もまとめて普通はそう呼びます。

また確率密度関数p(x)は以下の条件も満たします。

 

p(x)≧0

 

確率なんだから当たり前ですね。しかし以下の式

 

1≧p(x)

 

これは確率密度関数には必要のない条件です。離散的な場合、p(x)≧0と和が1の条件から自動的に上記が成り立ちます。つまり、離散的なものを考えている限り、いつでも1以下という上記の式は成り立ちます。

一方で連続の場合は、p(x)≧0という条件と積分が1の条件を使っても上記の式は出ていません。つまり一般にp(x)は1を超える領域があっても構わないということです。極端な例としては以下の画像です。これも確率密度関数としての資格を持っています。

 

f:id:s0sem0y:20161005145118p:plain

 

期待値

g(x)の期待値E(g(x))とは、確率密度関数がp(x)の場合、連続、離散それぞれ

 

E(g(x))=\int g(x)p(x)dx

 

E(g(x))=\sum g(x)p(x)

 

と表されます。

たいてい、確率変数xの期待値が知りたい場合が多く、g(x)=xとして

 

E(x)=\int xp(x)dx

 

E(x)=\sum xp(x)

 

が使われます。これは通常、確率変数xの平均値と言われます。ところで、確率変数の分散Var(x)といえば平均値をμとして

 

Var(x)=\int (x-μ)^2 p(x)dx

 

Var(x)=\sum (x-μ)^2 p(x)

 

と表されますが、本来の期待値演算の定義に戻れば、これはg(x)=(x-μ)^2と置いているに過ぎなく、分散というのは「平均からの二乗誤差の期待値」を計算していることになります。

 

機械学習でも「○○の期待値を計算したい」という言葉が頻繁に出てきます。

これは「○○と確率密度関数の積の総和(あるいは積分)を得たい」という意味になります(通常は確率密度関数が未知であったり、計算が困難であったりするという状況が多く、様々な近似解法が検討されます。

 

確率の乗法定理

2つの確率変数のx,yの同時分布(これも確率密度関数)に関して以下の

 

p(x,y)=p(y|x)p(x)=p(x|y)p(y)

 

を乗法定理と言います。これは非常に基本的な式になります。必ず覚えましょう。

直感的にも分かりやすいですね。一方の確率変数が定まり、その条件の元で他方の確率変数が定まるというケースと、両方が同時に定まるのは一緒だということです。

トランプの山から「2枚同時に抜く」のと、「1枚抜いてからもう1枚を抜く」のは、引くカードは確率的には何も変わらないと言っているのです。

 

確率の加法定理

同時確率p(x,y)において一方の確率変数(例えばここではy)についての総和(あるいは積分)を取ることで

 

\int_y p(x,y)dy=p(x)

 

\sum_y p(x,y)=p(x)

 

が成り立つことを加法定理と言います。機械学習では同時確率というのは出番が少ないように見えますが、式の導出の途中で使われていて、結果的には消えていることが多いためであり、概念としては十分に覚えておく価値があります。

 

周辺化

周辺化は頻繁に使われるテクニックで、実際には新たな概念は1つもありません。加法定理と乗法定理を組み合わせることによって得られる、定理から導出された式です。

 

p(x)=\int_y p(x,y)dy=\int_y p(x|y)p(y)dy

 

p(x)=\sum_y p(x,y)=\sum_y p(x|y)p(y)

 

単に加法定理を逆向きに使い、その後中身を乗法定理で展開しているだけです。

乗法定理で展開をする際には、どちらを条件付き確率の条件にするかが選べますが、それは当然積分あるいは総和のインデックスとなっている方です。p(x)をいきなり求めるのは難しくても、yというデータを元にしたxの情報がある場合には周辺化すれば、なんとか計算できる可能性が見えてきますね。

 

ベイズの定理

ベイズの定理も実際には乗法定理を僅かに変形したにすぎません。

 

p(x,y)=p(y|x)p(x)=p(x|y)p(y)

 

この真ん中と右側の式について見れば、両辺p(x)で割ることで

 

p(y|x)=\frac{p(x|y)p(y)}{p(x)}

 

あるいはp(y)で割ることで

 

p(x|y)=\frac{p(y|x)p(x)}{p(y)}

 

となります。これは条件付き確率での前後関係を入れ替えることができるので、一方が計算しづらい場合に重宝する定理です。

 

ある確率分布のパラメータθを推定したい場合は、p(x|θ)を最大化するθを選ぶのが最尤推定と言います。これは適当にθを文字で置いて、確率を計算し、その確率が最大となるようにθを選ぶ方法です。この場合θは真の正しい値を有しているはずで、その正しい値を推定するためにデータを使うという考え方です。

 

一方でベイズの定理を使って、データxに条件付けられたθの確率p(θ|x)が最大になるθを選ぶのをMAP推定と呼びます。ベイズの定理では真の分布が存在しているというよりは、手元にあるデータこそが全てで、この手持ちだけから最大限有用な情報を得ておこうという考え方をします。従って、今から得られる分布の形状を定めるθというのは真の正しい値があるのではなく、手元のデータxによって条件付けられた得られていると考えます。

 

またデータがどのクラスに属するのかを判別する識別器を構成する際にもベイズの定理は応用されます。あるクラスC毎のデータ集合があるため、p(x|C)という、あるクラスに条件付けられたデータの分布を考えることができます。新しいデータxが得られた場合には、そのデータが得られた際の、そのデータのクラスを知りたいのでp(C|x)を計算して最も大きな確率となるクラスを選びたいということになります。このデータに条件付けられたクラスの分布を、ベイズの定理を使い、右辺を求めておくこと得る場合、これを機械学習では生成モデルと表現しています。

 

 

ベイズの定理の詳細

機械学習におけるベイズの定理

機械学習ではデータがまずあって、そのデータがパラメータなどの情報を提供してくれると考えす。従って、データをD、パラメータをθとしておくと

 

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

 

を求めたいという状況が多くなります。これが求まれば、データが語る分布p(θ|D)に置いて、確率が最大となるθを解とするMAP推定を行うことができます。

 

事後分布

ベイズの定理の左辺p(θ|D)を機械学習では事後分布と表現します。

 

尤度関数

p(D|θ)の部分を尤度関数と呼びます。機械学習の本でも「尤度を求めるために〜」などの表現が使われますが、これはパラメータに条件付けられたデータの確率分布のことです。

 

事前分布

p(θ)の部分を事前分布と言います。これはパラメータが本来どの値である確率が高いかを表現する分布となりますが、「それが分かってりゃ世話無いです」というのが正直なところ。パラメータのことがわからんので今から推定しようというところです。

従ってこの部分には、何か不確実ではあるが可能性としてあり得る情報があればそれを反映させますが、大抵の場合は尤度関数と積を取ってもやたらめったら式の内容が難しくならないような関数を選び、関数の形を維持しておきます(そのような事前分布を共役事前分布という。専ら計算の都合上の問題です)。

または、推定に影響を及ぼさないような分布を仮定しておく方法もあります。MAP推定を行った際に、事前分布に用いたパラメータが解に現れないのであれば、推定に影響がなかったということです。そのような事前分布は無情報事前分布と呼ばれます。

 

周辺尤度・エビデンス

ベイズの定理の分母p(D)は周辺尤度、あるいはエビデンスと呼ばれます。

MAP推定は事後分布に対して最大化を行いますが、右辺を見たときの分母の値はθに依存しておらず、ただの定数なので、通常は無視されます。事後分布が確率密度関数となること(つまり総和、あるいは積分が1)を保証するための正規化定数だと考えればいいでしょう。

 

周辺尤度は、周辺化のテクニックを使うことによって

 

p(D)=\int_θ p(D,θ)dθ=\int_θ p(D|θ)p(θ)dθ

 

と展開しておくことができます。和の場合には

 

p(D)=\sum_θ p(D,θ)=\sum_θ p(D|θ)p(θ)

 

です。綺麗な分布(ガウス分布など)を仮定した場合にはこの項は解析的に求まりますが、大抵の場合は計算はできなくなります(すべてのパラメータの取りうる値のパターンの総和を考えるなんてとんでもないことです)。

 

ベイズ更新

事前分布は適切なものを選択すれば、MAP推定の精度を向上することができます。しかし通常事前分布に対する適切な知見は得られないことのほうが多いです。

一旦適当な事前分布を使い、事後分布を求めてとりあえず推定が終わったとしても、新たなデータが得られたときに、ベイズ更新を用いることで推定を途中からやり直すことができます。

 

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

 

の式において、新たなデータD_(new)が得られたならば、前回得た事後分布を今回の事前分布に用いる(p_1(θ)=p(θ|D)と置く)ことで、

 

p_2(θ|D_{new})=\frac{p(D_{new}|θ)p_1(θ)}{p(D_{new})} \left( = \frac {p(D_{new}|θ)p(θ|D)} {p(D_{new})} \right)

 

と分布を更新することができます。同様の手続きで、いつでも新しいデータが得られる毎に更新を行うことができます。しかもこの場合は、前回獲得した事後分布と新たなデータのみが必要であり、過去のデータを全て保存しておく必要は一切ありません。

 

勉強を進めるには

いつでも必ず、自分の手を動かすことをしなければなりません。

きっと今回確率に関する基礎式や、その変形に関しては、あまり難しいところはないなと感じたかもしれません。乗法定理や加法定理を中心に、他の式は簡単に導出できることをみましたが、実際に自分で紙に書いて全ての公式を導出してみてください。実際に使う、式変形するという体験をした方が頭には残りやすいはずです。

 

また、ベイズ推論に関しては具体例を自分で解いてみる(見ながらでもいい)ことで、初めて理解が定着するものだと思います。従って、今回の基礎を頭に入れ、ガウス分布やベルヌーイ分布などの単純なモデルでいいので、ベイズの定理を用いた推論を紙に書いてみるといいでしょう。今回の記事だけでは、もしかしたら分布に関する知識が不足しているかもしれませんが、分布の形を認めてしまえば、尤度、事前分布を設定して、事後分布を獲得し、その事後分布の確率が最大になるパラメータを求めようとしている流れは追えるはずです。

 

(今まで確率的なモデルに関して詳しく記事を書くことがなかったため、本ブログに具体例はありませんが、インターネットで検索すればたくさん出てくるかと思います。例えば以下、前半10ページでガウス分布を用いたPRMLのベイズ推論を解いています)

 

www.slideshare.net