MLPシリーズ「深層学習」の5.5節「データの白色化」についてのまとめです。
白色化とは?
成分間(データの特徴間)の相関をなくす処理のこと。
自己符号化器が良い特徴を学習できるかどうかを大きく左右することがある。
考え方
データxの任意の2成分間で相関がなくなる、ということは
つまり、共分散行列が対角行列になれば良い、ということ。
例えば、データxが3次元だとすれば、それらのデータ郡の分散共分散行列は下記のように表せる。
この中でσ13はデータx1とx3間の相関を表している。
これらの部分が0になれば(=対角行列であれば)成分間の相関がなくなった、といえる。
では、共分散行列を対角行列にするためには何を考えたら良いのかだが、
データxnがある線形変換Pによってunに写像されるとし、
この変換後のunの共分散行列が対角行列になるようなPを考えると良いことになる。
線形変換Pの導出
まずは、「考え方」で示した部分を数式化しておく。
・データxの共分散行列
※各データの成分はそのデータの平均値を引いた処理を行っている(x - xとして処理済み)
・線形変換Pを施した後のデータun
・変換後のデータuの共分散行列
このΦU が対角行列に成ることが目標なのだが、ここで目標とする対角行列をI(=単位行列)とする。
すると、先の式はP=UXを用いて以下のように変形することができる。
※変形に
,
を用いている
そして、ΦXは固有ベクトルの定義に従って次のように分解することができる。
(固有ベクトルの定義)
ここで、EはΦXの固有ベクトルを列ベクトルに持つ行列、Dは固有値を対角成分に持つ対角行列。
更に、Eが直交行列であることから、
と書ける。
これと、先の変形した式を用いると
とPを表すことができる。
(ここ、変形手順がわかりません・・・)
ただし、
・QはPと同じサイズの任意の直交行列
・D-1/2はDの対角成分を-1/2乗したもの
Qを定める
Qは任意に与えることができますが、以下の2つを与えることが多いようです。
PCA白色化
Qを単位行列にした時の線形変換P
共有分散行列の固有ベクトルを利用することから主成分分析に似ているため、PCA白色化とよぶ。
ZCA白色化
QをEにした時の線形変換P
Pが対称行列になっていることから、ゼロ位相白色化(ZCA白色化)とよぶ。
PCA白色化,ZCA白色化どちらの場合でも、データによっては特定の成分の分散が0かとても小さい(Dの対角成分のどこかが0,もしくはとても小さい)ことがある。
この場合、D-1/2を計算する際に問題になるので、とても小さい値ε(例えば10^-6など)をDに加える。
PCA白色化とZCA白色化の違い
以下はPCA白色化とZCA白色化の射影行列Pの行ベクトルを画像化したもの
(引用:dimensionality reduction - What is the difference between ZCA whitening and PCA whitening? - Cross Validated)
ZCA白色化ではフィルタ部分に相当する画素とその他の部分の画素の差を強調するようになっている。 (オンセンタと呼ばれる)
一方,PCA白色化では画像の高周波成分を強調するようになっている。元の画像の見た目とは全く違うものになる。
以下の画像をPCA白色化,ZCA白色化したものを示す。
(元画像)
(PCA白色化)
(ZCA白色化)
白色化の具体的な用途
基本的な機械学習のアルゴリズムでは、白色化の有無によって結果が変わるようなものではない。
単位超球上に射影したデータの高密度方向を検出する場合のように、データの分布の方向のみが問題になる場合によく利用される。
更に,ZCA白色化が有効に機能する例はAEやCNNの前処理である。
ZCA白色化を施すことによってより局所的,鮮鋭的な特徴を学習することができる。
(多分)
補足
対角行列
対角成分以外が0の正方行列
共分散行列
対角成分に分散、それ以外の部分に共分散が並ぶ行列
直交行列
転置行列と逆行列が等しくなる正方行列。 MT M = M MT = Eが成り立つ。
固有値・固有ベクトル
正方行列Aに対して
が成り立つ時xを固有ベクトル,λを固有値という
固有ベクトルはあるベクトルAを方向は変えず大きさだけ変えるような線形変換を施すベクトル。
固有値はその変換の倍率を表している。