深層学習 第5章 自己符号化器

[第4章](http://qiita.com/enufranz/items/b46a2b02db3e9c26160e)に引き続き、深層学習(青イルカ本)の第5章を読み進めていきます。
本投稿(連載)を一緒に読めば事前知識なしでも読み進められる...といったものを目指しています。

# 本章の概要
本章では，自己符号化器（Autoencoder)について学ぶ。

自己符号化器とは、出力データが入力データをそのまま再現する2層のニューラルネットワークのこと。
普通は、隠れ層の次元を入力層と出力層より小さくする。

自己符号化器の使いみちは大きく2つあり、
データをよく表す「特徴」を獲得ことと、
深いニューラルネットの事前学習である。

# 本文詳細

読んでよく分からなかった点や分かりづらい点についてまとめる。

## 自己符号化器の概要

入力層から中間層への計算において、
重み行列を $W$ 、バイアスを $b$ 、活性化関数を $f$ とし、入力層に $x$ が入力された時の中間層のベクトルを $y(x)$ とすると

$$ 
y(x)=f(Wx+b)
$$ 
となる。
さらに出力を $\hat{x}(x)$ とすると、中間層から出力層への計算は、

$$
\hat{x}(x)=\tilde{f}(\tilde{W}y(x)+\hat{b})
$$

と表せる。
まとめると、 $x$ が入力された時の自己符号化器の出力 $x(x)$ は

$$
\hat{x}(x)=\hat{f}(\hat{W}f(Wx+b)+\hat{b})
$$
となる。
このとき、出力 $\hat{x}(x)$ が入力 $x$ に近いならば、
中間層の $y(x)$ は $x$ の「特徴」をより上手く抽出した符号と言える。

## データを抽出した「特徴」って何？

入力層に施して中間層を得るときの最初の変換（重み行列 $W$ ）のことを特徴という。
これは自己符号化器が学習によって求めるパラメータ。

$y$ の計算は、重み行列 $W$ と $x$ の積から始まるが、これは $W$ の各行ベクトルと $x$ との内積の計算であって、そこでは入力 $x$ に $W$ の各行ベクトルが表す成分がどれだけ含まれているか取り出していると言える。

（別の言い方をすると、）
同じデータをより少ない次元で表したときの、
その少ない次元の基底ベクトルのことを特徴という。
元の基底ベクトルの空間ではなく、$W$の行ベクトルを基底ベクトルとした空間で $x$ を見て、その空間での各成分が $y$ である。
符号化することで見る空間が変わる。

## 中間層の次元を入力層と同じにしない理由

中間層の次元が入力層の次元と同じだと、
入力の値を単純にコピーすることとなり、出力層にて入力を再現できてしまう。
つまり $\tilde{W}W = I$ となり逆行列を作れてしまうので、
xが単に恒等写像されただけになり、全く意味のないモデルになってしまう。

中間層の次元が入力層よりも小さいときには、
単位行列を $\tilde{W}W$ で表せない。

## 自己符号化器の目的は？

特徴の学習を通じて、サンプル $x$ の別な「表現」である $y$ を得ること。
ただし、何が良い表現となるかの明確な定義はない。
直感的には、$x$ をそのまま使う代わりに変換した $y$ を用いると対象とする問題がうまく解けるようなもの。
例えば、SVMを使ってクラス分類を行う場合、 $x$ をその対象とするよりも、 $y$ を用いたほうが性能が向上するなどの場合。

## 主成分分析（principal component analysis:PCA）とは？

教師なし学習の一つ。
データの分散（ばらつき）が大きいところ（主成分）を見つける操作。
分散が大きいところが大事で、小さいところは気にしないようにし、
既存の変量を組み合わせて分散が大きくなる新たな変量を見つける。

* PCAのアルゴリズム
    1. 全データの重心を求める（平均値）
    2. 重心からデータの分散（ばらつき）が最大となる方向を見つける
    3. 新しいデータ表現軸として、2.で求めた方向を基底とする
    4. 上記でとった軸と直交する方向に対して分散が最大となる方向を探す。
    5. 2.~3.をデータの次元分だけ繰り返す

* PCAの目的
    * データの特徴抽出
        * データのバラつきが大きい部分に着目することでよいデータを識別しやすくする
    * データの次元圧縮
        * データのバラつきが少ない部分はデータに共通するパターンなのであまり意味をなさない（無視）
    * 多次元特徴量の可視化
        * 多次元データは人間には認識不可
        * データのバラつきが大きところを見ることでデータの関係性を把握

## 主成分分析がなぜ分散共分散行列を対角化する固有値問題となるか？

