教程地址:斯坦福深度學習
php
維基百科給出的描述是:
git
即對數據作白化處理必須知足兩個條件:
github
使數據的不一樣維度去相關;算法
使數據每一個維度的方差爲1;網絡
條件1要求數據的協方差矩陣是個對角陣;條件2要求數據的協方差矩陣是個單位矩陣。學習
教程給出的解釋是:
spa
假設訓練數據是圖像,因爲圖像中相鄰像素之間具備很強的相關性,因此用於訓練時輸入是冗餘的。白化的目的就是下降輸入的冗餘性。.net
好比在獨立成分分析(ICA)中,對數據作白化預處理能夠去除各觀測信號之間的相關性,從而簡化了後續獨立份量的提取過程,並且,一般狀況下,數據進行白化處理與不對數據進行白化處理相比,算法的收斂性較好。htm
我曾在 這篇 文章裏詳細介紹了 PCA 的原理。blog
給定訓練數據集(假設每一個特徵都具備零均值):
n 是數據維度;m 是樣本個數。
數據的協方差矩陣爲:
對協方差矩陣作奇異值分解:
U 是 Σ 的特徵向量矩陣,S 是其特徵值矩陣;由於 Σ 是對稱方陣,因此 V=U',Σ=USV。
PCA 白化的定義以下:
其中,Xrotate 就是原數據在主成分軸上的投影,而 S^(-1/2) 至關於對每個主軸上的數據作一個縮放,縮放因子就是除以對應特徵值的平方根。
因此:
上式第 2 步是把 XPCAwhite 表達式帶入獲得的;第 3 步利用了矩陣 S 是對角陣的特性;第 4 步是將 Σ 做奇異值分解獲得的;第 5 步利用了 U 是酉矩陣的性質(U'U=UU'=I)。
可見數據在通過 PCA 白化之後,其協方差矩陣是一個單位矩陣,即各維度變得不相關,且每一個維度方差都是 1。
教程裏給 ZCA 白化的定義是:
至關於將通過 PCA 白化後的數據從新變換回原來的空間。
因此:
可見 ZCA 白化也是一個合法的白化。
如何理解二者之間的關係?
首先,PCA 白化將原數據變換(投影)到主成分軸上,這一步消除了特徵之間的相關性;
其次,PCA 白化對每個主成分軸上的數據進行縮放,使其方差爲 1;
由於以上的線性變換是在主成分空間中完成的,爲了使白化後的數據儘量接近原數據,能夠把處理過的數據再變換回原空間,也就是 ZCA 白化。
ZCA 白化的全稱是 Zero-phase Component Analysis Whitening。我對【零相位】的理解就是,相對於原來的空間(座標系),白化後的數據並無發生旋轉(座標變換)。
放一張來自網絡的圖片幫助讀者直觀理解:
*圖片來自 這裏
在實踐中,PCA 與 ZCA 白化都須要被正則化(Regularization)。即在縮放這個步驟以前,給每個特徵值先加上一個正則化項:
教程給出的緣由有兩個:
有時一些特徵值在數值上接近0,在縮放步驟時將致使除以一個接近0的值;這可能使數據上溢或形成數值不穩定;
對圖像來講,正則化項對輸入圖像也有一些平滑去噪(或低通濾波)的做用,可改善學習到的特徵。
以 PCA 白化爲例,通過正則化的數據協方差矩陣爲:
至關於減少了每一個像素的不肯定性(方差)。
關於低通濾波,能夠這樣理解:
最簡單的低通濾波就是把一個像素的色值替換爲其周圍像素色值的算術平均。能夠想象,通過處理以後的圖像色彩變化更平緩,圖像變得更模糊。
爲何要這樣作?首先,數字圖像老是伴隨着噪點。其次,噪點老是伴隨着色值的劇烈變化,由於每一個噪點都是獨立產生的。可是原圖像的像素之間並非獨立的,表現爲多像素構成的「色塊」。
低通濾波器對「劇烈的"、"高頻的」變化更敏感,因此它對噪音的影響大於對原圖像的影響。通過低通濾波處理的圖像能夠展現出本來被噪音掩蓋的細節。
這篇文章 對低通濾波的解釋很直觀。
此次提交了 3 組代碼:
pca_2d 和 pca_exercise 是教程的做業;pca_vs_zca 是我編寫的用來對兩者做比較的代碼。
代碼不復雜,因此這裏直接給出 pca_vs_zca 的運行結果:
圖1:原始數據
圖2:零均值化之後的數據
圖3:PCA 白化所使用的基
圖4:ZCA 白化所使用的基:
本例使用的圖片尺寸均爲 12×12,數據具備 144 個維度,能夠認爲ZCA 白化的每個基都處於其中一個維度(一個像素),即 ZCA 白化針對原數據每個維度分別提取特徵,而 PCA 白化是針對進行主成分變換後的數據的每個維度提取特徵,前者是高度局部化的,後者着眼於全局。
圖5:PCA 白化後的數據
圖6:ZCA 白化後的數據:
顯然 ZCA 白化相比 PCA 白化更接近原數據。