# #13 Deep Neural Networks as Gaussian Processes
###### tags: `論文まとめ` `ガウス過程` `Bayes`
# Abstruct and Introduction
* 隠れ層が1つで,潜在次元が無限の事前分布が独立同分布のNNはガウス過程に等しいことが知られている.((Neal 1994,ftp://www.cs.toronto.edu/dist/radford/pin.pdf))
* この対応関係からGPの評価を行うことで,回帰タスクの無限幅NNの正確なベイズ推定が行える
* 近年,多層NNを模倣するカーネル関数が提案されている
* この研究での貢献,提案,諸々
* 無限に大きなNNとGPの等価性
* 共分散関数算出の効率を上げるアルゴリズム
* MNIST,CIFAR-10でのNNによるベイジアン推論
* GPの不確実さとネットワークの予測誤差との強い相関関係
* 有限幅のNNより,GP予測の方がテストパフォーマンスが向上すること
* GPの性能とNNの伝播に関する理論との結びつけ
# 無限幅DNNとGPの等価性
以下のように記法を定める
* 隠れ層が$L$の全結合NNにおいて,隠れ層の幅を$N_l$とし,活性化関数を$\phi$とする
* $x\in \mathbb R^{d_{in}}$をNNへの入力,$z^{L}\in \mathbb R^{d_{out}}$を出力とする
* $l$層目,$i$要素目の活性化後のものとアフィン変換を経たものをそれぞれ,$x_{i}^{l},z_{i}^{l}$とする
* 入力については$x_{i}^{0}=x_{i}$とし,要素を上付き文字をもちいて$x^{\alpha}$のように表す
* $l$層目の重み,バイアス項をそれぞれ,$W_{ij}^{l},b_{i}^{l}$とする
* 重みとバイアスは平均0,分散$\sigma_{w}^{2}/N_{l},\sigma_{b}^{2}$と正規分布で初期化する
* $\mathcal{GP}(\mu,K)$を,平均$\mu(\cdot)$,共分散$K(\cdot,\cdot)$であるガウス過程とする
## ガウス過程と隠れ単層NNの関係
一層目,$i$番目の要素の,出力$z_{i}^{1}$とする.
$$
z_{i}^{1}(x)=b_{i}^{1}+\sum_{j=1}^{N_{1}}W_{ij}^{1}x_{j}^{1}(x),~
x_{j}^{1}(x)=\phi\left(b_{i}^{0}+\sum_{k=1}^{d_{in}}W_{jk}^{0}x_{k}\right)
$$
ここで,独立同分布な分布の下にパラメータを設定したので,$x_{j}^{1}$と$x_{j'}^{1}$は,$j\neq j'$のもとで独立である.さらに,$z_{i}^{1}$は独立同分布な項の和であるので,あるので,中心極限定理から$N_{1}\rightarrow \infty$とすると,$z_{i}^{1}$は正規分布に従う.
同様にして,多次元の中心極限定理から,有限要素集合$\{z_{i}^{1}(x^{\alpha=1}),z_{i}^{1}(x^{\alpha=2}),...,z_{i}^{1}(x^{\alpha=k})\}$は多次元正規分布に従う.すなわち,$z_{i}^{1}$は,ガウス過程に従い,$z_{i}^{1}\sim \mathcal{GP}(\mu^{1},K^{1})$となる.ただし,独立同分布から$\mu^{1}(x)=0$で,$K$は以下のように計算される.
$$
K^{1}(x,x'):=\mathbb{E}[z_{i}^{1}(x)z_{i}^{1}(x')]=\sigma_{b}^{2}+\sigma_{w}^{2}\mathbb E[x_{i}^{1}(x)x_{i}^{1}]:=\sigma_{b}^{2}+\sigma_{w}^{2}C(x,x')
$$
ただし,$C(x,x')$は$W^{0},b^{0}$の分布を積分することで得られる関数である.
## GPとDNN
前節のGPとNNの推論は,以下のようにして多層NNに対して拡張が可能である.
レイヤへの入力がGPに従うことを保証すべく,隠れ層の幅を連続して無限大とすることで,DNNへのGPの導入を誘導する.
ここで,$z_{j}^{l-1}$がガウス過程従い,$j$に対して,独立同分布(=$x_{j}^{l}(x)$が独立同分布)とする.このもとで,$z_{j}^{l}$は
$$
z_{i}^{l}(x)=b_{i}^{l}+\sum_{j=1}^{N_{l}}W_{ij}^{l}x_{j}^{l}(x),~
x_{j}^{l}(x)=\phi\left(z_{j}^{l-1}(x)\right)
$$
のようになる.
前節と同様の推論で,無限大な幅の層の下では,中心極限定理から有限集合$\{z_{i}^{l}(x^{\alpha=1}),z_{i}^{l}(x^{\alpha=2}),...,z_{i}^{l}(x^{\alpha=k})\}$は多次元正規分布に従い,$z_{i}^{l}\sim\mathcal{GP}(0,K^{l})$となる.
ただし,
$$
K^{l}(x,x'):=\mathbb{E}[z_{l}^{l}(x)z_{i}^{l}(x')]=\sigma_{b}^{2}+\sigma_{w}^{2}\mathbb E_{z_{i}^{l-1}\sim\mathcal{GP}(0,K^{l-1})}[\phi(z_{i}^{l-1}(x))\phi(z_{i}^{l-1}(x'))]
$$
である.
上式の期待値項は$z_{i}^{l-1}$を支配するガウス過程より大きいが,これは$z_{i}^{l-1}(x)$と,$z_{i}^{l-1}(x')$のみの同次分布に対する積分に等しい.これは,平均が0で共分散行列が$K^{l-1}(x,x'),K^{l-1}(x,x),K^{l-1}(x',x')$によって記述される2次元正規分布に従う.
すなわち,
$$
K^{l}(x,x')=\sigma_{b}^{2}+\sigma_{w}^{2}F_{\phi}(K^{l-1}(x,x'),K^{l-1}(x,x),K^{l-1}(x',x'))
$$
のように書け,$K^{l}$と$K^{l-1}$の再帰的関係が活性化関数$\phi$によって決定される決定論的な関数を通して記述できる.
すなわち計算の際は0から反復を行うことで目的とする関数$K^{l}$を得ることができる.
ただし,$K^{0}$は以下のように定義する.
$$
K^{0}(x,x')=\mathbb E[z_{j}^{0}(x)z_{j}^{0}(x')]=\sigma_{b}^{2}+\sigma_{w}^{2}\left(\frac{x\cdot x'}{d_{in}}\right)
$$
## ガウス過程事前分布によるNNのベイジアン学習
まず,学習の目的はデータセット$\mathcal D=\{(x^{1},t^{1}),...(x^{n},t^{n})\}$に対して,関数分布$z(x)$を用いて,テストデータ$x^{*}$に対し,ベイズ推定を行うことである.この関数分布のベクトル${\bf z}=(z^{1},...,z^{n})$は入力${\bf x}=(x^{1},...,x^{n})$,目的${\bf t}=(x^{1},...,x^{n})$に対して,${\bf x}$の条件付き分布として,下式のように与えられる.
$$
\begin{eqnarray}
P(z^{*}|\mathcal D,x^{*})&=&\int d{\bf z}P(z^{*}|{\bf z},{\bf x},x^{*})P({\bf z}|\mathcal D)\\
&=&\frac{1}{P({\bf t})}\int P(z^{*},{\bf z}|{\bf x},x^{*})P({\bf t}|{\bf z})
\end{eqnarray}
$$
上式において,$P({\bf t}|{\bf z})$は観測ノイズに対応する.ここでは,ノイズは$\mathcal N(z,\sigma_{\epsilon}^{2})$に従うと考えモデル化する.
前節から,関数の事前分布はGPにより導出され,また,$z^{*},{\bf z}|{\bf x},x^{*}$は$\mathcal N(0,{\bf K})$に従う.ただし,
$$
K=
\left[
\begin{array}{cc}
K_{\mathcal D,\mathcal D}&K_{x^{*},\mathcal D}^{T}\\
K_{x^{*},\mathcal D}&K_{x^{*},x^{*}}
\end{array}
\right]
$$
これを上記の積分の式に入れることで,目的とする分布$z^{*}|\mathcal D,x^{*}$が厳密に導出され,平均と共分散が以下のように定義される正規分布に従う.
$$
\begin{eqnarray}
\bar{\mu}&=&K_{x^{*},\mathcal D}(K_{\mathcal D,\mathcal D}+\sigma_{\epsilon}^{2}I_{n})^{-1}t\\
\bar{K}&=&K_{x^{*},x^{*}}-K_{x^{*},\mathcal D}(K_{\mathcal D,\mathcal D}+\sigma_{\epsilon}^{2}I_{n})K_{x^{*},\mathcal D}^{T}
\end{eqnarray}
$$
以下,カーネルの深度を強調するため${\bf K}$を上付き文字を用いて${\bf K}^{L}$のように表す.
## GPカーネルの実装方法
実際にGPと同等のDNNを構築するにあたっての注意点を挙げる.以下,活性化関数についてはReLU関数を用いることで,積分が解析的に行えるメリットがある.その他の関数では,数値的に積分を行わねばならない.
${\bf K}^{L}$を求めるにあたって,愚直な実装では計算量が$O(n_{g}^{2}L(n_{train}^{2}+n_{train}n_{test}))$ほど掛かる.$n_{g}^{2}$は,2次元の積分のガウス確率密度の対のサンプリング密度で,$n_{train},n_{test}$は,それぞれ,訓練とテストのサイズである.しかしながら,効率的なパイプラインを用いることで,計算コストを$O(n_{g}^{2}n_{v}n_{c}+L(n_{train}^{2}+n_{train}n_{test}))$ほどまで抑えることが可能になる.ただし,$n_{v},n_{c}$は,後述する分散と相関グリッドのサンプリング密度である.
上述の計算コストを達成すべく以下のようにして処理を行う.
### 1. グリッドの生成
$n_{g}$個の要素からなる等間隔な活性化適用前の値の集合$u=\{-u_{max},...,u_{max}\}$,$n_{v}$個の要素からなる等間隔な分散の値の集合$s=\{0,...,s_{max}\},\text{where}s_{max}<u_{max}^{2}$,$n_{c}$個の要素からなる等間隔な相関の値の集合$c=\{0,...,1\}$を生成する.
このサンプリンググリッドは固定する.(適用型ではない)
### 2. 検索行列の生成
関数$F_{\phi}$の検索表に相当する行列$F$を作成する.この行列のはたらきは,周辺分散と相関に対するガウス積分近似に等しい.また,すべてのデータポイントを前処理して同一のノルムを持つようにすることで,各々のデータポイントの周辺分散の同一性を保証するためにこの検索行列の要素数を$n_{v}n_{c}$とする.
$$
F_{ij}=\frac{\sum_{ab}\phi(u_a)\phi(u_b)\exp\left(-\frac{1}{2}\left[\begin{array}{c}u_{a}\\u_{b}\end{array}\right]\left[\begin{array}{cc}s_{i}&s_{i}c_{j}\\s_{i}c_{j}&s_{i}\end{array}\right]^{-1}\left[\begin{array}{c}u_{a}\\u_{b}\end{array}\right]\right)}{\sum_{ab}\exp\left(-\frac{1}{2}\left[\begin{array}{c}u_{a}\\u_{b}\end{array}\right]\left[\begin{array}{cc}s_{i}&s_{i}c_{j}\\s_{i}c_{j}&s_{i}\end{array}\right]^{-1}\left[\begin{array}{c}u_{a}\\u_{b}\end{array}\right]\right)}
$$
### 3. 再帰的な$K^{l}$の計算
層$l$の全ペア$x,x'$に対する$K^{l}(x,x')$を
$$
K^{l}(x,x')=\sigma_{b}^{2}+\sigma_{w}^{2}F_{\phi}(K^{l-1}(x,x'),K^{l-1}(x,x),K^{l-1}(x',x'))
$$
を用いて再帰的に計算する.ただし,$F_{\phi}$は,$s=K^{l-1}(x,x),c=s=K^{l-1}(x,x')/s=K^{l-1}(x,x)$から,検索行列$F$の値をバイリニア補完して得る.
### 4. 上記の繰り返し
これらのステップを再帰的に繰り返してすべての層の処理を行う.バイリニア補完を定数時間で行えると考えると,計算コストは,$O(L(n_{train}^{2}+n_{train}n_{test}))$となる.
---
実装はコレ: https://github.com/brain-research/nngp