プロフィールはこちら

ガウス過程の整理

ご無沙汰してます。あー忙しい。書くヒマあんまりないです。

ガウス過程の要点をまとめておきます。みんなディープニューラルネットワークに目がいってるせいかガウス過程の要点整理はあんまりみかけないので。

本記事に必要な前提知識

基礎的な線形代数。

モデル

\(\mathbf{x}=(x_1,\cdots,x_K)\)となる多変量の入力\(\mathbf{x}\)と出力\(y\)に対して、ノイズ\(\varepsilon \sim N(0,\sigma^2)\)を考慮して

\(y=f(\mathbf{x})+\varepsilon\)

となるような関数\(f\)を求める(この行為を回帰と呼ぶ)。

ガウス過程回帰

観測値が\(N\)個あるとする。ということは\(\mathbf{y}=(y_1,\cdots,y_N)^T\),\(\mathbf{X}=(\mathbf{x}_1^T,\cdots,\mathbf{x}_N^T)^T\)みたいな感じになるイメージ。

カーネル関数(後述)を\(k(\mathbf{x},\mathbf{x}’)\)として、

\(\forall i,j \in \{1,\cdots,N\}\)のもとで

\([\mathbf{K}_{NN}]_{i,j}=k(\mathbf{x}_i,\mathbf{x}_j)\)

このような(自然言語で言うと、i行j列目の要素が右辺になるような)N次正方行列\(\mathbf{K}_{NN}\)を求める。これを共分散行列という。

この共分散行列を求めていく中で、カーネル関数\(k\)を最適化していくことが、学習にあたる。詳しく言うと、カーネル関数にパラメータ\(\mathbf{\theta}\)があるとして、この\(\mathbf{\theta}\)を最適化していくということ。

詳しいことは難解な数学の論証になるけども、どうやらこのカーネル関数の最適化は、ベイズディープニューラルネットワークの最適化と等価であることが証明できるらしい。

カーネル関数とはなんぞやというと、とりあえずは共分散行列を計算するための関数、と思っておけばとりあえずガウス過程回帰は使えるようにはなる。

厳密に言うとカーネル関数は特徴空間への写像\(\phi\)を用いて

\(k(\mathbf{x},\mathbf{x}’)=\phi(\mathbf{x})^T\phi(\mathbf{x}’)\)

というふうに定義されるけども、特徴空間への写像\(\phi\)を考えるのをすっ飛ばして、\(k(\mathbf{x},\mathbf{x}’)\)の設計だけ考えれば良い。

予測値

出力が未知な入力\(\mathbf{x}_*\)をもとに出力の予測値\(y_*\)を求めたいとする。

このへんは決まりごとなのでささっと。

\(\mathbf{k}_{N*}=(k(\mathbf{x}_1,\mathbf{x}_*),\cdots,k(\mathbf{x}_N,\mathbf{x}_*))^T\)

\(k_{**}=k(\mathbf{x}_*,\mathbf{x}_*)\)

を定義して、ノイズなしの関数形は以下の正規分布に従う。

\(f_* \sim N(\mathbf{k}_{N*}^T(\mathbf{K}_{NN}+\sigma^2\mathbf{I})^{-1}\mathbf{y},k_{**}-\mathbf{k}_{N*}^T(\mathbf{K}_{NN}+\sigma^2\mathbf{I})^{-1} \mathbf{k}_{N*})\)

ノイズありの予測値を考えたいので、

\(\left(\begin{matrix}\hat{\mathbf{K}}_{NN}&\hat{\mathbf{k}}_{N*} \\ \hat{\mathbf{k}}_{N*}^T&\hat{k}_{**}\end{matrix}\right)=\left(\begin{matrix}\mathbf{K}_{NN}&\mathbf{k}_{N*} \\ \mathbf{k}_{N*}^T&k_{**}\end{matrix}\right)+\sigma^2\mathbf{I}\)

となるような

\(\hat{\mathbf{K}}_{NN}\)と

\(\hat{\mathbf{k}}_{N*}\)と

\(\hat{k}_{**}\)

を考えてやると、ノイズありの予測値は以下の正規分布に従う。

\(y_* \sim N(\hat{\mathbf{k}}_{N*}^T\hat{\mathbf{K}}_{NN}^{-1}\mathbf{y},\hat{k}_{**}-\hat{\mathbf{k}}_{N*}^T\hat{\mathbf{K}}_{NN}^{-1} \hat{\mathbf{k}}_{N*})\)

ガウス過程を調べる際の注意点としては、\(\mathbf{K}_{NN}\)と\(\hat{\mathbf{K}}_{NN}\)の区別に気をつけたほうが良い。

注釈なしで\(\mathbf{K}_{NN}\)をノイズ\(\sigma^2\mathbf{I}\)つきの共分散行列として扱っている事例もあれば、注釈をして\(\mathbf{K}_{NN}\)をノイズつきの共分散行列として扱ったあとに、同じ書籍の共著者担当の別パートになった途端に\(\mathbf{K}_{NN}\)がノイズなしになってる事例もあったりする。