ガウス過程の微分 (GPLVM用)
入出力データセット $ \mathbf{x}_i\in\mathbb{R}^{M_X}, y_i\in\mathbb{R}, i=1,...,N のもとで、
ガウス過程回帰のエビデンスを以下で書くことができる。
$ L(X) = \ln p(\mathbf{y}|X) = - \frac{N}{2}\log 2\pi - \frac{1}{2} \log |\mathbf{K}| - \frac{1}{2}\mathbf{y}^T \mathbf{K}^{-1} \mathbf{y}
ここで $ \mathbf{K}=(K_{ij})_{i,j=1:N}は$ K_{ij}=k(\mathbf{x}_i,\mathbf{x}_j)であるような共分散行列。
$ \mathbf{y}=(y_1,...,y_N)^Tは$ N次元縦ベクトル。
GPLVMでは $ \mathbf{x}_iが未知数であることを仮定し、 $ \mathbf{x}_iをエビデンスを大きくする方向に補正する。(観測位置ズレ補正でも、同様)
このため、
$ \frac{\partial L(X)}{\partial x_{id}}を全ての $ i=1,...,N, d=1,...,M_Xについて求め、これをつかって勾配法を行いたい。
ここで $ x_{id}は第 $ i入力点$ \mathbf{x}_iの第 $ d成分である。
微分の連鎖則から、
$ \frac{\partial L(X)}{\partial x_{id}} = {\rm tr}\left( \frac{\partial \mathbf{K}}{\partial x_{id}} \frac{\partial L(X)}{\partial \mathbf{K}} \right)
参考: 同じ形の行列$ \mathbf{A},\mathbf{B}について、$ {\rm tr}(\mathbf{A} \mathbf{B})=\sum_{i}\sum_j A_{ij} B_{ij}
(1) カーネルの微分
行列をスカラーで微分するとは、行列の各成分の微分を成分とした行列を作ることである。
つまり、
$ \frac{\partial \mathbf{K}}{\partial x_{id}} の $ (i',j')成分は$ \left( \frac{\partial \mathbf{K}}{\partial x_{id}} \right)_{(i',j')} = \frac{d k(\mathbf{x}_{i'}, \mathbf{x}_{j'})}{d x_{id}}
ここで$ i'もしくは $ j'が $ iと一致しないほとんどの成分がゼロになることに注意する。
(2) エビデンスの微分
スカラーを行列で微分する計算で得られる結果は行列である。「ガウス過程と機械学習」の p.213 付録A.3 を参考にすると、以下が得られる
$ \frac{\partial L(X)}{\partial \mathbf{K}} = \frac{1}{2}(\mathbf{K}^{-1}\mathbf{y}\mathbf{y}^T\mathbf{K}^{-1} - \mathbf{K}^{-1})
------
具体的に以下のARDガウスカーネルの場合を考える。
$ k ( \mathbf{x}_i, \mathbf{x}_j ) =\exp\left(-\sum_d \alpha_d(x_{id}-x_{jd})^2\right)
$ \alpha_dはハイパーパラメタである。
$ \frac{\partial k(\mathbf{x}_i, \mathbf{x}_j)}{\partial x_{id}} = -\alpha_d(x_{id}-x_{jd})\exp\left(-\sum_d \alpha_d(x_{id}-x_{jd})^2\right) = -\alpha_d A_{(d)ij} K_{ij}
ここで、行列 $ \mathbf{A}_{(d)} = (A_{(d)ij}), A_{(d)ij}=(x_{id}-x_{jd})を導入した。すると上記のようにシンプルに書けるのみでなく、数値計算時にこれをメモリに格納しておくことで、繰り返しを計算を減らすことができる。
行列形にまとめると、
$ \frac{\partial \mathbf{K}}{\partial x_{id}} = -\alpha_d \mathbf{B}_{(id)} \circ \mathbf{K}
ここで $ \circはアダマール積(同一形状行列の成分同士の積)である。
$ \mathbf{B}_{id}は第$ i行と第$ i列に対応する $ (i,j)成分および $ (j,i)成分が $ A_{(d)ij}であり、それ以外の成分がゼロであるような行列である。成分が入っている箇所は十字形になっている。
https://gyazo.com/11b763eb55f8b8da88e6dfa5dcc6e389
$ \frac{\partial L(X)}{\partial x_{id}} = {\rm tr}\left( \frac{\partial \mathbf{K}}{\partial x_{id}} \frac{\partial L(X)}{\partial \mathbf{K}} \right)
$ = {\rm tr}\left( -\frac{1}{2}\alpha_d (\mathbf{B}_{(id)} \circ \mathbf{K}) (\mathbf{K}^{-1}\mathbf{y}\mathbf{y}^T\mathbf{K}^{-1} - \mathbf{K}^{-1})\right)← 十字型に非ゼロ成分を持つ対角行列であるので、ベクトルの内積のみを残して2倍すると、
$ = - \alpha_d \sum_{j} A_{(d)ij} K_{ij} \tilde{K}_{ij}
ここで $ \tilde{K}_{ij}は $ \mathbf{K}^{-1}\mathbf{y}\mathbf{y}^T\mathbf{K}^{-1} - \mathbf{K}^{-1}の $ (i,j)成分。
補助変数法を用いる場合
補助変数法では、入出力データセット $ (X,Y)=(\mathbf{x}_i\in\mathbb{R}^{D_X}, y_i\in\mathbb{R}, i=1,...,N) に加えて、
補助点セット $ Z=(\mathbf{z}_j\in\mathbb{R}^{M_X}, j=1,...,M)を与える。
補助変数 $ \mathbf{u}=(u_1,...,u_M)^T = (f(\mathbf{z}_1), ..., f(\mathbf{z}_M))^T は確率変数である。
補助変数法により計算量の大幅な削減が期待できる。補助点の個数 $ Mが小さいとき、$ O(N^3)の計算量を$ O(M^3)まで減らすことができる。補助点セットがグリッド状に並んでいるときには$ Mが大きくてもグリッドカーネル法(KISS-GP法とも呼ばれる)によって別種の計算量削減ができる。
補助変数を積分消去すれば、ガウス過程回帰のエビデンスはオリジナルと同様に以下で書くことができる
$ L(X) = \ln p(\mathbf{y}|X) = - \frac{N}{2}\log 2\pi - \frac{1}{2} \log |\mathbf{K}| - \frac{1}{2}\mathbf{y}^T \mathbf{K}^{-1} \mathbf{y}
しかし、共分散関数は以下の形になる点がオリジナルと異なる。
$ \mathbf{K}=\mathbf{K}_{NM}\mathbf{K}_{MM}^{-1}\mathbf{K}_{NM}^T+\mathbf{\Lambda}_0
ここで
$ \mathbf{K}_{MM}は $ (i,j)成分が$ k(\mathbf{z}_i,\mathbf{z}_j)であるような、補助変数に関する共分散行列
$ \mathbf{K}_{NM}は $ (i,j)成分が$ k(\mathbf{x}_i,\mathbf{z}_j)であるような、入力変数と補助変数のペアに関する共分散行列
$ \mathbf{\Lambda}_0は第$ n成分が $ \lambda_n = \sigma^2 + k_n-\mathbf{k}_{Mn}^T\mathbf{K}_{MM}^{-1}\mathbf{k}_{Mn}であるような対角行列
$ \mathbf{k}_{Mn}は第$ j成分が $ k(\mathbf{x}_n,\mathbf{z}_j)であるような縦ベクトルである。
である。
このとき、カーネルの微分は以下のとおりとなる
$ \frac{\partial \mathbf{K}}{\partial x_{id}}= 2 \frac{\partial \mathbf{K}_{NM}}{\partial x_{id}}\mathbf{K}_{MM}^{-1}\mathbf{K}_{NM}^T+\frac{\partial \mathbf{\Lambda}_0}{\partial x_{id}}
対角成分は、全てゼロになる。
$ \left( \frac{\partial \mathbf{K}}{\partial x_{id}} \right)_{ii} = 2 \frac{\partial \mathbf{k}_{iM}}{\partial x_{id}}\mathbf{K}_{MM}^{-1}\mathbf{k}_{iM}^T+\frac{\partial \lambda_n}{\partial x_{id}} = 0
$ \left( \frac{\partial \mathbf{K}}{\partial x_{id}} \right)_{i'i'}=0 if $ i\neq i'
非対角成分は、第$ i行と第$ i列の十字形要素以外はゼロになる。
$ \left( \frac{\partial \mathbf{K}}{\partial x_{id}} \right)_{ij} = \frac{\partial \mathbf{k}_{iM}}{\partial x_{id}}\mathbf{K}_{MM}^{-1}\mathbf{k}_{jM}^T
$ \left( \frac{\partial \mathbf{K}}{\partial x_{id}} \right)_{ji} =\mathbf{k}_{jM} \mathbf{K}_{MM}^{-1}\frac{\partial \mathbf{k}_{iM}^T}{\partial x_{id}}=\left( \frac{\partial \mathbf{K}}{\partial x_{id}} \right)_{ij}
$ \left( \frac{\partial \mathbf{K}}{\partial x_{id}} \right)_{i'j'}=0 if $ i\neq i' or $ i\neq j'
ガウスカーネルの場合
$ \left( \frac{\partial \mathbf{K}}{\partial x_{id}} \right)_{ij} = -\alpha_{(d)} \sum_{i'}\sum_{j'} B_{(d)ii'} \left( \mathbf{K}_{NM} \right)_{ii'}\left( \mathbf{K}_{NM}\right)_{jj'}\left(\mathbf{K}_{MM}^{-1}\right)_{i'j'}
ここで $ B_{(d)ii'}=x_{id}-z_{i'd}である。
添字に細心の注意を。
参考:
$ \mathbf{K}^{-1}= \mathbf{\Lambda}_0^{-1}-\mathbf{\Lambda}_0^{-1} \mathbf{K}_{NM} (\mathbf{K}_{MM} + \mathbf{K}_{NM}^T \mathbf{\Lambda}_0^{-1}\mathbf{K}_{NM}) ^{-1} \mathbf{K}_{NM}^T\mathbf{\Lambda}_0^{-1}