Gaussian Process(ガウス過程)　なるべく数式の行間埋めて説明


# Gaussian Process(ガウス過程)を一言で
事後分布から関数をサンプリングして、未知の関数へ近づけること

# 通常の線形回帰について
通常の線形回帰は以下の式になる。
```math

\displaylines{y_i = a_0 + a_1 x_1 + a_2 x_2 + \dots +a_nx_n &&(1)}

```
しかし、この式の形では直線的な回帰しか行えない。
そこで、(2)のように置き
```math
\displaylines{w=(w_1,w_2,\dots,w_n)
\\
\Phi = \begin{pmatrix} x_1 \\ x_2^2\\\vdots \\x_n^n \end{pmatrix}
 &(2)
\\
\sum_{k=0}^{N} w^T\Phi_k = \displaylines{y_i = w_1 x_1 + w_2 x_2^2 + \dots +w_nx_n^n }
}

```
とすることで、より複雑な線形モデルを表現することができる。



この$\Phi$を、より般化させると、$\Phi=(\phi_1,\phi_2,\dots,\phi_n)$と表すことができる。
この$\phi$とはどんな関数でもいい。
例えば、$\Phi=(x_1,x_2^3,sin x,\dots)$と置くことができる。


うまく$\Phi$や$w$を調整することで、未知の関数(ブラックボックスな関数)を推測することができるはずだ。



# 次元の呪いについて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924643/40e3b7b2-e11a-1798-b27c-f935dcd914c3.png)



<br>
しかし、入力データ$x$の次元を考慮する必要がある。
大きな次元を扱う場合、**次元の呪い**が生じてしまうからだ。

https://wakara.co.jp/mathlog/20220821

<br>

###### 次元の呪い
<br>
データの次元（特徴量の数）が増加するにつれて、データ解析や機械学習のさまざまな問題が指数関数的に難しくなる現象を指す。

<br>
主な問題点：

|データが希薄になる  |計算コストの増大  |推定の不確実性  |
|---|---|---|
|高次元空間では、データポイントが空間内にまばらに分布し、近傍点を見つけることが難しくなる。  |次元が増えると、必要な計算量やメモリが指数関数的に増加する。  |パラメータの数がデータポイントの数を超えると、モデルの推定が不安定になる。
  
# 一対処法の紹介
<br>
ここで、予測値$w$がガウス分布に従っているとする。

```math
\hat{\mathbf{y}} = \Phi \mathbf{w} \

```
```math
\mathbf{w} \sim \mathcal{N}(0, \lambda^2 \mathbf{I}) \

```
:::note warn

多変量ガウスについての補足：
見てわかるように、$w$は多変量ガウス分布に従っている。
<br>
一般的な多変量ガウス：
```math
p(\mathbf{w}) = \frac{1}{(2\pi)^{n/2} |\Sigma|^{1/2}} \exp\left( -\frac{1}{2} (\mathbf{w} - \boldsymbol{\mu})^\top \Sigma^{-1} (\mathbf{w} - \boldsymbol{\mu}) \right)

```
$\mathbf{w} \sim \mathcal{N}(0, \lambda^2 \mathbf{I}) \$の場合の多変量ガウス：
```math
p(\mathbf{w}) = \frac{1}{(2\pi \lambda^2)^{n/2}} \exp\left( -\frac{1}{2\lambda^2} \mathbf{w}^\top \mathbf{w} \right)

```
:::
このとき、$w$が多変量ガウスに従うということは、$\hat{\mathbf{y}}$も同様に多変量ガウスに従う。<br>では$\hat{\mathbf{y}}$の確率分布$P(\hat{\mathbf{y}})$はどうなるだろうか。
ここでは簡略して$\hat{\mathbf{y}}=y$とする。

:::note info
$y$についての計算過程：

まず、${\mathbf{y}} = \Phi \mathbf{w} \$だったはずだ。


