深度學習中的資料預處理方法

David-Chow發表於2017-03-06

本文主要講深度學習中的資料預處理方法,主要參考NGUFLDL教程以及其他一些部落格和論文進行總結,UFLDL資料預處理教程連結為

http://deeplearning.stanford.edu/wiki/index.php/資料預處理

資料預處理在眾多深度學習演算法中都起著重要作用,通常所講的預處理包括資料歸一化和白化。以下分別對資料歸一化和白化進行說明。

資料歸一化資料歸一化(Data Normalization)是資料預處理的第一步,有很多方法,如常見的高斯歸一化、最大最小值歸一化等,而在深度學習中常用的是以下幾種:

1)簡單縮放 (Simple Rescaling

在簡單縮放中,我們的目的是通過對資料的每一個維度的值進行重新調節(這些維度可能是相互獨立的),使得最終的資料向量落在 [0,1][  1,1] 的區間內(根據資料情況而定),以滿足應用需求。例如,在sparse auto-encoder中,由於網路的輸出和輸入是近似相等的,而隱含層和輸出層神經元通常採用的是sigmoid函式作為啟用函式,該函式值域為[0,1],因此為了保證輸出等於輸入,通常需要將輸入縮放至[0,1]這個範圍,然後再進行訓練。

2)逐樣本均值消減(Per-example mean subtraction

逐樣本均值消減,也稱為移除直流分量(remove DC),當資料時平穩的(stationary),即資料每一個維度的統計都服從相同分佈,可以考慮在每個樣本上減去資料的統計平均值(逐樣本計算,即分別計算各樣本的均值,然後各樣本減去其對應的均值)。自然影像具有平穩的性質,所以這種歸一化方法也是比較常用的。對自然影像應用PCA演算法時候,通常也會這樣處理,參考以下連結:

http://deeplearning.stanford.edu/wiki/index.php/PCA

注意:通常這種方法只用於灰度影像,因為彩色影像不同色彩通道中的畫素並不都存在平穩特性。此外,對於教程這部分內容還有點疑惑,“對影像資料應用PCA演算法”這部分內容上面講的是標準的PCA處理方法(各維度去均值),而下面給的公式卻是單獨處理每個影像塊(逐樣本去均值)。

3)特徵標準化(Feature Standardization

特徵標準化的目的是使資料集中所有特徵都具有零均值和單位方差,即資料的每一個維度具有零均值和單位方差,這也是比較常見的一種歸一化方法,比如使用SVM時候也要進行類似處理。在實際應用中,特徵標準化的具體做法是:首先計算每一個維度上資料的均值(使用全體資料計算),之後在每一個維度上都減去該均值。下一步便是在資料的每一維度上除以該維度上資料的標準差。

                                                        非監督特徵學習之資料預處理


例如X是一個訓練樣本集,包含m個訓練樣本且每個訓練樣本的維數是n。應用特徵標準化時先計算各行資料的均值 

                                                             非監督特徵學習之資料預處理

然後樣本集X減去該均值得到零均值化後的樣本集XX。之後XX的各行除以該行資料的標準差就會得到特徵標準化後的樣本。

總結:以上有三種方法,具體預處理時候到底該如何選擇預處理方法呢?一般可以根據自己的需要來選擇(或者說資料型別)。

若影像是自然灰度影像,由於灰度影像具有平穩特性,通常可選擇第二種方法,即移除直流分量(逐樣本移除直流分量後還可以繼續逐樣本除以各樣本的標準差,不過這一步通常不做,因為其平穩特性)。

若影像是自然彩色影像,由於色彩通道間並不存在平穩特性,因此通常對資料進行特徵縮放(使畫素值位於 [0,1] 區間)。然後再進行PCA/ZCA白化等操作,在白化前需進行特徵分量均值歸零(即使特徵的每一個維度具有零均值,通常不需要除以各維度資料的標準差,因為各維度標準差很接近,可以對上文中的X進行驗證)。在UFLDL教程的練習中(linear decoder)採用的是這種方法,而在有些論文中,也會採用第二種方法(逐樣本去均值和除以標準差),如論文“An Analysis of Single-Layer Networks in Unsupervised Feature Learning”,這樣在後續白化處理時是不是還需要再對各維度進行零均值化(因為計算協方差矩陣時需要這一步),論文裡這點沒說明。因此應用時建議根據練習中的方法來處理。

若影像是遙感影像,可採用linear decoder這個練習中的處理方法

 

PCA/ZCAzero-phase component analysis)白化資料歸一化後的一個處理步驟就是資料白化。關於白化的基本知識可參考教程:

http://deeplearning.stanford.edu/wiki/index.php/Whitening

在進行 PCA/ZCA 白化時,首先使特徵零均值化是很有必要的, 這一步需要在計算協方差矩陣前完成(計算協方差矩陣前的必要處理)。

總結:其實資料歸一化和白化可以合併成一部分,即資料白化。因為白化前肯定需要進行一些必要的資料歸一化,比如計算協方差矩陣前需進行特徵零均值化操作。

此外關於預處理這部分內容,還可以參考部落格:

http://www.cnblogs.com/tornadomeet/archive/2013/04/12/3016319.html

相關文章