深度學習基礎(五)—— 數據預處理

1 PCA

主成分分析法,一般用於數據降維。WHY?
圖像中相鄰的像素高度相關,輸入數據是有一定冗餘的。具體來說,假如我們正在訓練的16x16灰度值圖像,記爲一個256維向量 x256 ,其中特徵值 xj 對應每個像素的亮度值。由於相鄰像素間的相關性,PCA算法可以將輸入向量轉換爲一個維數低很多的近似向量,而且誤差非常小。

1.1 PCA實例

數據:
這裏寫圖片描述
這些數據已經進行了預處理,使得每個特徵x1x2 具有相同的均值(零)和方差。PCA算法將尋找一個低維空間來投影我們的數據。從下圖中可以看出,u1 是數據變化的主方向,而 u2 是次方向。
這裏寫圖片描述

也就是說,數據在u1 方向上的變化要比在 u2 方向上大。爲更形式化地找出方向 u1u2 ,我們首先計算出矩陣Σ ,如下所示:

Σ=1mmi=1(x(i))(x(i))T.
假設x 的均值爲零,那麼Σ 就是x的協方差矩陣。可以證明,數據變化的主方向u1 就是協方差矩陣Σ 的主特徵向量,而 u2 是次特徵向量。
先計算出協方差矩陣Σ 的特徵向量,按列排放,而組成矩陣U

U=[|||u1u2un|||]
此處,u1 是主特徵向量(對應最大的特徵值),u2 是次特徵向量。以此類推,另記 λ1,λ2,,λn 爲相應的特徵值。

在本例中,向量 u1u2 構成了一個新基,可以用來表示數據。令 x2 爲訓練樣本,那麼 uT1x 就是樣本點 x 在維度u1 上的投影的長度(幅值)。同樣的,uT2xx 投影到u2 維度上的幅值。

1.2 旋轉數據

可以把x(u1,u2) 基表達爲:
xrot=UTx=[uT1xuT2x]
(下標“rot”來源於單詞“rotation”,意指這是原數據經過旋轉(也可以說成映射)後得到的結果)。
對數據集中的每個樣本 i 分別進行旋轉: x(i)rot=UTx(i) for every i ,然後把變換後的數據 xrot 顯示在座標圖上,可得:
這裏寫圖片描述
這就是把訓練數據集旋轉到 u1u2 基後的結果。一般而言,運算 UTx 表示旋轉到基 u1,u2,...,un 之上的訓練數據。矩陣 U 有正交性,即滿足 UTU=UUT=I ,所以若想將旋轉後的向量xrot 還原爲原始數據x ,將其左乘矩陣U 即可:x=Uxrot , 驗算一下: Uxrot=UUTx=x.

1.3 數據降維

數據的主方向就是旋轉數據的第一維 xrot,1 。因此,若想把這數據降到一維,可令:

˜x(i)=x(i)rot,1=uT1x(i).
更一般的,假如想把數據 xn 降到 k 維表示 ˜xk (令 k<n ),只需選取xrot 的前 k 個成分,分別對應前k 個數據變化的主方向。

PCA的另外一種解釋是:xrot 是一個 n 維向量,其中前幾個成分可能比較大(例如,上例中大部分樣本第一個成分 x(i)rot,1=uT1x(i) 的取值相對較大),而後面成分可能會比較小(例如,上例中大部分樣本的 x(i)rot,2=uT2x(i) 較小)。

PCA算法做的其實就是丟棄xrot 中後面(取值較小)的成分,就是將這些成分的值近似爲零。具體的說,設 ˜xxrot 的近似表示,那麼將 xrot 除了前k 個成分外,其餘全賦值爲零,就得到:

˜x=[xrot,1xrot,k00][xrot,1xrot,kxrot,k+1xrot,n]=xrot
在本例中,可得 \textstyle \tilde{x} 的點圖如下(取 \textstyle n=2, k=1 ):
這裏寫圖片描述

然而,由於上面 \textstyle \tilde{x} 的後\textstyle n-k 項均爲零,沒必要把這些零項保留下來。所以,我們僅用前 \textstyle k 個(非零)成分來定義 \textstyle k 維向量 \textstyle \tilde{x}

