ガウス過程と、ガウス過程回帰について、分かりやすく説明します。
カーネル法を機知とする事で、簡単にガウス過程に入門できます。カーネル法は、どちらかというと機械学習よりで、それ自身では予測値にどのくらいの信頼度があるのか分かりません。一方で、ガウス過程はカーネル法+ベイズ統計学というイメージで、予測値の信頼度を計算出来ます。
カーネル法の記事はこちらからどうぞ。
ガウス過程の入門書のオススメは以下の本です。予備知識はあまりいりませんが、ベイズの定理とカーネル法、(多次元)正規分布の基本的な性質を知っているとすらすら読めます。
ガウス過程の定義
ガウス過程の定義を書いていきます。
Xを集合、\( \mu :X\rightarrow \mathbb{R} \)を写像、\( k : X\times X \rightarrow \mathbb{R} \)をカーネルとします。任意の0以上の整数n と\(\vec{x} =(x_1 , \cdots , x_n )\)に対して、
$$\begin{eqnarray}
f(\vec{x}) =\left( f(x_1), \cdots , f(x_n) \right)=\mathcal{N}\left( \vec{x} |\mu (x_1), \cdots ,\mu (x_n) ,K \right)
\end{eqnarray}$$
となるとき、fはガウス過程に従う言います。\( \mu ,K \)から定まるガウス過程\(f \)を\( f \sim GP(\mu , K) \)と書いたりもします。
\( \mathcal{N}\left( \vec{x} |\mu (x_1), \cdots ,\mu (x_n) ,K \right) \)で多次元正規分布 1 を表しました。
上の定義を見ると、ガウス過程は、平均値を与える関数\( \mu \)と共分散行列を与えるカーネルを決めれば定まる事が分かります。カーネルは無限次元の行列みたいなもので、平均値を決めたらカーネルの部分行列を取ることで、分散が決まります。
勿論、\( \mu (x)= 0 \)とかも関数なので、ある意味ではカーネルさえあればガウス過程が作れます。ガウス過程を使って回帰モデルを考えてみましょう。
ガウス過程回帰
ガウス過程が与えられたと仮定して、回帰モデルを考えます。以下のような入力と出力の組が与えられた時に新たな入力が与えらたとして、出力を予測しましょう。
$$\begin{eqnarray}
\mathbf{X} &=&\{ (x_1 , y_1 ) , \cdots , (x_N , y_N ) \}\\
y&=&f(x) \\
f &\sim & GP(0, K )
\end{eqnarray}$$
平均値は考えても計算が大変になるだけなので、0と仮定します。ベイズ統計学や線形回帰では、新しく確率分布を考えたり、誤差を最小化したりして値を予測するモデルを作りました。ガウス過程の場合は。新しいデータの組\( (x_{\ast} ,y_{\ast} ) \)が出てきても
$$\begin{eqnarray}
\mathbf{X}_{\ast} &=&\{ (x_1 , y_1 ) , \cdots , (x_N , y_N ) , (x_{\ast} ,y_{\ast} ) \}\\
f &\sim & GP(0, K^{,} )
\end{eqnarray}$$
となるだけなので、新しいモデルの構築は必要ありません。必要なのは、カーネルの新しく出てきた部分の計算と、逆行列の計算だけです。新しくデータを得た状態を行列とベクトルで表してみましょう。
$$\begin{eqnarray}
\begin{pmatrix}
y\\
y_{\ast}
\end{pmatrix}
\sim \mathcal{N} \left( 0,
\begin{pmatrix}
K & K_{\ast}\\
K_{\ast} &k_{\ast}
\end{pmatrix}
\right)
\end{eqnarray}$$
ただし、\( K_{\ast} \)は、\(k(x_i , x_{\ast} ) \)たちからなるベクトル2(データが多数なら行列)です。また、\( k_{\ast} =k(x_{\ast} , k_{\ast} )\) です。この状態から、\( p(y_{\ast}|y ) \) を求めれば良いのです。
ここで、 確率\(p(x,y)\)に対して、\( p(x), p(x|y) \)は以下で定義されたことを思い出しましょう。
[mathjax]$$ \begin{eqnarray}
p(x) &=& \int_x p(x,y) dy \\
p(x|y) &=& \frac{p(x,y)}{p(y) }
\end{eqnarray}$$
計算は次の節で行う事にして、結果だけ書くと以下のようになります。
$$ \begin{eqnarray}
p(y_{\ast} |x_{\ast} , X) =\mathcal{N} \left( K_{\ast} ^{T} K^{-1} y, k_{\ast} – K_{\ast} ^{T} K K_{\ast} \right)
\end{eqnarray}$$
新たに得るデータが増えれも同じ形で公式が成立します。データの数が多いと、出てくる行列も凄まじい大きさになることには注意しましょう。
ガウス過程回帰の計算
すっ飛ばした計算の詳細を追いましょう。以下の状況を考えます。共分散行列の逆行列を\(\Lambda\) で表します。つまり、\(\Sigma ^{-1} =\Lambda \)です。
$$\begin{eqnarray}
\begin{pmatrix}
y_1\\
y_2
\end{pmatrix}
\sim \mathcal{N} \left(
\begin{pmatrix}
0 \\
0
\end{pmatrix} ,
\begin{pmatrix}
\Lambda _{11} & \Lambda _{12}\\
\Lambda _{21} & \Lambda _{22}
\end{pmatrix}
\right)
\end{eqnarray}$$
上の周辺確率の公式から、\( p(y_2 |y_1 ) \propto p(y_2 , y_1 )\) であることが分かる 3(ので、\( \log \)を取って \( p(y_2 , y_1 ) \) を\( y_2 \) についてまとめます。
$$\begin{eqnarray}
\log p(y_2 |y_1 ) & \propto & \sum_{i,j} y_i ^{T} \Sigma _{ij} y_j \\
& \propto & y_2 ^T \Lambda _{22} y_2 – (y_1 ^{T} \Lambda _{12} y_2 – y_2 ^{T} \Lambda _{21} y_1 )
\end{eqnarray}$$
一方で、\( \log \mathcal{N}\left( x| 0, \Lambda \right) \propto x^T\Lambda x -2 \Lambda x \)なので、係数を比べると\( p(y_2 |y_1 ) \)が分かります。
$$\begin{eqnarray}
p(y_2 |y_1 ) = \mathcal{N} \left( y_2 | -\Lambda _{22} ^{-1} \Lambda _{21} y_1, \Lambda _{22}^{-1} \right)
\end{eqnarray}$$
ブロックで分けられた行列については、逆行列の公式があります。
\(M =( D-CA^{-1} B )^{-1} \) とするとき、以下の式が成り立つ。
$$\begin{eqnarray}
\begin{pmatrix}
A &B \\
C & D
\end{pmatrix} ^{-1}
=
\begin{pmatrix}
A^{-1} + A^{-1} BMCA^{-1} &-A^{-1} B M \\
-MCA^{-1} & M
\end{pmatrix}
\end{eqnarray}$$
今、行列の対応を考えると、次のようになります。
$$\begin{eqnarray}
\begin{pmatrix}
A &B \\
C & D
\end{pmatrix} &=&
\begin{pmatrix}
\Sigma _{11} & \Sigma _{12} \\
\Sigma _{21} & \Sigma _{22}
\end{pmatrix} \\
\Lambda _{22} =M&=& \left( \Sigma _{22} – \Sigma _{21} \Sigma _{11} ^{-1} \Sigma _{12} \right) ^{-1} \\
\Lambda _{22} ^{-1} \Lambda _{21} &=& \Sigma _{21} \Sigma _{11} ^{-1}
\end{eqnarray}$$
以上より、
$$\begin{eqnarray}
p(y_2 |y_1 ) = \mathcal{N} \left( y_2 | \Sigma _{21} \Sigma _{11} ^{-1} y_1 , \Sigma _{22} – \Sigma _{21} \Sigma _{11} ^{-1} \Sigma _{12} \right)
\end{eqnarray}$$
となります。ガウス過程の式に戻ると、
\( \Sigma _{12} = \Sigma _21 = K_{\ast} , \Sigma _{22} = k_{\ast} , y_1 =y , y_2 =y_{\ast} \)なので、
$$\begin{eqnarray}
p(y_{\ast} |x_{\ast}, X ) = \mathcal{N} \left(y_{\ast} | K_{\ast}K ^{-1} y, k_{\ast}- K_{\ast} ^{T} K^{-1} K_{\ast} \right)
\end{eqnarray}$$
となります。 得られた式の意味を考えましょう。
初めに、平均値についてです。カーネル回帰を思い出すと、\(K^{-1} y \) というのは、カーネル回帰のモデル \( y= K\alpha \) のパラメーター\( \alpha \)の事です。\( \alpha \) に新しい観測値から作られたカーネル\( K_{\ast} \) を掛けてモデルのパラメーターを更新することを意味しています。カーネルは、行列の成分が内積なので、\( K_{\ast} \)には、既に持っているデータと、新しく得られたデータの違いの情報が詰まっています。つまり、 \(K_{\ast} \)を\( \alpha \)に掛けるというのは、元々持っていたデータと新たに得たデータのずれをパラメーターに反映させることを意味します。
次に、分散を見ましょう。分散の1項目は、単純に新たに得たデータの分散としての大きさです。二項目は、元のデータと新たに得たデータの差の、分散としての大きさの差を表しています。式で書くと、
$$\begin{eqnarray}
k_{\ast} &=& \| x _{\ast} \| _{K} \\
K_{\ast} ^{T} K^{-1} K_{\ast} & =& \| K_{\ast} \| _{K^{-1}}
\end{eqnarray}$$
という事 4 です。新たに得たデータが元のデータとどの程度違っているかを比べた量である事には変わりないのですが、単にデータとして比べるのでなくて、分散としてどのくらい違っているのかを比べています。
カーネルの定義から、\( K_{\ast} ^{T} K^{-1} K_{\ast} > 0 \)なので、分散は必ず \( k_{\ast} \)より小さくなります。 これは、ガウス過程を仮定していて、元々大きなガウス分布を考えているようなものなので、大元の分散みたいなものがあって、分散が大きくなっていく事が出来ないイメージです。
まとめ
・ガウス過程はカーネル+平均値を与える関数で出来る。
・ガウス過程の中で、回帰分析が出来る。
・ガウス過程を仮定すると、カーネルさえ計算しておけば式は簡単。
- 正規分布の代わりにポアソン分布に従うと仮定すればポアソン過程と呼びます。他の確率分布でも同様です。多次元正規分布の記事はこちらから。https://masamunetogetoge.com/multivariate-normal-distribution
- 元のデータと新しいデータで計算したカーネル行列です。
- \( p(y_1)\) が関係しないことは計算して確かめないといけませんが、直感的に分かると信じて、計算を書くのをさぼります。
- 線形回帰では、偏差を分解しますが、あれと同じイメージです。