ディープラーニングの教科書として、岡谷貴之「深層学習」を読んでいます。
一巡目は、タイトルの項目が数式の嵐で、飛ばしてしまっていましたので、ひとつひとつ理解してみることにしました。なお、ここで使う記号は、上記の本に準拠します。
白色化とは
【訓練サンプルの成分間の相関をなくす目的】で行う処理です。オートエンコーダの説明の文脈で登場する内容で、よりよい特徴を獲得するための処理として扱われています。
サンプルの特徴量がD次元で表されるとした場合、\(x=[x_1, …., x_d]\)の任意の2成分\(x_p, x_q\)の間の相関をなくすことを意味します。
例えば、\(x_p\)が増えると\(x_q\)も増える、という関係がある場合、\(x_p\)と\(x_q\)のどちらかで十分ではないか、ということでしょう。
特徴量はデータを端的に表現するためのものですが、相関があるということは、うまく特徴を取れていないことを意味します。
後々出てきますが、これは主成分分析と似た考えを持っています。情報をもっとも効率よく圧縮するにはどうすればよいか、という観点です。
共分散行列
白色化を行うには共分散行列を使います。
共分散行列とは、ベクトル間の相関関係を表す行列で、以下のようなものです。
$$\Sigma = \begin{pmatrix}
\sigma^2_1 & \sigma_{12} \\
\sigma_{12} & \sigma^2_2 \\
\end{pmatrix}$$
ここで、
\(\sigma^2_1\):\(x_1\)の分散
\(\sigma^2_2\):\(x_2\)の分散
\(\sigma_{21}\):\(x_1\)と\(x_2\)の共分散 を表します。
分散・共分散
ここで出てきた、分散・共分散について確認します。
分散
\(\sigma^2_1 = (x_1-\overline{x_1})^2\)で表され、平均値に比べてどのくらい散らばりがあるかを表します。
共分散
\(\sigma_{12} = (x_1-\overline{x_1}) \times (x_2-\overline{x_2})\)で表され、\(x_1\)と\(x_2\)の散らばり具合の相関を表します。
つまり、分散で成分ごとの散らばり具合を、共分散で成分間の相関を見ることができます。
なお、共分散行列はn*nの大きさでも同じ構造で表すことができます。
$$\Sigma =
\begin{pmatrix}
\sigma^2_1 & \sigma_{12} & \cdots & \sigma_{1n}\\
\sigma_{21} & \sigma^2_2 & \cdots & \sigma_{2n}\\
\vdots & \vdots & \ddots & \vdots\\
\sigma_{n1} & \sigma_{n2} & \cdots & \sigma^2_n\\
\end{pmatrix}$$
対角成分が分散、それ以外の成分が共分散で構成される対称行列(*)であることがわかります。
* \((x_1-\overline{x_1}) \times (x_2-\overline{x_2}) = (x_2-\overline{x_2}) \times (x_1-\overline{x_1})\) ですので、対角成分以外はひっくり返しても同じになりますね。
全サンプルの共分散行列
では、D次元の特徴空間からなるN個のデータがあるとします。
\({\bf\it{X}}_1, {\bf\it{X}}_2, …, {\bf\it{X}}_N\)
ここで、
\({\bf\it{x}} = [x_1, x_2, …, x_D]\) です。
このN個のサンプルの分散、共分散の平均(\(\Phi_x\))を式で表すと、以下のようになります。
$$\Phi_x \equiv \frac{1}{N} \sum_{n=1}^N {\bf\it{x}}_n{\bf\it{x}}_n^T = \frac{1}{N} {\bf\it{X}}{\bf\it{X}}^T$$
ちょっとわかりにくいので、少し内容を見てみましょう。
まずは、\(\frac{1}{N} \sum^N_{n=1} \bf\it{x}_n \bf\it{x}_n^T\)の項について。これは、データ単位での表現です。
\(\bf\it{x}=(x_1, …, x_D)\)なので、(説明のため、\(n\)番目のデータの場合、\({\bf\it{x}_n} = (x^n_1, x^n_2, …, x^n_D)\)と書きます)
$$ \frac{1}{N} \sum^N_{n=1}{\bf\it{x}}_n{\bf\it{x}}_n^T = \frac{1}{N} \sum^N_{n=1}\begin{pmatrix}
x^n_1\\
\vdots \\
x^n_D \\
\end{pmatrix}\begin{pmatrix}
x^n_1 & \cdots & x^n_D \\
\end{pmatrix} = \begin{pmatrix}
x^n_1 x^n_1 & \cdots & x^n_D x^n_D \\
\vdots & \ddots & \vdots \\
x^n_1 x^n_D & \cdots & x^n_D x^n_D\\
\end{pmatrix}$$
なので、以下のように書けます。
$$ \frac{1}{N} \sum^N_{n=1}{\bf\it{x}}_n{\bf\it{x}}_n^T = \frac{1}{N} \sum^N_{n=1}\begin{pmatrix}
(\sigma^n_1)^2 & \cdots & \sigma^n_{D1} \\
\vdots & \ddots & \vdots \\
\sigma^n_{D1} & \cdots & (\sigma^n_D)^2\\
\end{pmatrix} $$
1つのデータに対する共分散行列の総和をとって、\(N\)で割っていますので、共分散行列の平均値になることはすぐにわかります。
続いて、\(\frac{1}{N} {\bf\it{X}}{\bf\it{X}}^T\)について考えてみます。 こちらは、\(\bf\it{X}=(\bf\it{x}_1,…,\bf\it{x}_n)\)なので、全データをまとめている表現しているということになります。
$$\frac{1}{N} {\bf\it{X}}{\bf\it{X}}^T =
\begin{pmatrix}
x_1^1 & \cdots & x_1^N \\
\vdots & \ddots & \vdots \\
x_1^D & \cdots & x_D^N \\
\end{pmatrix}
\begin{pmatrix}
x_1^1 & \cdots & x_1^D \\
\vdots & \ddots & \vdots \\
x_1^N & \cdots & x_D^N\\
\end{pmatrix}
= \begin{pmatrix}
x_1^1 \times x_1^1+\cdots + x_1^N \times x_1^N & \cdots & x_1^1 \times x_D^1+\cdots + x_1^N \times x_D^N \\
\vdots & \ddots & \vdots \\
x_D^1 \times x_1^1 + \cdots +x_D^N \times x_1^N& \cdots & x_D^1 \times x_D^1 + \cdots x_D^N \times x_D^N\\
\end{pmatrix}$$
となり、\(\bf\it{XX}^T\)ですでに総和が求められていることがわかります。