這也解釋了我們爲什麼會以 \textstyle u_1, u_2, \ldots, u_n 爲基來表示數據:要決定保留哪些成分變得很簡單,只需取前 \textstyle k 個成分即可。這時也可以說,我們“保留了前 \textstyle k 個PCA(主)成分”。

1.4 還原近似數據

給定 \textstyle \tilde{x} ,我們應如何還原原始數據 \textstyle x 呢?
只需 \textstyle x = U x_{\rm rot} 即可,我們把 \textstyle \tilde{x} 看作將 \textstyle x_{\rm rot} 的最後 \textstyle n-k 個元素被置0所得的近似表示,因此如果給定 \textstyle \tilde{x} \in \Re^k ,可以通過在其末尾添加 \textstyle n-k 個0 來得到對 \textstyle x_{\rm rot} \in \Re^n 的近似,最後,左乘 \textstyle U 便可近似還原出原數據 \textstyle x 。具體來說,計算如下:
\hat{x} = U \begin{bmatrix} \tilde{x}_1 \\ \vdots \\ \tilde{x}_k \\ 0 \\ \vdots \\ 0 \end{bmatrix} = \sum_{i=1}^k u_i \tilde{x}_i.
上面的等式基於先前對 \textstyle U 的定義。在實現時,我們實際上並不先給 \textstyle \tilde{x} 填0然後再左乘 \textstyle U ,因爲這意味着大量的乘0運算。我們可用 \textstyle \tilde{x} \in \Re^k 來與 \textstyle U 的前 \textstyle k 列相乘,即上式中最右項,來達到同樣的目的。將該算法應用於本例中的數據集,可得如下關於重構數據 \textstyle \hat{x} 的點圖:
這裏寫圖片描述
由圖可見,我們得到的是對原始數據集的一維近似重構。

在訓練自動編碼器或其它無監督特徵學習算法時,算法運行時間將依賴於輸入數據的維數。若用 \textstyle \tilde{x} \in \Re^k 取代 \textstyle x 作爲輸入數據,那麼算法就可使用低維數據進行訓練,運行速度將顯著加快。對於很多數據集來說,低維表徵量 \textstyle \tilde{x} 是原數據集的極佳近似,因此在這些場合使用PCA是很合適的,它引入的近似誤差的很小,卻可顯著地提高你算法的運行速度。

1.5 選擇主成分個數

我們該如何選擇 \textstyle k ,即保留多少個PCA主成分?在上面這個簡單的二維實驗中,保留第一個成分看起來是自然的選擇。對於高維數據來說,做這個決定就沒那麼簡單:如果 \textstyle k 過大,數據壓縮率不高,在極限情況 \textstyle k=n 時,等於是在使用原始數據(只是旋轉投射到了不同的基);相反地,如果 \textstyle k 過小,那數據的近似誤差太太。

決定 \textstyle k 值時,我們通常會考慮不同 \textstyle k 值可保留的方差百分比。具體來說,如果 \textstyle k=n ,那麼我們得到的是對數據的完美近似,也就是保留了100%的方差,即原始數據的所有變化都被保留下來;相反,如果 \textstyle k=0 ,那等於是使用零向量來逼近輸入數據,也就是隻有0%的方差被保留下來。

一般而言,設 \textstyle \lambda_1, \lambda_2, \ldots, \lambda_n 表示 \textstyle \Sigma 的特徵值(按由大到小順序排列),使得 \textstyle \lambda_j 爲對應於特徵向量 \textstyle u_j 的特徵值。那麼如果我們保留前 \textstyle k 個成分,則保留的方差百分比可計算爲:

\begin{align} \frac{\sum_{j=1}^k \lambda_j}{\sum_{j=1}^n \lambda_j}. \end{align}
在上面簡單的二維實驗中,\textstyle \lambda_1 = 7.29 ,\textstyle \lambda_2 = 0.69 。因此,如果保留 \textstyle k=1 個主成分,等於我們保留了 \textstyle 7.29/(7.29+0.69) = 0.913 ,即91.3%的方差。

以處理圖像數據爲例,一個慣常的經驗法則是選擇 \textstyle k 以保留99%的方差,換句話說,我們選取滿足以下條件的最小 \textstyle k 值:

