JKになりたい

何か書きたいことを書きます。主にWeb方面の技術系記事が多いかも。

データの白色化

MLPシリーズ「深層学習」の5.5節「データの白色化」についてのまとめです。

白色化とは?

成分間(データの特徴間)の相関をなくす処理のこと。
自己符号化器が良い特徴を学習できるかどうかを大きく左右することがある。

考え方

データxの任意の2成分間で相関がなくなる、ということは
つまり、共分散行列が対角行列になれば良い、ということ。

例えば、データxが3次元だとすれば、それらのデータ郡の分散共分散行列は下記のように表せる。

f:id:deeptoneworks:20161017152802p:plain

この中でσ13はデータx1とx3間の相関を表している。
これらの部分が0になれば(=対角行列であれば)成分間の相関がなくなった、といえる。

では、共分散行列を対角行列にするためには何を考えたら良いのかだが、
データxnがある線形変換Pによってun写像されるとし、
この変換後のunの共分散行列が対角行列になるようなPを考えると良いことになる。
f:id:deeptoneworks:20161017153613p:plain

線形変換Pの導出

まずは、「考え方」で示した部分を数式化しておく。

・データxの共分散行列
f:id:deeptoneworks:20161017155608p:plain
※各データの成分はそのデータの平均値を引いた処理を行っている(x - xとして処理済み)

・線形変換Pを施した後のデータun
f:id:deeptoneworks:20161017153613p:plain

・変換後のデータuの共分散行列
f:id:deeptoneworks:20161017155859p:plain

このΦU が対角行列に成ることが目標なのだが、ここで目標とする対角行列をI(=単位行列)とする。

すると、先の式はP=UXを用いて以下のように変形することができる。

f:id:deeptoneworks:20161017160933p:plain

※変形に
f:id:deeptoneworks:20161017161206p:plain,f:id:deeptoneworks:20161017161217p:plain
を用いている

そして、ΦX固有ベクトルの定義に従って次のように分解することができる。
f:id:deeptoneworks:20161017161752p:plain
固有ベクトルの定義)
f:id:deeptoneworks:20161020231606p:plain

ここで、EはΦX固有ベクトルを列ベクトルに持つ行列、Dは固有値を対角成分に持つ対角行列。

更に、Eが直交行列であることから、
f:id:deeptoneworks:20161018052705p:plain
と書ける。

これと、先の変形した式を用いると
f:id:deeptoneworks:20161017212508p:plain
とPを表すことができる。
(ここ、変形手順がわかりません・・・)

ただし、
・QはPと同じサイズの任意の直交行列
・D-1/2はDの対角成分を-1/2乗したもの

Qを定める

Qは任意に与えることができますが、以下の2つを与えることが多いようです。

PCA白色化

Qを単位行列にした時の線形変換P
f:id:deeptoneworks:20161017213234p:plain

共有分散行列の固有ベクトルを利用することから主成分分析に似ているため、PCA白色化とよぶ。

ZCA白色化

QをEにした時の線形変換P
Pが対称行列になっていることから、ゼロ位相白色化(ZCA白色化)とよぶ。
f:id:deeptoneworks:20161017220707p:plain

PCA白色化,ZCA白色化どちらの場合でも、データによっては特定の成分の分散が0かとても小さい(Dの対角成分のどこかが0,もしくはとても小さい)ことがある。
この場合、D-1/2を計算する際に問題になるので、とても小さい値ε(例えば10^-6など)をDに加える。
f:id:deeptoneworks:20161017221147p:plain

PCA白色化とZCA白色化の違い

以下はPCA白色化とZCA白色化の射影行列Pの行ベクトルを画像化したもの
(引用:dimensionality reduction - What is the difference between ZCA whitening and PCA whitening? - Cross Validated)

f:id:deeptoneworks:20161017224126p:plain

ZCA白色化ではフィルタ部分に相当する画素とその他の部分の画素の差を強調するようになっている。 (オンセンタと呼ばれる)
一方,PCA白色化では画像の高周波成分を強調するようになっている。元の画像の見た目とは全く違うものになる。

以下の画像をPCA白色化,ZCA白色化したものを示す。
f:id:deeptoneworks:20161017225917p:plain
(元画像)

f:id:deeptoneworks:20161017230128p:plain
(PCA白色化)

f:id:deeptoneworks:20161017230200p:plain
(ZCA白色化)

白色化の具体的な用途

基本的な機械学習アルゴリズムでは、白色化の有無によって結果が変わるようなものではない。
単位超球上に射影したデータの高密度方向を検出する場合のように、データの分布の方向のみが問題になる場合によく利用される。

更に,ZCA白色化が有効に機能する例はAEやCNNの前処理である。
ZCA白色化を施すことによってより局所的,鮮鋭的な特徴を学習することができる。 (多分)

(参考) stats.stackexchange.com

補足

対角行列

対角成分以外が0の正方行列

共分散行列

対角成分に分散、それ以外の部分に共分散が並ぶ行列

直交行列

転置行列と逆行列が等しくなる正方行列。 MT M = M MT = Eが成り立つ。

固有値固有ベクトル

正方行列Aに対して f:id:deeptoneworks:20161018033521p:plain が成り立つ時xを固有ベクトル,λを固有値という
固有ベクトルはあるベクトルAを方向は変えず大きさだけ変えるような線形変換を施すベクトル。
固有値はその変換の倍率を表している。