$w$の期待値が０なので、
```math
\mathbb{E}[\mathbf{y}] =\mathbb{E}[\Phi \mathbf{w}] = \Phi \mathbb{E}[\mathbf{w}] = 0

```
よって(分散)共分散行列は、
```math
\Sigma = \mathbb{E}[\mathbf{y}\mathbf{y}^\top] - \mathbb{E}[\mathbf{y}]\mathbb{E}[\mathbf{y}]^\top 
```
```math
= \mathbb{E}[\mathbf{y}\mathbf{y}^\top]
```

```math
=\mathbb{E}[(\Phi \mathbf{w})(\Phi \mathbf{w})^\top] 
```
```math
=\mathbb{E}[\Phi (\mathbf{w} \mathbf{w}^\top) \Phi^\top] 
```

```math
= \Phi \mathbb{E}[\mathbf{w}\mathbf{w}^\top] \Phi^\top 
```
```math
= \lambda^2 \Phi \Phi^\top
```
※式変換には$\text{Var}(X) = E(X^2) - [E(X)]^2の性質を用いている。
$
:::
以上から、
```math
\mathbf{y} \sim \mathcal{N}(0, \lambda^2 \Phi \Phi^\top)

```
と分かった。
このことから、$x$や$\phi$がどんな次元であっても(例え無限の次元であっても)、yはある関数同士の内積に定数をかけた式である**$\lambda^2 \Phi \Phi^\top$**に依存する。(つまり、次元を気にする必要がなくなる。)


# それを踏まえて、ガウス過程について

定義から紹介すると、

:::note info
ガウス過程の定義:
$(x_1,x_2,\dots)$に対応する$(y_1,y_2,\dots)$が多変量ガウス分布に従うとき、$x$と$y$はガウス過程に従う。
:::
$y$とは先ほどから見てきた、$\mathbf{y} \sim \mathcal{N}(0, \lambda^2 \Phi \Phi^\top)$に従う${\mathbf{y}} = \Phi \mathbf{w} \$である。
しかし、$\lambda^2 \Phi \Phi^\top$における$\Phi$は具体的に何なのか。
### カーネルトリック
$\lambda^2 \Phi \Phi^\top$をどうするのか。
<br>以下のように、ある関数として置いていく。
```math
K=\lambda^2\Phi \Phi^\top
```
この$K$をカーネル関数と呼ぶ。
カーネル関数には多く種類の種類がある。
例えばカーネル関数の一つ、ガウスカーネル(RBF)は以下となる。
```math
k(x_i, x_j) = \theta_1 \exp\left( -\frac{\|x_i - x_j\|^2}{\theta_2} \right)

```
(細かいことを抜きにすると、) 関数同士の内積$\Phi \Phi^\top$についての具体的な関数を考える必要なく、カーネル関数で置き換えることができるということである。
このような操作を**カーネルトリック**という。
以上から、
```math
\mathbf{y} \sim \mathcal{N}(0, K)

```
と表せる。

:::note alert
なぜ$K$とおけるかは難しい命題である。以下の文献(再生核ヒルベルト空間の理論によるガウス過程回帰の 汎化誤差解析)にそのヒントがあるかもしれない。


https://www.jstage.jst.go.jp/article/isciesci/62/10/62_396/_pdf

:::
なお、今回は平均を０としているが、一般的には平均関数$\mu(x)$で表される。
<br>また、それぞれの入力$x$に対して、出力ベクトル$y$は以下のような実数値となる。
```math
(f(x_1), f(x_2), \dots, f(x_n))
```

よって、この実数値同士を繋げた線形が出力$y$であることが分かる。
$y=f(x)$なら、ガウス過程とは関数$f(x)$をサンプリングする確率分布と見なすことができる。
```math
\displaylines{\mathbf{f} \sim \mathcal{GP}(\mu(x), K) 
\\(\mathbf{f}はガウス過程に従う)}

```
:::note info
今回の例ではガウス過程の平均値が$w$が従う分布のパラメータによって決まっていたが、任意の平均値でも支障はない。つまり、ガウス過程の予測関数自体に大きな変動があるわけではないのだ。
:::




