1. 程式人生 > >CS229 6.7 Neurons Networks whitening

CS229 6.7 Neurons Networks whitening

PCA的過程結束後,還有一個與之相關的預處理步驟,白化(whitening)

對於輸入資料之間有很強的相關性,所以用於訓練資料是有很大冗餘的,白化的作用就是降低輸入資料的冗餘,通過白化可以達到(1)降低特徵之間的相關性(2)所有特徵同方差,白化是需要與平滑與PCA結合的,下邊來看如何結合。

對於訓練資料{\textstyle x^{(i)}},找到其所有特徵組成的新基U,計算在新基的座標 \textstyle x_{\rm rot}^{(i)} = U^Tx^{(i)},這裡\textstyle x_{\rm rot}就會消除資料的相關性:

這個資料的協方差矩陣如下:

\textstyle x_{\rm rot} 協方差矩陣對角元素的值為 \textstyle \lambda_1 和 \textstyle \lambda_2 ,且非對角線元素取值為0,課件不同緯度的特徵之間是不相關的,對應的 \textstyle x_{{\rm rot},1}

 和 \textstyle x_{{\rm rot},2} 是不相關的,這便滿足白化的第一個要求,降低相關性,下面就要使特徵之間同方差(注意是變化後的特徵同方差\textstyle x_{\rm rot}\textstyle x_{\rm rot}中每個特徵 i 的方差為 \textstyle \lambda_i 我們可以直接使用 \textstyle 1/\sqrt{\lambda_i} 作為縮放因子來縮放每個特徵 \textstyle x_{{\rm rot},i} 。具體地,我們定義白化後的資料 \textstyle x_{{\rm PCAwhite}} \in \Re^n 如下:

\begin{align}
x_{{\rm PCAwhite},i} = \frac{x_{{\rm rot},i} }{\sqrt{\lambda_i}}.   
\end{align}

繪製出 \textstyle x_{{\rm PCAwhite}} ,可以得到:

PCA-whitened.png

這些資料現在的協方差矩陣為單位矩陣 \textstyle I 。\textstyle x_{{\rm PCAwhite}} 是資料經過PCA白化後的版本: \textstyle x_{{\rm PCAwhite}} 中不同的特徵之間不相關並且具有單位方差。

白化與降維相結合。 如果你想要得到經過白化後的資料,並且比初始輸入維數更低,可以僅保留 \textstyle x_{{\rm PCAwhite}}

 中前 \textstyle k 個成分。當我們把PCA白化和正則化結合起來時(在稍後討論),\textstyle x_{{\rm PCAwhite}} 中最後的少量成分將總是接近於0,因而捨棄這些成分不會帶來很大的問題。

最後要說明的是,使資料的協方差矩陣變為單位矩陣 \textstyle I 的方式並不唯一。具體地,如果 \textstyle R 是任意正交矩陣,即滿足 \textstyle RR^T = R^TR = I (說它正交不太嚴格,\textstyle R 可以是旋轉或反射矩陣), 那麼 \textstyle R \,x_{\rm PCAwhite} 仍然具有單位協方差。在ZCA白化中,令 \textstyle R = U 。定義ZCA白化的結果為:

\begin{align}
x_{\rm ZCAwhite} = U x_{\rm PCAwhite}
\end{align}

繪製 \textstyle x_{\rm ZCAwhite},得到:

ZCA-whitened.png

可以證明,對所有可能的 \textstyle R,這種旋轉使得 \textstyle x_{\rm ZCAwhite}

 儘可能地接近原始輸入資料 \textstyle x 。

當使用 ZCA白化時(不同於 PCA白化),我們通常保留資料的全部 \textstyle n 個維度,不嘗試去降低它的維數。

實踐中需要實現PCA白化或ZCA白化時,有時一些特徵值 \textstyle \lambda_i 在數值上接近於0,這樣在縮放步驟時我們除以 \sqrt{\lambda_i} 將導致除以一個接近0的值;這可能使資料上溢 (賦為大數值)或造成數值不穩定。因而在實踐中,我們使用少量的正則化實現這個縮放過程,即在取平方根和倒數之前給特徵值加上一個很小的常數 \textstyle \epsilon

\begin{align}
x_{{\rm PCAwhite},i} = \frac{x_{{\rm rot},i} }{\sqrt{\lambda_i + \epsilon}}.
\end{align}

當 \textstyle x 在區間 \textstyle [-1,1] 上時, 一般取值為 \textstyle \epsilon \approx 10^{-5}

對影象來說, 這裡加上 \textstyle \epsilon ,對輸入影象也有一些平滑(或低通濾波)的作用。這樣處理還能消除在影象的畫素資訊獲取過程中產生的噪聲,改善學習到的特徵。