機械学習のためのGaussian Processを簡潔に
ガウス過程 (Gaussian Process; GP)を簡潔に説明します。日本語の類書や類ウェブページ?はたくさんありますが以下の差別化を図りました
- できるだけ数式による説明を心がけます
- 定義をスムーズにするために関数空間の観点からGPによる回帰を説明し、実は線形モデルの非線形空間への拡張でも同じ式が得られることを示します(多くの説明だと逆?)
GPは○○の性質をもつ!みたいなのをひたすら書いている本を読んだのですが、だいぶ読みにくかったので簡潔さを心がけました。
すべての説明は
http://www.gaussianprocess.org/gpml/chapters/RW.pdf
の第2章に基づいていますが、導入の順序が異なります。
定義
関数がGaussian Process (, )に従うとは、任意の有限個の点集合について、 が多次元正規分布に従うことをいう。ここで、は平均を表す次元ベクトルで番目の要素がになってるものであり、は共分散を表す次正方行列で要素がになっているものである。
普通、共分散はデータが与えられて、そこから平均を求めて計算されるものだと思いますが、今の文脈では、共分散関数(カーネルともいう)が予め定められています。つまり、2つのが与えられるとそれらの値は、の共分散が共分散関数に従うように分布する、と考えます。
イメージと補足
定義は実はこれだけです。が多次元正規分布に従うというのがあまりにGPの本質なのですが、この多次元正規分布としてよくあるような二次元正規分布のような平面図(もしくは立体図)をイメージしてしまうと回帰にどう役立つんだ???という気持ちになってしまうと思います。いま、観測値がわかっているデータ点が個あるとすると、この多次元正規分布は次元になっています。次元空間をイメージする代わりに、この点の近くには存在しやすく、点から遠い場所では存在しにくいような分布をについて想像してみましょう。簡単な場合として、としますと、以下のような図を想像できるかなと思います(回帰でよく見そうな形をしていますね!)
(図は上記pdfから)
ノイズ付きのデータからの推論
点の各点について、に従うノイズが加わったデータが観測されており、未知のデータ点についての予測値を得たいとします。
データ点, が、GPに従う関数によって生成されているとします。いま、に関する事前知識がないため、平均がの関数を考えます。このとき、は次の事前分布に従います。
はノイズの分散で、ノイズはガウシアンだとします。ガウス分布の共分散行列は次正方行列で、要素がなのですが、注意すべきは左上の要素部分で、この部分の対角成分には、ノイズによる分散が入ります。なぜなら、異なるデータ間におけるノイズによる共分散は0ですが、自分自身との間ではそうはいかないからです。右上、左下のブロック行列はそれぞれ、サイズ, の行列です。
さて、これを鬼のように変形すると、の分布が次のように求まります(だいぶややこしいですが省略します)。
これで、を推定することができました。この推定は、最尤推定と異なり、最頻値(この場合平均に一致)だけではなく、分散も同時に推定可能です。
線形モデルからの拡張に一致すること
GPの説明にはいつもこの話がつきまとうかなと思います。上述した話だけで本来完結するのですが、せっかくなのでこちらも説明しておきます。
線形モデルとは、入力に対し、出力をによって予測するモデルで、パラメータを学習します。
実際のデータはこれに分散のガウス分布に従うノイズが加わって生成されている(つまり)とすると、データがから得られる条件付き確率は
となります。最尤推定だと、これを最大化するようなパラメータを求めて終了ですが、いま、Bayesianの考え方をします。すなわち、もともと、パラメータがという事前分布に従っていた場合、が得られたあとのの分布の変化はBayesの法則を使って鬼のように計算をすると
となります(再び省略)。線形モデルで推論するときも、最尤推定とは違い、あらゆるの可能性について、その重みをとって出力を推定します。このとき出力は
となります。
さて、線形モデルだけではやはり性能に限界があります。というのも、データ点が超平面によって二分されるような場合しかうまく動かないです。そこで、各データ点をある関数によって高次元空間上にマップしてから、その高次元空間上で線形モデルを動かす、という方法が考えられます。すなわちによって出力を予想します。ここでの重みは線形モデルでは次元でしたが、今は高次元空間の次元となっています。線形モデルのときと全く同様の議論をすることで、推論の出力は
となります。これをさらに、変形すると(難しい)
となりますが、これは、前のセクションの最後で見た、関数空間による定義から導かれた推論の結果に一致しています。関数空間の定義で指定されるべきカーネル関数と、このセクションで指定されるべきマップ関数& の間には深いつながりがあります。具体的にはpdfの12ページ。kernel / kernel trickを御覧ください。
まとめ
正直このページでは簡潔に説明しすぎていて(式変形とかも飛ばしているし)、このページだけを読んで理解することは難しいと思います。上述したpdfのchapter 2と並列して読むことをすすめます。1, 2時間程度で理解できるのではないでしょうか。