\frac{\sum_{j=1}^k \lambda_j}{\sum_{j=1}^n \lambda_j} \geq 0.99.
對其它應用,如不介意引入稍大的誤差,有時也保留90-98%的方差範圍。若向他人介紹PCA算法詳情,告訴他們你選擇的 \textstyle k 保留了95%的方差,比告訴他們你保留了前120個(或任意某個數字)主成分更好理解。

1.6 對圖像數據應用PCA算法

爲使PCA算法能有效工作,通常我們希望所有的特徵 \textstyle x_1, x_2, \ldots, x_n 都有相似的取值範圍(並且均值接近於0)。如果你曾在其它應用中使用過PCA算法,你可能知道有必要單獨對每個特徵做預處理,即通過估算每個特徵 \textstyle x_j 的均值和方差,而後將其取值範圍規整化爲零均值和單位方差。但是,對於大部分圖像類型,我們卻不需要進行這樣的預處理。假定我們將在自然圖像上訓練算法,此時特徵 \textstyle x_j 代表的是像素 \textstyle j 的值。所謂“自然圖像”,不嚴格的說,是指人或動物在他們一生中所見的那種圖像。

注:通常我們選取含草木等內容的戶外場景圖片,然後從中隨機截取小圖像塊(如16x16像素)來訓練算法。在實踐中我們發現,大多數特徵學習算法對訓練圖片的確切類型並不敏感,所以大多數用普通照相機拍攝的圖片,只要不是特別的模糊或帶有非常奇怪的人工痕跡,都可以使用。

在自然圖像上進行訓練時,對每一個像素單獨估計均值和方差意義不大,因爲(理論上)圖像任一部分的統計性質都應該和其它部分相同,圖像的這種特性被稱作平穩性(stationarity)。

具體而言,爲使PCA算法正常工作,我們通常需要滿足以下要求:

  • 特徵的均值大致爲0;
  • 不同特徵的方差值彼此相似。 對於自然圖片,即使不進行方差歸一化操作,條件也自然滿足,故而我們不再進行任何方差歸一化操作(對音頻數據,如聲譜,或文本數據,如詞袋向量,我們通常也不進行方差歸一化)。

實際上,PCA算法對輸入數據具有縮放不變性無論輸入數據的值被如何放大(或縮小),返回的特徵向量都不改變。更正式的說:如果將每個特徵向量 \textstyle x 都乘以某個正數(即所有特徵量被放大或縮小相同的倍數),PCA的輸出特徵向量都將不會發生變化。

既然我們不做方差歸一化,唯一還需進行的規整化操作就是均值規整化,其目的是保證所有特徵的均值都在0附近。根據應用,在大多數情況下,我們並不關注所輸入圖像的整體明亮程度。比如在對象識別任務中,圖像的整體明亮程度並不會影響圖像中存在的是什麼物體。更爲正式地說,我們對圖像塊的平均亮度值不感興趣,所以可以減去這個值來進行均值規整化。

具體的步驟是,如果 \textstyle x^{(i)} \in \Re^{n} 代表16x16的圖像塊的亮度(灰度)值( \textstyle n=256 ),可用如下算法來對每幅圖像進行零均值化操作:

\mu^{(i)} := \frac{1}{n} \sum_{j=1}^n x^{(i)}_j

x^{(i)}_j := x^{(i)}_j - \mu^{(i)} , for all \textstyle j

請注意:1)對每個輸入圖像塊\textstyle x^{(i)} 都要單獨執行上面兩個步驟,2)這裏的 \textstyle \mu^{(i)} 是指圖像塊 \textstyle x^{(i)} 的平均亮度值。尤其需要注意的是,這和爲每個像素 \textstyle x_j 單獨估算均值是兩個完全不同的概念。

如果你處理的圖像並非自然圖像(比如,手寫文字,或者白背景正中擺放單獨物體),其他規整化操作就值得考慮了,而哪種做法最合適也取決於具體應用場合。但對自然圖像而言,對每幅圖像進行上述的零均值規整化,是默認而合理的處理。

1.7 PCA 的理論基礎

  • 最大投影方差理論
  • 最小投影距離
  • 座標軸相關度理論

