Processing math: 100%

2018年11月6日火曜日

ベイズ推論とガウス過程

はじめに


 ベイズ推論とガウス過程の関係を、回帰を例に取り確認する。

ベイズ線形回帰


 まず最初にベイズ推論を用いて線形回帰を考察する。いま観測値XYが与えられているとする。 \begin{eqnarray} X&=&\{x_1,\cdots,x_N\},x_n\in \mathbb{R}^M \\ Y&=&\{y_1,\cdots,y_N\},\;y_n\in\mathbb{R} \end{eqnarray} このとき次の尤度を考える。 \begin{equation} p(y_n|x_n,w)=\mathcal{N}(y_n|w^T\phi(x_n),\beta^{-1}) \end{equation} ここで、\mathcal{N}(y_n|\mu,\sigma^2)は平均\mu、分散\sigma^2の正規分布を表す。wはパラメータ(w\in\mathbb{R}^D)、\phi(\cdot)M次元空間内の点をD次元空間内の点に射影する関数である。次に、wの事前分布を次のように導入する。 \begin{equation} p(w)=\mathcal{N}(w|0,\alpha^{-1}I_D) \end{equation} I_DD\times Dの単位行列である。このとき事後分布p(w|X,Y)は厳密に計算でき \begin{eqnarray} p(w|X,Y)&=&\mathcal{N}(w|m,S) \\ m&=&S\beta\Phi^Ty \in \mathbb{R}^D\\ S&=&(\alpha I_D+\beta\Phi^T\Phi)^{-1} \in \mathbb{R}^{D\times D} \end{eqnarray} を得る。y=(y_1,\dots,y_N)^T\Phi\Phi_{nd}=\phi_d(x_n)を成分に持つN\times D行列である。さらに、この事後分布から予測分布を求めることができる。 \begin{eqnarray} p(y_{*}|x_{*},X,Y)&=&\mathcal{N}(y_{*}|m^T\phi(x_*),\sigma^2(x_*)) \label{eq1}\\ \sigma^2(x_*)&=&\beta^{-1}+\phi^T(x_*)S\phi(x_*) \end{eqnarray} 以上が、ベイズ推論による線形回帰の結果である。

ガウス過程による回帰


 いま観測値XYが与えられているとする。 \begin{eqnarray} X&=&\{x_1,\cdots,x_N\},x_n\in \mathbb{R}^M \\ Y&=&\{y_1,\cdots,y_N\},\;y_n\in\mathbb{R} \end{eqnarray} 観測値XYの間には次の関係があるとする。 \begin{equation} y_n=z(x_n)+\epsilon_n \end{equation} \epsilon_nが正規分布に従うノイズであれば次の尤度を考えることができる。 \begin{equation} p(y_n|z_n)=\mathcal{N}(y_n|z_n,\beta^{-1}) \end{equation} ただし、z_n=z(x_n)とした。観測値は独立同分布から生成されると仮定すれば次式を得る。 \begin{eqnarray} p(y|z) &=&p(y_1,\dots,y_N|z_1,\cdots,z_N) \\ &=&\prod_{n=1}^N p(y_n|z_n) \\ &=&\prod_{n=1}^N \mathcal{N}(y_n|z_n,\beta^{-1}) \\ &=&\mathcal{N}(y|z,\beta^{-1}I_N) \end{eqnarray} ただし、y=(y_1,\dots,y_N)^Tz=(z_1,\dots,z_N)^Tと置いた。I_NN\times Nの単位行列である。ここで、zがガウス過程から生成される量であると仮定すると、次の事前分布を使うことができる。 \begin{equation} p(z)=\mathcal{N}(z|0,K) \end{equation} 共分散行列KのサイズはN\times Nであり、その成分は次式で定義される。 \begin{equation} K_{nm}=k(x_n,x_m) \end{equation} k(x_n,x_m)は2点から1つのスカラー量が決まる関数であり、カーネル関数と呼ばれる。これらを用いて、p(y,z)zについて周辺化する。 \begin{eqnarray} p(y)&=&\int dz\;p(y|z)\;p(z)\\ &=&\mathcal{N}(y|0,C) \end{eqnarray} CN\times Nの行列であり、その成分は次式で与えられる。 \begin{equation} C_{nm}=k(x_n,x_m)+\beta^{-1}\delta_{nm} \end{equation} 予測分布は次のようなる。 \begin{eqnarray} p(y_*|x_*,X,Y)&=&\mathcal{N}(y_*|m^{'}(x_*),\sigma^{'\;2}(x_*)) \label{eq2}\\ m^{'}(x_*)&=&k^TC^{-1}y \\ \sigma^{'\;2}(x_*)&=&c-k^TC^{-1}k \end{eqnarray} ただし \begin{eqnarray} k&=&(k(x_n,x_*),\cdots,k(x_N,x_*))^T \\ c&=&k(x_*,x_*)+\beta^{-1} \end{eqnarray} である。以上がガウス過程による回帰の結果である。

ベイズ推論とガウス過程の関係


 いま、カーネル関数が次式で定義されるとする。 \begin{equation} k(x_n,x_m)=\alpha^{-1}\phi^T(x_n)\phi(x_m) \end{equation} このとき、式(\ref{eq1})と(\ref{eq2})は等しくなる。

 ベイズ推論による解法ではD次元空間を考えるが、ガウス過程による解法ではN次元空間を考える。前者ではD\times D行列の逆行列を、後者ではN\times N行列の逆行列を計算する必要がある。それぞれの計算量は\mathcal{O}(D^3)\mathcal{O}(N^3)である。D\lt Nである場合、パラメータ空間で計算した方が計算量は少なくなる。ガウス過程を使う利点は、Kとして様々なカーネルを使うことができる点である。

ガウス過程のハイパーパラメータの決定


 いま共分散行列Kがハイパーパラメータ\thetaでモデル化されているとする。 \begin{equation} p(z|\theta)=\mathcal{N}(z|0,K_{\theta}) \end{equation} このとき \begin{eqnarray} p(y|\theta)&=&\int dz\;p(y|z)\;p(z|\theta)\\ &=&\mathcal{N}(y|0,C_{\theta}) \\ C_{\theta,nm}&=&K_{\theta,nm}+\beta^{-1}\delta_{nm} \end{eqnarray} が成り立つ。事前分布p(\theta)を考えると次式が成り立つ。 \begin{equation} p(\theta|y)=\frac{p(y|\theta)p(\theta)}{p(y)} \end{equation} 一般的に右辺分母は解析的に計算できないので、何らかの近似が必要になる。書籍「Pythonによるベイズ統計モデリング PyMCでのデータ分析実践ガイド」の第8章にPyMC3を用いた解法が掲載されている。

0 件のコメント:

コメントを投稿