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

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

2019年12月の振り返り

2019年は相場が戻ってくれてよかった。2018年の投信マイナスが311万だったので、ちょうど相殺できた。これでようやく2018年初と同じ位置なのだけど、毎月積み立てで投資しているので、投資額は当時よりけっこう膨らんでいる。2018年と同じレベルの下げがくれば300万の評価損では済まなくなりますが、上がれば爆発力も増しているということで。Web収入は2018年から少しダウンですがこの水準なら満足です。

19年12月の実績
Web収入 投信 前月比評価損益
738,815円 337,435円 1,076,250円
19年の累積
Web収入 投信評価損益 個別株
7,899,607‬円 3,148,723円 705,618円 11,753,948‬円

正定値行列の逆行列

\mathbf{A}が対称行列なら、対称行列の対角化より、


\mathbf{U}^{T} \mathbf{A} \mathbf{U} =  \mathbf{\Lambda} \tag{1}

によって対角化できます。ここで、\mathbf{U}は固有ベクトルを並べた直交行列、\mathbf{\Lambda}は固有値\lambda_{i}を対角成分に持つ対角行列です。また、\mathbf{U}は直交行列で\mathbf{U}\mathbf{U}^{T}=\mathbf{I}ですから、


\mathbf{A}  =  \mathbf{U}\mathbf{\Lambda}\mathbf{U}^{T} \tag{2}

です。

式(2)より、\mathbf{A}の逆行列を考えると、逆行列の定理より


\begin{eqnarray*}
\mathbf{A}^{-1} &=& (\mathbf{U}\mathbf{\Lambda}\mathbf{U}^{T})^{-1}\tag{3} \\
&=& (\mathbf{U}^{T})^{-1}\mathbf{\Lambda}^{-1} \mathbf{U}^{-1} \tag{4}
\end{eqnarray*}

です。ここで直交行列の逆行列より、\mathbf{U}^{T}=\mathbf{U}^{-1}ですから、


\mathbf{A}^{-1}  =  \mathbf{U}\mathbf{\Lambda}^{-1}\mathbf{U}^{T} \tag{5}

です。対称行列の逆行列より、\mathbf{A}^{-1}もまた対称行列です。したがって、式(5)によって\mathbf{A}^{-1}が対角化されていることになります。つまり\mathbf{\Lambda}^{-1}\mathbf{A}^{-1}の固有値を対角成分に並べた行列であり、\mathbf{\Lambda}\mathbf{\Lambda}^{-1}=\mathbf{I}ですから


\mathbf{\Lambda}^{-1} =
\left(
    \begin{array}{ccc}
      \frac{1}{\lambda_1} &  & 0 \\
       &   \ddots &  \\
       0   &  & \frac{1}{\lambda_{n}}
    \end{array}
  \right) \tag{6}

となります。

正定値行列とは固有値が全て正である行列でした。したがって、\lambda_{i} \gt 0なら、\frac{1}{\lambda}_{i} \gt 0ですから、\mathbf{A}が正定置行列なら\mathbf{A}^{-1}もまた正定値行列となります。

正定値行列

全ての固有値が正の対称行列\mathbf{A}を正定値行列と呼びます。これは、2次形式\mathbf{x}^{T}\mathbf{A}\mathbf{x}が常に正であることと同条件です。\mathbf{A}が対称行列なら、


\mathbf{U}^{T}\mathbf{A}\mathbf{U}=\mathbf{\Lambda}\tag{1}