# 新たなデータに対する分布
$\mathbf{x}^*$を未知のデータとすると出力は、
```math
{y}_{\text{new}} = \mathbf{w}^\top \boldsymbol{\phi}(\mathbf{x}^*)

```
とおける。
ベイズの式から
```math
p({y}_{\text{new}} | \mathbf{y})
= \frac{p({y}_{\text{new}}, \mathbf{y})}{p(\mathbf{y})}

```
であるため、
```math
\epsilon_n \sim \mathcal{N}(0, \sigma^2)

```
と仮定するとき、新たなデータと以前のデータとの同時分布の計算は以下の式になる。
```math
\displaylines{\begin{pmatrix}
\mathbf{y}_{\text{new}} \\
\mathbf{y}_{\text{old}}
\end{pmatrix}
\sim \mathcal{N} \left(
\begin{pmatrix}
\mathbf{0} \\
\mathbf{0}
\end{pmatrix},
\begin{pmatrix}
K_{\text{nn}} & K_{\text{no}} \\
K_{\text{on}} & K_{\text{oo}}
\end{pmatrix}
\right)}

```
よって条件付き分布は以下のパラメーターを持ったガウス過程に従う。


```math
\displaylines{p(\mathbf{y}_{\text{new}} | \mathbf{x}_{\text{new}}, \mathcal{D}) = \mathcal{N} \left(
\mathbf{k}_{\text{on}}^\top \mathbf{K}_{\text{nn}}^{-1} \mathbf{y}_{\text{old}}, 
k_{\text{oo}} - \mathbf{k}_{\text{on}}^\top \mathbf{K}_{\text{nn}}^{-1} \mathbf{k}_{\text{no}}
\right)}

```


更に、予測分布の期待値は
```math
\displaylines{\mathbb{E}[\mathbf{y}_{\text{new}} | \mathbf{x}_{\text{new}}, \mathcal{D}] = \mathbf{k}_{\text{on}}^\top \mathbf{K}_{\text{nn}}^{-1} \mathbf{y}_{\text{old}}}

```
となる。


:::note warn
$K$を$\Sigma$に置き換え、
$\mu_1$と$\mu_2$を平均関数とした場合の一般式は以下となる。
```math
\displaylines{\begin{pmatrix}
\mathbf{y}_{\text{old}} \\
\mathbf{y}_{\text{new}}
\end{pmatrix}
\sim \mathcal{N} \left(
\begin{pmatrix}
\boldsymbol{\mu}_{\text{old}} \\
\boldsymbol{\mu}_{\text{new}}
\end{pmatrix},
\begin{pmatrix}
\Sigma_{\text{old,old}} & \Sigma_{\text{old,new}} \\
\Sigma_{\text{new,old}} & \Sigma_{\text{new,new}}
\end{pmatrix}
\right)
\\
p(\mathbf{y}_{\text{new}} | \mathbf{y}_{\text{old}}) = \mathcal{N} \left(
\boldsymbol{\mu}_{\text{new}} + \Sigma_{\text{new,old}} \Sigma_{\text{old,old}}^{-1} (\mathbf{y}_{\text{old}} - \boldsymbol{\mu}_{\text{old}}), 
\Sigma_{\text{new,new}} - \Sigma_{\text{new,old}} \Sigma_{\text{old,old}}^{-1} \Sigma_{\text{old,new}}
\right)

}




```


