はじめに
今回は、回帰を行う1手法であるガウス過程についてまとめる。
ガウス過程とは
(1)
ここで、とはともに次元ベクトルであり、後者は入力値を次元特徴空間に射影する関数である。いま、個の入力値・出力値のペアが観測されたとする。これらを並べると以下の行列表記を得る。
(2)
ただし、とした。ここでパラメータに対し次の事前分布を仮定する。
(3)
これは、平均、共分散行列を持つガウス分布である(はの単位行列)。がガウス分布に従うので式(2)からもガウス分布に従う(証明略)。その平均値は
(4)
となる。同様にその共分散行列は
(5)
である。これはの行列となる。の要素は次式で与えられる。
(6)
はカーネルと呼ばれる量である。ここまでの議論からはガウス分布に従うことが分かる。
であるから、関数の分布がガウス関数に従うことになる。このような確率過程をガウス過程と呼ぶ。
ガウス過程とは集合の同時確率分布が次元ガウス分布であるような過程のことである。
ここまでの説明では、モデル(1)と事前確率(3)を仮定してガウス過程を導いた。一般にガウス過程を用いて解析を行う際は、議論の一番最初でをガウス過程と仮定し、その共分散行列にパラメータを持つ適当なカーネルを設定する(平均値の方はと置くことが多い)。そして、観測値を再現するパラメータを最尤法やベイズ推定で求める。
式(1)を用いた回帰の解法として、先のブログでも3つの手法を解説した。これらはいずれも写像(先のブログでは)により変換される次元特徴空間内での計算を行う。一方、ガウス過程では、観測値の個数で決まる多次元空間内で計算が行われ(共分散行列はの行列である)、写像の効果はカーネルを介して考慮されることになる。一般に、であることが多いのでガウス過程の方が計算量は多い。しかし、カーネルを介してさまざまな特徴空間を考慮することができるメリットがある。特にガウス関数型のカーネルの場合、それに対応する特徴空間は無限次元となる。このあたりの利点は、SVM(Support Vector Machine)でカーネルを導入する際の利点と同じである。
カーネル
カーネルを変えることで様々なガウス過程を作ることができる。この自由度の大きさがガウス過程の強みである。ただし、全く自由にカーネルを決めることができるわけではなく、以下の制約を満たさなければならない。
は正定値でなければならない。すなわち、任意の次元ベクトルに対しを満たさなければならない。
いま、を1次元としガウス過程を実際に生成してみる。以下2つのカーネルを考える。
(7)
(8)
プログラムの内容は以下の通り。
- [0,1]の間を等分し、入力値を作る。
- のカーネルを作る。
- を共分散行列に、を平均値に持つ次元ガウス分布を作る。
- このガウス分布から次元ベクトルを生成する。
- とをプロットする。
コードは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import numpy as np import matplotlib.pyplot as plt np.random.seed(123) THETA = 0.5 SIGMA = 0.1 def kernel_0(x0, x1): return np.exp(-THETA * np.abs(x0 - x1)) def kernel_1(x0, x1): dx = x0 - x1 return np.exp(-dx**2 / 2 / SIGMA / SIGMA) def make_kernel(xs, kernel): xs = xs.reshape(-1, 1) return kernel(xs, xs.T) if __name__ == "__main__": # [0,1]の間に等間隔にN個のxを作る。 N = 100 xs = np.linspace(0, 1, N) # カーネルを作る。これが共分散行列になる。 k = make_kernel(xs, kernel_0) # 平均値は0 mean = np.zeros(len(xs)) # 多次元ガウス分布からyを5つ生成。 ys = np.random.multivariate_normal(mean, k, 5) for y in ys: plt.plot(xs, y) plt.xlabel("$x$") plt.ylabel("$y$") plt.savefig("exp.jpg") |
式(7)のガウス過程は以下の通りである。このカーネルはブラウン運動を説明するために導入されたものである。
式(8)のガウス過程は以下の通りである。
いずれの図においても5つの過程をプロットした。これらは互いに独立に生成された5つのガウス過程である。実際に観測値の回帰を行う際は、観測値を再現しそうな曲線が高い確率で、再現しそうにない曲線は低い確率で下図のように生成されることになる(ここから引用した)。図中のばつ印は観測値を、薄い青色の曲線の群がガウス過程から生成された曲線である。濃い青の曲線は曲線群の平均値である。
まとめ
今回は、ガウス過程の入り口を解説した。最近、ディープニューラルネットワーク(DNN)をガウス過程として構築する論文が発表された。ここでは、ある極限においてDNNは厳密にガウス過程と等価となることが証明されている。以前取り上げたベイズ推定や今回のガウス過程と関連付けた深層学習の研究が盛んである。次回は具体的にガウス過程による回帰を行ってみたい。