最大方差理論:主成分分析認爲,沿某特徵分佈的數據的方差越大,則該特徵所包含的信息越多,也就是所謂的主成分。 其實也就是樣本投影后間隔較大,容易區分。
這裏寫圖片描述
最小錯誤理論:選擇投影后誤差最小的直線。
方差:
這裏寫圖片描述
\lambda = \frac{1}{m}\sum_{i=1}^{m}(x^{(i)^T}u)^2
\Sigma=\frac{1}{m}\sum_{i=1}^{m}x^{(i)}x^{(i)^T}
\lambda = \mu ^{\tau }\sum \mu
上式兩邊痛乘以 u,得到:
\mu\lambda = \sum \mu

由此可知:\lambda\sum 的特徵值,\mu 是特徵向量
最佳投影直線就是特徵值 λ 最大是對應的特徵向量,其中 λ 就是我們的方差,也對應了我們前面的最大方差理論,也就是找到能夠使投影后方差最大的直線。

2 白化

白化,又稱漂白或者球化;是對原始數據x實現一種變換,使x_Whitened的協方差矩陣的爲單位陣。
由於原始圖像相鄰像素值具有高度相關性,所以圖像數據信息冗餘,對於白化的作用的描述主要有兩個方面:

  • 減少特徵之間的相關性
  • 特徵具有相同的方差(協方差陣爲1)

2.1 PCA白化

PCA
這裏寫圖片描述
爲了使每個輸入特徵具有單位方差,我們可以直接使用 \textstyle 1/\sqrt{\lambda_i} 作爲縮放因子來縮放每個特徵 \textstyle x_{{\rm rot},i} 。具體地,我們定義白化後的數據 \textstyle x_{{\rm PCAwhite}} \in \Re^n 如下:
x_{{\rm PCAwhite},i} = \frac{x_{{\rm rot},i} }{\sqrt{\lambda_i}}.
繪製出 \textstyle x_{{\rm PCAwhite}} ,得到:
這裏寫圖片描述
這些數據現在的協方差矩陣爲單位矩陣 \textstyle I 。我們說,\textstyle x_{{\rm PCAwhite}} 是數據經過PCA白化後的版本: \textstyle x_{{\rm PCAwhite}} 中不同的特徵之間不相關並且具有單位方差。
白化與降維相結合。 如果想要得到經過白化後的數據,並且比初始輸入維數更低,可以僅保留 \textstyle x_{{\rm PCAwhite}} 中前\textstyle k 個成分。\textstyle x_{{\rm PCAwhite}} 中最後的少量成分將總是接近於0,因而捨棄這些成分不會帶來很大的問題。

2.2 ZCA 白化

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

x_{\rm ZCAwhite} = U x_{\rm PCAwhite}
繪製 \textstyle x_{\rm ZCAwhite} ,得到:
這裏寫圖片描述

對所有可能的 \textstyle R ,這種旋轉使得\textstyle x_{\rm ZCAwhite} 儘可能地接近原始輸入數據 \textstyle x

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

2.3 正則化

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

x_{{\rm PCAwhite},i} = \frac{x_{{\rm rot},i} }{\sqrt{\lambda_i + \epsilon}}.
\textstyle x 在區間 \textstyle [-1,1] 上時, 一般取值爲 \textstyle \epsilon \approx 10^{-5}

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

ZCA 白化是一種數據預處理方法,它將數據從 \textstyle x 映射到 \textstyle x_{\rm ZCAwhite} 。 事實證明這也是一種生物眼睛(視網膜)處理圖像的粗糙模型。具體而言,當你的眼睛感知圖像時,由於一幅圖像中相鄰的部分在亮度上十分相關,大多數臨近的“像素”在眼中被感知爲相近的值。因此,如果人眼需要分別傳輸每個像素值(通過視覺神經)到大腦中,會非常不划算。取而代之的是,視網膜進行一個與ZCA中相似的去相關操作 (這是由視網膜上的ON-型和OFF-型光感受器細胞將光信號轉變爲神經信號完成的)。由此得到對輸入圖像的更低冗餘的表示,並將它傳輸到大腦。

3 LDA

4 SVD

5 KPCA

核函數的主成分分析和主成分分析的步驟是一樣的,只不過用核函數替代了原來的數據。

6 ICA

4 總結

PCA (基於最大投影方差降維) –> 白化:方差歸一化 –> ZCA (方差歸一化-不降維度-返回原來)

5 參考

  1. 白化
  2. 機器學習實戰ByMatlab(二)PCA算法
  3. 主成分分析(PCA)原理總結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章