機械学習に詳しくなりたいブログ

機械学習や数学について勉強した内容を中心に書きます。100%趣味です。記事は数学的に厳密でなかったり誤りを含んでいるかもしれません。ご指摘頂ければ幸いです。

ガウス過程による分類(5)

ガウス過程による分類(4)の続き。


\displaystyle \Psi(\mathbf{a}_{N})=  \mathbf{t}_{N}^{T} \mathbf{a}_{N} +  \sum_{n=1}^{N} \ln \sigma(-a_{n})  - \frac{N}{2} \ln 2 \pi - \frac{1}{2} \ln \det \mathbf{C_{N}} - \frac{1}{2}\mathbf{a}_{N}^{T} \mathbf{C}_{N}^{-1} \mathbf{a}_{N} \tag{1}

と求められましたので、ラプラス近似をするため、まずは \nabla \Psi(\mathbf{a}_{N}^{\prime})=\mathbf{0}となる点 \mathbf{a}_{N}^{\prime} を求めます。

ベクトルの微分の式(8)を用いれば、


\begin{eqnarray*}
\nabla \Psi(\mathbf{a}_{N}) &=& \mathbf{t}_{N} - \boldsymbol {\sigma}_{N} - \frac{1}{2}(\mathbf{C}_{N}+(\mathbf{C}_{N}^{-1})^{T})\mathbf{a}_{N} \tag{2}\\
&=& \mathbf{t}_{N}-\boldsymbol {\sigma}_{N}-\mathbf{C}_{N}^{-1}\mathbf{a}_{N} \tag{3}
\end{eqnarray*}

となります。ここで \boldsymbol {\sigma}_{N} = (\sigma(a_{1}), \cdots, \sigma(a_{N})) です。\ln \sigma(-a_{n})の微分は、シグモイド関数の微分と、ガウス過程による分類(3)の式(15)→式(16)の変形を用いれば計算できます。

ここで、式(3)の\boldsymbol {\sigma}_{N}の中にもa_{i} が含まれていますから、解析的に求めることができません。そこでニュートン法(多変数の場合)を用います。

ニュートン法の更新式は、ニュートン法(多変数の場合)の式(6)より、


\mathbf{x} = \mathbf{x}^{\prime} - \bar{\mathbf{H}}^{-1} \nabla \bar{f} \tag{4}

でした。ここで、 \bar{\mathbf{H}}^{-1}\nabla \bar{f}は、点\mathbf{x}^{\prime}における\mathbf{H}^{-1}\nabla fを表します。したがって、\nabla \Psi(\mathbf{a}_{N})=\mathbf{0}となる点\mathbf{a}^{\prime}を求める更新式は、


\mathbf{a}_{N}^{new} = \mathbf{a}  -\nabla\nabla\Psi(\mathbf{a}_{N})\nabla\Psi(\mathbf{a}_{N}) \tag{5}

となります。\nabla\nabla\Psi(\mathbf{a}_{N})は、式(3)をもう1度微分すれば、


\nabla\nabla\Psi(\mathbf{a}_{N}) = -\mathbf{W}_{N}  -\mathbf{C}_{N}^{-1} \tag{6}

です。\boldsymbol {\sigma}_{N}の微分は、ベクトルをベクトルで微分の定義とヘッセ行列の式(1)の定義より計算し、


\mathbf{w}_{N} =  \left(
    \begin{array}{cccc}
      \sigma(a_{1})(1-\sigma(a_{1})) &  & & 0 \\
       &  & \ddots &  \\
       0 &  &  & \sigma(a_{N})(1-\sigma(a_{N}))
    \end{array}
  \right) \tag{9}

です。

ここで、シグモイド関数\sigma[0,1]の範囲の値をとります。対角行列の固有値は対角成分そのものですから、\mathbf{w}_{N}正定値行列であることがわかります。また、\mathbf{C}_{N}ガウス過程による分類(2)の式(8)より正定値行列です。そして正定値行列の逆行列より\mathbf{C}_{N}^{-1}もまた正定値行列です。さらに正定値行列の和も正定値行列ですから、\nabla\nabla\Psi(\mathbf{a}_{N})は負定値行列であることがわかります。するとヘッセ行列で最大/最小値の存在を判定より、2次関数のヘッセ行列が負定値行列の場合は唯一の最大値を持ちますから、\Psi(\mathbf{a}_{N})は唯一の最適解を持っているといえます。

さて、式(3)と式(6)より、更新式の式(5)は、


\mathbf{a}_{N}^{new} = \mathbf{a}_{N} - (-\mathbf{W}_{N}- \mathbf{C}_{N}^{-1})(\mathbf{t}_{N}-\boldsymbol {\sigma}_{N}-\mathbf{C}_{N}^{-1}\mathbf{a}_{N}) \tag{10}

となります。このまま使うと何か数値計算的に問題があるのか?計算量の無駄があるのか?わかりませんが、参考書ではさらに式変形をします。


\begin{eqnarray*}
式(10)  &=& (\mathbf{W}_{N} + \mathbf{C}_{N}^{-1})^{-1} \left\{ (\mathbf{W}_{N}+ \mathbf{C}_{N}^{-1})\mathbf{a}_{N} + \mathbf{t}_{N} - \boldsymbol{\sigma}_{N}- \mathbf{C}_{N}^{-1}\mathbf{a}_{N} \right\} \tag{11}\\
&=&  (\mathbf{W}_{N} + \mathbf{C}_{N}^{-1})^{-1}  (\mathbf{W}_{N}\mathbf{a}_{N} + \mathbf{t}_{N} - \boldsymbol{\sigma}_{N}) \tag{12}\\
&=&  (\mathbf{W}_{N} + \mathbf{C}_{N}\mathbf{C}_{N}^{-1} + \mathbf{C}_{N}^{-1})^{-1}  (\mathbf{W}_{N}\mathbf{a}_{N} + \mathbf{t}_{N} - \boldsymbol{\sigma}_{N}) \tag{13}\\
&=& \left\{ (\mathbf{W}_{N}\mathbf{C}_{N}+\mathbf{I} ) \mathbf{C}_{N}^{-1}) \right\}^{-1}  (\mathbf{W}_{N}\mathbf{a}_{N} + \mathbf{t}_{N} - \boldsymbol{\sigma}_{N}) \tag{14}\\
&=& \mathbf{C}_{N} (\mathbf{W}_{N}\mathbf{C}_{N}+\mathbf{I} )^{-1}  (\mathbf{W}_{N}\mathbf{a}_{N} + \mathbf{t}_{N} - \boldsymbol{\sigma}_{N}) \tag{15}\\
\end{eqnarray*}

となります。式(14)→式(15)の式変形には逆行列の定理の式(1)を使っています。

ガウス過程による分類(4)の最後の部分と重複しますが、これにより求められる \nabla \Psi(\mathbf{a}_{N}^{\prime})=\mathbf{0}となる点 \mathbf{a}_{N}^{\prime} を用いて、


p(\mathbf{a}_{N}|\mathbf{t}_{N}) \simeq N(\mathbf{a}_{N}|\mathbf{a}_{N}^{\prime}, \mathbf{H}^{-1})\tag{16}

と書けます。ここで\mathbf{H}=-\nabla\nabla\Psi(\mathbf{a}_{N}^{\prime})です。

続き:ガウス過程による分類(6)