データの白色化 (1/2)

ディープラーニングの教科書として、岡谷貴之「深層学習」を読んでいます。
一巡目は、タイトルの項目が数式の嵐で、飛ばしてしまっていましたので、ひとつひとつ理解してみることにしました。なお、ここで使う記号は、上記の本に準拠します。

白色化とは

【訓練サンプルの成分間の相関をなくす目的】で行う処理です。オートエンコーダの説明の文脈で登場する内容で、よりよい特徴を獲得するための処理として扱われています。

サンプルの特徴量が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\)ですでに総和が求められていることがわかります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です