KDOG Notebook

どうも、古くからの友人です。

データの前処理〜白色化 その1〜

はじめに

白色化(Whitening)は生データの要素間の相関をなくし、さらに分散の正規化を前処理として実行することで学習の効率化を狙うものである。

理論

 D次元空間における正規化されたデータ${\bf x}$

$$ {\bf x} = [ x_1 \cdots x_D ] $$

 N個あるデータセット$ X = [ {\bf x}_1 \cdots {\bf x}_N ] $を考える。

 Xの分散共分散行列 \Phi_X

 \begin{eqnarray}
\Phi_X \equiv \frac{1}{N} \sum_{n=1}^{N} {\bf x}_n {\bf x}_n^T = \frac{1}{N} {\rm X}{\rm X}^T
\end{eqnarray}

である。ここで各データに対して D \times D行列 {\rm P}による線形変換

 \begin{eqnarray}
{\bf u} = {\rm P}{\bf x}
\end{eqnarray}

を実行すると、 {\rm U} = [{\bf u}_1 \cdots {\bf u}_N ]の分散共分散行列 \Phi_{U}

 \begin{eqnarray}
\Phi_U \equiv \frac{1}{N} \sum_{n=1}^{N} {\bf u}_n {\bf u}_n^T = \frac{1}{N} {\rm U}{\rm U}^T
\end{eqnarray}

となる。 \Phi_U単位行列になるように {\rm P}を定めると

 \begin{eqnarray}
\Phi_U = \frac{1}{N} {\rm PXX}^T {\rm P}^T = {\rm P}\Phi_X {\rm P}^T
\end{eqnarray}

すなわち

 \begin{eqnarray}
{\rm P}^T{\rm P} = \Phi_X^{-1} \tag{1}
\end{eqnarray}

が得られる。

また、 \Phi_Xは対角化可能で

 \begin{eqnarray}
\Phi_X = {\rm A} \frac{1}{\Omega} {\rm A}^T
\end{eqnarray}

である。ただし

$$ \begin{eqnarray} \Omega = \left( \begin{array}{ccc} \omega_{1}^{2} && \\ &\ddots& \\ && \omega_{D}^{2} \end{array} \right) \end{eqnarray} $$

 \begin{eqnarray}
{\rm A} = ({\bf a}_1 \cdots {\bf a}_D)
\end{eqnarray}

ここで、 \omega_{\alpha}^2 \ (\alpha=1,\cdots ,D)および {\bf a}_{\alpha} \ (\alpha=1,\cdots ,D)はそれぞれ固有値固有ベクトルである。

 {\bf A}は直行行列( {\bf A}^T{\bf A}={\bf A}{\bf A}^T={\bf I})であるから

 \begin{eqnarray}
\Phi_X^{-1} = {\bf A} \Omega {\bf A}^T \tag{2}
\end{eqnarray}

と書ける。したがって、式(1)および(2)より

 \begin{eqnarray}
{\bf P}^T{\bf P} = {\bf A} \Omega {\bf A}^T
\end{eqnarray}
 \begin{eqnarray}
{\bf P} = {\bf Q} {\sqrt \Omega} {\bf A}^T
\end{eqnarray}

が得られる。ただし、 {\bf Q}は任意の直行行列( {\bf Q}^T{\bf Q}={\bf Q}{\bf Q}^T={\bf I})である。

ここで、${\bf Q}={\bf I}$とおいたときの${\bf P}_{PCA}$を用いた白色化をPCA Whiteningと呼ぶ。

$$ {\bf P}_{PCA} = \sqrt{\Omega}{\bf A}^T $$

また、${\bf Q}={\bf A}$とおいたときの${\bf P}_{ZCA}$を用いた白色化をZCA Whiteningと呼ぶ。

$$ {\bf P}_{ZCA} = {\bf A} \sqrt{\Omega}{\bf A}^T $$

PCA whiteningではデータの要素間の相関が失われることになるが、ZCA whiteningでは固有ベクトル${\bf A}$による線形変換を行うことで元データ${\bf x}$の空間へ再び射影することになる。

実装と検証は次回以降…

参考文献

岡谷貴之, 「深層学習」第5章, 講談社, 2017.