ガウス過程回帰について、本記事ではわかりやすく解説します。ガウス過程回帰はよく、「線形回帰モデル(線形基底関数モデル)の重み$\bm{w}$を積分消去し、ガウス分布を無限次元に拡張したもの」と表現されることがあります。しかし、このような説明では、全く理解できないのが普通です。
一般的に機械学習の分野でも理論的な面で難易度は高いガウス過程ですが、一方で近年比較的多く研究されていることや、実務でのデータ分析でもガウス過程回帰は多く使われることがあるため、できる限り理解をしておくとよいでしょう。
- ガウス過程の概要
- ガウス過程の元になる、線形回帰モデル(線形基底関数モデル)の復習
- ガウス過程回帰の導出を理解する
ガウス過程の概要
ガウス過程の本質は、通常はデータからパラメータ$\bm{w}$を学習するのが、回帰モデルでした。
言い換えれば、パラメータ空間の挙動を学習するのが通常の回帰モデルでした。
一方、ガウス過程では、$\bm{w}$を積分消去するため、パラメータ空間での挙動を考えず、代わりに関数空間で確率変数の挙動を考えることになります。
パラメータ$\bm{w}$を積分消去するためには、重みパラメータ$\bm{w}$に対して、次の前提をガウス過程回帰では導入しています。
- 回帰モデルの出力に対して誤差を考慮しない
- 重みベクトル$\bm{w}$が、平均0、分散共分散が$\lambda^2 \sigma$にしたがう
これらの前提があるおかげで、ガウス過程のモデルが成り立っていることをまずは、頭に入れておいてください。これらの前提は次の式変形で登場します。
線形回帰モデルの復習
線形回帰モデルにおける、重み$\bm{w}$を積分消去したものが、ガウス過程と呼ばれています。
線形回帰モデルでは、モデルの入力$\bm{x}$を、特徴ベクトル$\bm{\phi(x)}$に変換します。
\begin{equation} \bm{\phi(x)} = \{ \phi_0(\bm{x}), \phi_1(\bm{x}), \phi_2(\bm{x}), \cdots, \phi_H(\bm{x}) \} \end{equation}
ここで、書く特徴ベクトルに対する重みを$\bm{w}$とすると、
\begin{equation} \begin{split} \hat{y} &= \bm{w}^T\bm{\phi(x)} \\ &= w_0 \phi_0(\bm{x}) + w_1 \phi_1(\bm{x}) + \cdots + w_H \phi_H(\bm{x}) \end{split} \end{equation}
このように予測値を得ることができるのが線形回帰モデルでした。ここで、一般に$N$個のデータについて行うとき、(2)式を行列表示にすると、
\begin{equation} \begin{split} \begin{pmatrix} \hat{y_1} \\ \hat{y_2} \\ \vdots \\ \hat{y_D} \\ \end{pmatrix} & = \begin{pmatrix} \phi_0(\bm{x_{1}}) & \phi_1(\bm{x_{1}}) & \phi_2(\bm{x_{1}})& \cdots & \phi_H(\bm{x_{1}}) \\ \phi_0(\bm{x_{2}}) & \phi_1(\bm{x_{2}}) & \phi_2(\bm{x_{2}}) & \cdots & \phi_H(\bm{x_{2}}) \\ \vdots & \vdots & \vdots & \vdots & \ddots \\ \phi_0(\bm{x_{N}}) & \phi_1(\bm{x_{N}}) & \phi_2(\bm{x_{N}}) & \cdots & \phi_H(\bm{x_{N}}) \\ \end{pmatrix} \begin{pmatrix} w_0 \\ w_1 \\ \vdots \\ w_H \\ \end{pmatrix} \\ &= \bm{\Phi} \bm{w} \end{split} \end{equation}
と表現することできます。
ここで、$\bm{\Phi}$は、計画行列であり、角要素が、$\bm{\Phi}_{nh} = \phi_h(\bm{x_n})$となるような定数行列です。
ここまでは、通常の線形回帰モデルの導出になります。最小二乗法により、誤差二乗和を重み$\bm{w}$で偏微分することで、解析的に$\bm{w}$を求めることができます。しかし、ガウス過程では、$\bm{w}$は求めず積分消去するという方法を取ります。これによって、パラメータは直接導出しないが、入力$\bm{x}$に対する予測値$\hat{y}$を出せるモデルになっています。
それでは、次の内容から、ガウス過程回帰について解説していきます。
ガウス過程の導出
では続いて、ガウス過程の導出に入っていきましょう。線形回帰モデルによって、計画行列$\bm{\Phi}$を用いて、回帰モデルはこのように表現することができます。
\begin{equation} \bm{y} = \bm{\Phi}\bm{w} \end{equation}
今、ガウス過程では、この重み$\bm{w}$が平均0で、分散が$\lambda^2 \sigma$のガウス分布に従うという過程を置きます。
すると、重みは次のように表現できます。
\begin{equation} \bm{w} \sim \mathcal{N}(0, \lambda^2\bm{I}) \end{equation}
この過程は、それぞれの重みが平均0で、分散の値も一緒である。さらに共分散も0で、それぞれの重みが独立である。という仮定で、かなり強い前提を置いている。このような前提を入れてしまっても良いのだろうか?と思う人も多いと思うが、現段階では、このような疑問を持ちつつ次に進んでいきます。
(5)のように、$\bm{w}$がガウス分布に従うとすると、$\bm{\Phi}$は定数行列のため、(4)式はガウス分布を行列で線形変換した形となるので、$\bm{y}$もガウス分布になります。
詳しくはこちらをご覧ください。
では、ガウス分布に従う$\bm{y}$の平均ベクトルと共分散行列$\sum$はどのようになるでしょうか。
まず、平均ベクトルですが、
\mathbb{E}[\bm{y}] = \mathbb{E}[\bm{\Phi}\bm{w}] = \bm{\Phi}\mathbb{E}[\bm{w}] = \bm{0}
$\bm{\Phi} $は定数のため、$\bm{y}$の平均ベクトルは、$\bm{0}$となります。
また、$\bm{y}$の分散共分散行列ですが、一般的にガウス分布に従う確率変数$X$に対して、$AX + b$の線形変換を施したガウス分布の分散共分散$\sum_{new} $は、$\sum_{new} = A\sum A^T$になることが知られているので、
\sum = \bm{\Phi} \lambda^2 \bm{I} \bm{\Phi}^T = \lambda^2 \bm{\Phi}\bm{\Phi}^T
となります。よって、上記から、$\bm{y}$が従うガウス分布は、
\begin{equation} y \sim \mathcal{N}(0, \lambda^2 \bm{\Phi}\bm{\Phi}^T) \end{equation}
となることがわかります。(6)の式を見ると、yの値は、全部のデータ$\mathbb{D}$および、特徴ベクトルからなる$\bm{\Phi} $によって決定することがわかります。(6)式では、モデルパラメータ$\bm{w}$が、上記の期待値を用いる計算によって登場しなくなっていることに注目してください。
データの次元が増えると、$\bm{w}$の次元も増えてしまいますが、(6)の式では$\bm{w}$が登場しない形式のため、次元の呪いなどの問題が発生しないということになります。
ガウス過程の登場する計画行列$\bm{\Phi} $
(6)の式が、ガウス過程における目的変数が従う分布です、と言われても、頭の中にハテナ(?)ばっかりだと思います。ここではまず、$\bm{\Phi} $について深ぼっていきます。
まず、(6)式で得られた、ガウス過程における目的変数の分散共分散$\lambda^2 \bm{\Phi}\bm{\Phi}^T$を、$\bm{K}$とおきます。
\begin{equation} \begin{split} \bm{K} = \lambda^2 \bm{\Phi}\bm{\Phi}^T \end{split} \end{equation}
ここで、全データの数を$N$、特徴ベクトルの数を$H$ としたとき、$\bm{\Phi}$は、($N \times H$)となるため、$\bm{K}$は($N \times N$)の行列となります。つまり、データ数$N$次の正方行列となります。
ちなみに、この行列$\bm{K}$は、カーネル行列(kernel matrix)や、デザイン行列$\bm{\Phi}$のグラム行列(Gram matrix)と呼びます。
ここで、$\bm{K}$の各要素はどのようになっているかみていきましょう。$\bm{\Phi}$は(3)で定義されているので、注意深く式変形をすると、$\bm{K}$の(n, n’)成分$\bm{K}_{nn’}$は(n行n’列成分)、
\begin{equation} \begin{split} \bm{K}_{nn'} &= \lambda^2 \bm{\phi(x_n)} ^T \bm{\phi(x}_{n'}) \end{split} \end{equation}
となることがわかります。つまり、2つのデータの説明変数の特徴ベクトル$\bm{x_1}$と$\bm{x_2}$の内積が、(7)式の共分散の成分になっているということになります。
$\bm{K}$は、ガウス分布の共分散ですが、(8)の値が大きいほど、共分散も大きくなるということに対応します。つまり、説明変数$\bm{x}$の特徴ベクトルの内積が大きい、つまり特徴ベクトル空間内での内積が大きいほど、目的変数の値も近くなるという性質が見て取れます。
(7)を(6)に代入すると、
\begin{equation} \bm{y} \sim \mathcal{N}(0, \bm{K}) \end{equation}
という表現が他の参考書ではよく登場しますが、$\bm{K}$が意味する内容については、イメージできるようにしておくと良いでしょう。ちなみに、$\bm{K}$はよくカーネル行列などと呼ばれていますが、これの意味するところは、次で説明します。
カーネルトリック
続いて、カーネルトリックの解説に入ります。
(9)式を見ると、目的変数$\bm{y}$の分布は、(8)式で表される$\bm{K}$によって決まることがわかります。
ここで、$\bm{K}_{nn^{\prime}}$は、$\bm{\phi(x_n)} ^T \bm{\phi(x^{\prime}_{n})}$の関数です。$\bm{\phi(x)} $は、関数$\phi$が$H$個ならんだベクトルですが、$\bm{K}_{nn’}$を見ると、内積の形でしか登場しないことがわかります。
そこで、(8)の$\bm{x}_n$、$\bm{x }_{n^\prime}$の関数を次のように書くことにします。
\begin{equation} k(\bm{x}, \bm{x'})= \bm{\phi}( \bm{x_n})^T \bm{\phi}( \bm{x_n}) \end{equation}
この(10)の式をカーネル関数 (kernel function)と呼びます。例えば、カーネル関数の例として、ガウシアンカーネルや、多項式カーネルがあります。
(10)式で登場する、$H$個の関数$\phi(\bm{x})$を用意する代わりに、何かしらの関数$k(\bm{x}, \bm{x’})$を用意すれば良いということになります。これを、カーネルトリック(kernel trick)と呼びます。
カーネルトリックについては初見だと中々理解し難い概念ですが、特徴ベクトルの関数を全て用意しなくても、特徴ベクトルに変換した2つの説明変数の内積の値だけ計算できれば良いようにするのが、カーネルトリックです。
ガウス過程回帰で予測分布を得る
ここまで、ガウス過程回帰で関数をどのように表現するかについて学んできました。
ここからは、ガウス過程回帰により、未知の$\bm{x}$が与えられたときの、予測値$y_{pred}$をどのように得るかについて解説します。今まではガウス課程の話でしたが、ここからがガウス過程により回帰を行う、ガウス過程回帰の話になるという理解で良いと思われます。
ガウス過程回帰の予測分布
まず最初に、ガウス過程回帰の予測分布の公式(?)を最初に提示します。
ガウス過程回帰における予測分布は次のように導出される。
\begin{equation} \begin{split} p(y_{*} | \bm{y}) = \mathcal{N} (\bm{k^T_{*}} \bm{K} \bm{y}, \bm{k_{**} - \bm{k}^T_{*} \bm{K}^{-1}\bm{k}_{*}}) \end{split} \end{equation}
続いて、この予測分布を得る導出に進んでいきます。