訓練データ $x_{i} = (x_{i1},..., x_{id})^{\mathrm{T}}(i = 1,...,N)$の**分散が最大**になる方向を求める。
$N$ 個のデータからなるデータ行列: $X = (x_{1},...x_{N})^{\mathrm{T}}$
$N$ 個の訓練データの平均ベクトル: $\bar{x}=(\bar{x_{1}}...,\bar{x_{d}})^{\mathrm{T}}$
平均ベクトルを引き算したデータ行列: $\bar{X}=(x_{1} - \bar{x}....,x_{N} - \bar{x})^{\mathrm{T}}$
とすると、平均化訓練データ行列の分散は

```math
\sum = Var\{\bar{X}\} = \frac{1}{N}\bar{X}^{\mathrm{T}}\bar{X}\
```
で定義される。

単位ベクトル: $a$ = $(a_{1}...a_{d})^{\mathrm{T}}$
とすると、$N$個のデータ$x_i - \bar{x}$の単位ベクトル $a$ への正射影は

```math
s_i = (s_{1},....s_{d})^{\mathrm{T}} = \bar{Xa}
```
となる。
この変換後のデータの分散は、

```math
Var\{{s}\} = \frac{1}{N}{s}^Ts = \frac{1}{N}(\bar{Xa})^{\mathrm{T}}(\bar{Xa}) = \frac{1}{N}{a}^T\bar{X}^{\mathrm{T}}\bar{Xa} = a^TVar\{{\bar{X}\}}a \
```
となる。この分散が最大となる単位ベクトル $a$ は、係数ベクトル$a_j$のノルムを1となる制約があること利用して、
ラグランジェの未定乗数法を使って求める。

```math
E(a) = a^TVar\{{\bar{X}\}}a - \lambda(a^T a - 1)
```
を最大にする$a$を見つければよい、$\lambda$はラグランジェ未定定数である、$a$で微分して0としておけば、

$\frac{\partial E(a)}{\partial a} = 2Var\{{\bar{X}\}}a - 2\lambda a = 0 $より$Var \\{\bar{X}\\}a = \lambda a$ 

となる
この式は元のデータの共分散行列に関する**固有値問題**を解くことに等しいので、
分散最大となる単位ベクトル $a$ は固有値問題を解けば得られることを示している。

## スパース正則化とは？

いくつかの中間ユニットの出力をゼロにする。
そうなるように学習するよう操作する。

## KL

カルバック・ライブラーダイバージェンス（カルバック・ライブラー情報量、カルバック距離）
http://www.aoni.waseda.jp/y.fujimoto/index_files/r_mle.html


# 白色化

白色化の狙いは訓練サンプルの成分間の相関をなくすこと。
すなわち $D$ 次元空間にあるサンプル $x = [x_1, ..., x_D] の任意の二成分 $x_p$ と $x_q$ 間の相関がなくなるようにする。
訓練サンプルの成分間の相関は共分散行列で表せる。

$$
\Phi_X \equiv \frac{1}{N} \sum_{n=1}^{N} x_n x_n^T = \frac{1}{N}XX^T
$$

ここで $X = [x_1, ..., x_N]$ とする

「成分間で相関がある状態＝非対角成分が0でない」となるため、  
対角成分を0にするように変換を施す。  
そこで、各サンプルに $D * D$行列$P$による線形変換

$$
u_n = Px_n
$$

としたとき、変換後の ${u_n}$ の共分散行列

$$
\Phi_X \equiv \frac{1}{N} \sum_{n=1}^{N} u_n u_n^T = \frac{1}{N}UU^T
$$

が対角行列になるようにPを定める。  
よくある対角化の問題と一緒。

このとき $P$ が満たすべき式は、 $U = PX$ を代入すると
$$ P^T P = \Phi_X^{-1} $$
となる。
このとき、$\Phi$ は対称行列であり、
対称行列はは直交行列で対角化可能なので、固有値、固有ベクトルを用いて、
$$ \Phi_X = E D E ^T $$
と表せる。ただし、 $D$ は $\Phi_X$ の固有値 $\lambda_1, ... \lambda_D$ を対角成分に持つ対角行列。
$E$ は直交行列。
$$ \Phi_X^{-1}  E D^{-1} E^T $$
と変形でき、これが $P^T P$ に一致するので、求める $P$ は、

$$ P = Q D^{-1/2} E^T $$

## ゼロ位相白色化

$Q = E$ とするとなぜ $P P^T$ が導かれるのかがわからない。
このとき、 
$$ P_{ZCA} = E D^{-1/2} E^T $$
となる。