:::
:::note warn
平均関数が0の場合の一般式もあらためて以下に示す。
```math
\displaylines{p(\mathbf{y}_{\text{new}} | \mathbf{y}_{\text{old}}) = \mathcal{N} \left(
\Sigma_{\text{new,old}} \Sigma_{\text{old,old}}^{-1} \mathbf{y}_{\text{old}},
\Sigma_{\text{new,new}} - \Sigma_{\text{new,old}} \Sigma_{\text{old,old}}^{-1} \Sigma_{\text{old,new}}
\right)}

```
ただし、各$\Sigma$は以下に従うとする。
<br>__________________________________________________________________
・$\Sigma_{\text{old, old}}$が「既存の観測データ同士」のカーネル行列 + ノイズ
<br>・$\Sigma_{\text{old, new}}$ が「既存 vs. 新しい入力点」のカーネル
<br>・$\Sigma_{\text{new, new}}$が「新しい入力点同士」のカーネル
<br>__________________________________________________________________


:::


以下に平均関数を用いたブラックボックス関数の近似をグラフにて示す。(あくまでイメージ)
![スクリーンショット 2024-12-28 23.27.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924643/42b4be1b-6869-c9b6-d8ec-fa097c09156c.png)






おまけ程度
# ノイズありの場合を考える
$\epsilon_n$を平均0のノイズとして、以下のように表す。

```math
y_n = f(\mathbf{x}_n) + \epsilon_n

```
```math
\epsilon_n \sim \mathcal{N}(0, \sigma^2)

```
このとき、$\mathbf{X} = (x_1, x_2, \ldots, x_N)$ が与えられた後の $y$ の分布を以下に示す。
```math
\displaylines{f = (f(x_1), f(x_2), \ldots, f(x_N))

\\
p(y | \mathbf{X}) = \int p(y | f) p(f | \mathbf{X}) \, df

}
```
ここで、$\mathbf{f} \sim \mathcal{GP}(\mu(x), K) $であるから、
```math
p(f | \mathbf{X})=　{N}(\mu(x), K)
```
$X$が与えられていることから、$f$は固定値であるはず。つまり、$y_n = f(\mathbf{x}_n) + \epsilon_n$は$y_n$と$\epsilon_n$が直接依存する関係となる。
よって平均は以下となる。
```math
\displaylines{\mathbb{E}[y_n | f] = \mathbb{E}[f(\mathbf{x}_n) + \epsilon_n | f]
\\
\mathbb{E}[y_n | f] = \mathbb{E}[f(\mathbf{x}_n) | f] + \mathbb{E}[\epsilon_n | f]
\\
\mathbb{E}[f(\mathbf{x}_n) | f] = f(\mathbf{x}_n)
\\
\mathbb{E}[\epsilon_n | f] = \mathbb{E}[\epsilon_n] = 0
\\
\mathbb{E}[y_n | f] = f(\mathbf{x}_n) + 0 = f(\mathbf{x}_n)
}
```
同様に分散共分散は以下となる。
```math
\displaylines{\text{Var}[y_n | f(\mathbf{x}_n)] = \mathbb{E} \left[ (y_n - \mathbb{E}[y_n | f(\mathbf{x}_n)])^2 \middle| f(\mathbf{x}_n) \right] \\
= \mathbb{E} \left[ (\epsilon_n)^2 \right] - \mathbb{E}[\epsilon_n]^2 \\
= \text{Var}[\epsilon_n] \\
= \sigma^2
}
```
よって、$p(y | f)$は、
```math
p(\mathbf{y} | f) = \mathcal{N}(\mathbf{y} | f, \sigma^2 \mathbf{I})

```
従って、
```math
p(y|X)=
```

```math
\int p(y | f) p(f | \mathbf{X}) \, df=\int \mathcal{N}(\mathbf{y} | f, \sigma^2 \mathbf{I}) \mathcal{N}(f | \boldsymbol{\mu}, K) \, df 

```
```math
= \mathcal{N}(\mathbf{y} | \boldsymbol{\mu}, K + \sigma^2 \mathbf{I})
```
:::note warn
ガウス分布同士の積について補足：
```math
\mathcal{N}(\mu_A, \sigma_A^2) + \mathcal{N}(\mu_B, \sigma_B^2) = \mathcal{N}(\mu_A + \mu_B, \sigma_A^2 + \sigma_B^2)

```

:::