によって対角化できます。ここで、\mathbf{U}は固有ベクトルを並べた直交行列、\mathbf{\Lambda}は固有値を対角成分に持つ対角行列です。(参考:対称行列の対角化

ここで、


\mathbf{U}\mathbf{U}^{T}=\mathbf{I}\tag{2}

より、式(1)を変形すれば


\mathbf{A}=\mathbf{U}\mathbf{\Lambda}\mathbf{U}^{T} \tag{3}

です。式(3)より任意のベクトル\mathbf{x}に対し、


\begin{eqnarray*}
\mathbf{x}^{T}\mathbf{A}\mathbf{x} &=& \mathbf{x}^{T}\mathbf{U}\mathbf{\Lambda}\mathbf{U}^{T}\mathbf{x} \tag{4}\\
&=& \mathbf{x}^{T}\mathbf{U}\mathbf{\Lambda}(\mathbf{x}^{T}\mathbf{U})^{T} \tag{5}
\end{eqnarray*}

です。(参考:転置行列の定理

ここで、\mathbf{x}^{T}\mathbf{U}=(a_{1},\cdots,a_{n})とすれば、


\begin{eqnarray*}
式(5)&=& (a_{1},\cdots,a_{n})  \left(
    \begin{array}{ccc}
      \lambda_1 &  & 0 \\
       &   \ddots &  \\
       0   &  & \lambda_{n}
    \end{array}
  \right) 
\left(
    \begin{array}{c}
      a_{1} \\
       \vdots  \\
      a_{n}
    \end{array}
  \right) 
\tag{6}\\

&=& \sum_{i=1}^{n}\lambda_{i}a_{i}^{2} \tag{7}
\end{eqnarray*}

となります。したがって、非ゼロベクトル\mathbf{x}に対して\mathbf{x}^{T}\mathbf{A}\mathbf{x}が正なら固有値が全て正である、つまり正定値行列であるといえます。なお0を含む場合は半正定値行列と呼ばれます。

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

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


\displaystyle \Psi(\mathbf{a}_{N})=  \mathbf{t}_{N}^{T} \mathbf{a}_{N} -  \sum_{n=1}^{N} \ln (1+e^{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} を求めます。

2次形式の微分公式*1を用いれば、


\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 (1+e^{a_{n}})を微分していけばシグモイド関数が現れます。

ここで、式(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)

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

概要

前回の以下の記事の続きです。

www.iwanttobeacat.com

前回までのおさらい

訓練データ\mathbf{x}=\{\mathbf{x}_{1},\cdots,\mathbf{x}_{N} \}\mathbf{t}_{N}=(t_1,\cdots,t_{N})^{T}が与えられたとき、新たな入力\mathbf{x}_{N+1}に対するt_{N+1}=1の確率、すなわちp(t_{N+1}=1 | \mathbf{t}_{N},\mathbf{x},\mathbf{x}_{N+1} )を求めることが目標です。そしてこれは、いくつかの式変形によって以下のように表せました。


\displaystyle p(t_{N+1}=1 | \mathbf{t}_{N} )= \int \underline{ p(t_{N+1}=1 |a_{N+1} ) }p(a_{N+1}|\mathbf{t}_{N}) d a_{N+1} \tag{1}

式(1)下線部はシグモイド関数の出力 \sigma(a_{N+1})ですが、p(a_{N+1}|\mathbf{t}_{N})は解析的に求めらません。これは


\displaystyle p(a_{N+1}|\mathbf{t}_{N}) = 
\begin{align}
\int 
  \underset{A} {\underline{p(a_{N+1}|\mathbf{a}_{N}) }}
 \,
  \underset{B} {\underline{p(\mathbf{a}_{N}|\mathbf{t}_{N}) }}
 d\mathbf{a}_{N}
\end{align}
 \tag{2}

と変形することができました。さらに式(2)下線部Aは


p(a_{N+1}|\mathbf{a}_{N}) = N(a_{N+1}| \mathbf{k}^{T}\mathbf{C}_{N}^{-1}\mathbf{a}_{N}, c- \mathbf{k}^{T}\mathbf{C}_{N}^{-1}\mathbf{k}) \tag{3}

と求めることができました。そして式(2)下線部Bのp(\mathbf{a}_{N}|\mathbf{t}_{N})ラプラス近似を使うために対数をとった\Psi(\mathbf{a}_{N})を考え、それが、


\displaystyle \Psi(\mathbf{a}_{N}) = \ln  \prod_{n=1}^{N} \exp(a_{n}t_{n}) \sigma(-a_{n}) + \ln N(\mathbf{a}_{N}|\mathbf{0},\mathbf{C}_{N}) \tag{4} \\

となりました。今回はこの計算の続きで、式中の正規分布の表現Nに定義通り代入して計算するのみです。そろそろおさらいのほうが長くなってきているという。

\Psi(\mathbf{a}_{N})の計算

式(4)におけるN(\mathbf{a}_{N}|\mathbf{0},\mathbf{C}_{N})は、多変量正規分布の式をそのままあてはめれば*1


\displaystyle N(\mathbf{a}_{N}|\mathbf{0},\mathbf{C}_{N}) = \frac{1}{\sqrt{(2 \pi)^{N} \det \mathbf{C_{N}}}} \exp(-\frac{1}{2}\mathbf{a}_{N}^{T} \mathbf{C}_{N}^{-1} \mathbf{a}_{N}) \tag{5}

です。そして\sigmaはシグモイド関数ですから、式(4)は


\displaystyle \Psi(\mathbf{a}_{N}) = \ln  \prod_{n=1}^{N} \frac{\exp(a_{n}t_{n})}{1+\exp(a_{N})} + \ln \frac{1}{\sqrt{ (2 \pi)^{N} \det \mathbf{C_{N}} }} \exp(-\frac{1}{2}\mathbf{a}_{N}^{T} \mathbf{C}_{N}^{-1} \mathbf{a}_{N}) \tag{6}

です。これを展開してけば、


\begin{eqnarray*}
\displaystyle \Psi(\mathbf{a}_{N}) &=& \sum_{n=1}^{N}  \ln  \frac{e^{a_{n}t_{n}} }{1+e^{a_{n}}} + \ln \frac{1}{\sqrt{ (2 \pi)^{N} \det \mathbf{C_{N}} }} + \ln \exp(-\frac{1}{2}\mathbf{a}_{N}^{T} \mathbf{C}_{N}^{-1} \mathbf{a}_{N}) \tag{7}  \\
&=& \sum_{n=1}^{N}  \ln  e^{a_{n}t_{n}} - \sum_{n=1}^{N} \ln (1+e^{a_{n}}) - \frac{1}{2}\ln (2 \pi)^{N} \det \mathbf{C_{N}} - \frac{1}{2}\mathbf{a}_{N}^{T} \mathbf{C}_{N}^{-1} \mathbf{a}_{N} \tag{8} \\
&=& \sum_{n=1}^{N}   a_{n}t_{n} - \sum_{n=1}^{N} \ln (1+e^{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{9} \\
&=&  \mathbf{t}_{N}^{T} \mathbf{a}_{N} -  \sum_{n=1}^{N} \ln (1+e^{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{10} 
\end{eqnarray*}

です。ラプラス近似をするためには、 \nabla \Psi(\mathbf{a}_{N}^{\prime})=\mathbf{0}となる点 \mathbf{a}_{N}^{\prime} と、\nabla\nabla \Psi(\mathbf{a}_{N}^{\prime})の値が必要になります。それが求められれば、p(\mathbf{a}_{N}|\mathbf{t}_{N})


\displaystyle p(\mathbf{a}_{N}|\mathbf{t}_{N}) \simeq p(\mathbf{a}_{N}^{\prime}|\mathbf{t}_{N}) \exp \left\{  -\frac{1}{2}(\mathbf{a}_{N} - \mathbf{a}_{N}^{\prime})^{T} \mathbf{H}(\mathbf{a}_{N}-\mathbf{a}_{N}^{\prime}) \right\} \tag{11}

と近似できます。ここで\mathbf{H}=-\nabla\nabla \Psi(\mathbf{a}_{N}^{\prime})です。さらに、p(\mathbf{a}_{N}|\mathbf{t}_{N})は確率密度関数ですから、


\begin{eqnarray*}
\displaystyle p(\mathbf{a}_{N}|\mathbf{t}_{N}) &\simeq& \frac{1}{\sqrt{ (2 \pi)^{N} \det \mathbf{H}^{-1} }} \exp \left\{  -\frac{1}{2}(\mathbf{a}_{N} - \mathbf{a}_{N}^{\prime})^{T} \mathbf{H}(\mathbf{a}_{N}-\mathbf{a}_{N}^{\prime}) \right\} \tag{12}\\
&\simeq& N(\mathbf{a}_{N}|\mathbf{a}_{N}^{\prime},\mathbf{H}^{-1}) \tag{13}
\end{eqnarray*}

と書けます。

さて、 \mathbf{a}_{N}^{\prime} を求めていきたいのですが、これは解析的に求めることができないためニュートン法(多変数の場合)を使います。

続きは次回

www.iwanttobeacat.com