關於Neural Network(MLPs)的訓練前準備:數據預處理和網絡初始化

訓練一個的Neural Network(特指由FC層和non-linearity構成的MLP式網絡),爲了達到又快又好的convergence,訓練前的準備非常重要。這裏主要談個主要的預訓練措施:數據預處理 and 網絡初始化。

一. 數據預處理:

本文還是以在CIFAR-10上做10分類任務爲背景展開(訓練集50000張32 * 32 * 3 = 3072dim的圖片,X∈[N , D] = [50000, 3072])。所謂數據預處理,就是把這個3072維空間上的50000個點的數據進行處理,使得他們在3072維feature空間的各個單個feature維度上,具有很好的分佈(distribution)性質。注意,這裏把3072維feature中的每一維看做一個variable,是50000個採樣的distribution。

數據預處理的核心(即希望處理後的數據集)有三:1. zero-mean(zero-centered);2. unit varaiance;3. low dimensionality; 4. Features de-correlation。

1. Mean Subtraction for zero-mean(centered):

對3072維feature的每一維重複以下操作:求50000個值的mean,然後用50000個值各自減去這個mean;

2. Scaling/Normalization by dividing std:

對3072維feature的每一維重複一下操作:求50000個值得標準差(std, i.e. varaince的算術平方根),然後用50000個值各自除以這個標準差。

zero-centered和normalization處理數據的過程如下圖:

3. Dimensionality reduciton & de-correlation by PCA:

有時input圖像太大導致輸入維度很高,從而使得存儲和計算代價都很大,而如此高維度的特徵中有很多冗餘、互相關的信息。可以通過PCA的方法,實現降維和解相關。

PCA,主成分分析,顧名思義是找到樣本特徵空間X∈[50000, 3072] 中對分類最有效的、50000個樣本點之間區辯力最強的、互相之間相關性最低的 主要“成分”(成分即3072維空間的基,即3072個特徵中主要的特徵)。實現PCA的方法,即待求的這些“主成分”,其實就是X∈[50000, 3072]矩陣的covarance(自相關)矩陣M∈[3072, 3072]的主要特徵向量們(Ui∈[3072,1], i up to 3072)。3072個Ui互相正交,可以當做X的一組新基(新的3072個faeture channel),而若將50000個樣本點重新投影到這組新基上,那麼這個新樣本空間Y∈[50000, 3072]中的每兩個feature維之間互相de-correlated

降維的辦法是選擇Ui中前K個特徵值最大的對應的特徵向量組成新基完成投影得到X到Y的轉換。令K=100,則原訓練集X就由[50000, 3072]降維到Y∈[50000, 100],即原先每個sample由3072個特徵表示,現在則只由100個特徵表示。降維一定會帶來信息的損失,但是通過PCA的方法選擇保留最主要的成分(特徵)來完成降維,能夠最有效地完成對重要信息的保留。注意,在特徵值越大的特徵向量上的50000個sample的投影后的點的varaince越大,而varaince越大可以直觀地理解爲含有的可用於分類的信息越多,所以這個特徵向量所代表的特徵(成分、基)越主要。另外,top-100個主成分實現投影和降維後得到的新data Y 有效地保留了原來高維data X中的低頻分量(varaince大),即圖想象中的顏色、粗線條輪廓、紋理等信息,而那丟失掉的特徵信息主要是原X中的高頻分量(varaince小),即圖像中的細枝末節、random噪聲等等

如上圖所示(選取top-144個主成分(特徵向量)實現降維),由3072降維到144dim可視化後,圖像變模糊,但是基本輪廓和顏色等得以保留,即低頻分量保留,高頻分量丟失。

Whitening是在投影之後進行的一次rescaling/normalization操作,即將投影到某個特徵向量Ui∈[3072, 1]上的50000個數各自除以該特特徵向量對應的特徵值

二. 網絡初始化:核心就是保證weight的asymmetric,同時設法保證每個FC層(neurons)的輸入(輸出)數據的distribution有着穩定不shift的mean和variance(低internal covaraite shift)

網絡初始化的目的是通過有效地選擇weights、bias的初始值,保證:1. break symmetric;2. control internal covariate shit(zero-mean + normalize variance),從而保證網絡訓練和converge的又快又好。注意,在FCs組成的MLP型的Neural Network中,因爲全連接性,所以每一層中的每一個neuron的input都相同,都是上一層所有neuron的輸出值

  • Break symmetric:網絡訓練的一大問題就是symmetric,意思是所有neuron呈現共性,即在Foward pass過程中輸出值都相似,從而在Backprop過程中各w上的梯度值也相似。這樣的現象就導致網絡的學習力和表徵力大幅下降,失去neuron各司其職,再ensemble的能力。
  • Internal Covariate Shift:NN網絡中每層neurons的輸入值得distribution,即上一層neurons的輸出distribution(某一層由100個neurons,那麼這一層的輸出,即下一層的輸入,就是一個100維的vector,是一個100維的隨機變量呈現某種distribution),的mean和varaince不穩定,大小不一,導致網絡訓練不得不用小learning rate從而減慢converge,而且對參數initialization的要求更高,而且還會更容易使得neurons陷入saturated的狀態。

爲了解決上述兩個問題,網絡初始化主要有如下兩個操作:

1. 將每個neuron的weights vector初始化從一個zero-mean,unit varaince的Gaussian distribution中採樣:保證break symmetric,並且保證一層neuron的輸出分佈是zero-mean:

這種引入的隨機性,是非常好的summetric breaker,打破了neurons的工整對稱相似性。但是需要注意的是,網絡在BP時候gradient(各weight上的偏導)的大小與網絡中weight的大小是成正比的,所以也不能將weight初始化地一味地小。

2. 將每個neuron如上一步採樣得到的Wi normalize從而使得每個neuron的輸出distribution的unit varaince:保證每一層neuron的輸出分佈unit varaince:

爲了解決internal covariate shift,需要保證每層neurons的輸出分佈是zero mean,unit variance的。zero mean通過data pre-processing和zero-mean Gaussian weight sampling已經可以實現,那麼怎麼實現每層輸出的unit variance呢?研究發現每個neuron輸出值分佈的variance與該neuron的輸入edge的數目成正比。所以,將該neuron的weights除以input edge數的平方根可以實現對該neuron輸出varaince的normalization

3. Batch Normalization:control the internal covaraite shit:

BN層位於FC(or Conv)與Non-linearity之間,是對其前方那個FC層或Conv層輸出的faeture map(即它後面Relu的輸入features)進行一次mean和variance的可學習的校正。如果每個FC後面都有一個BN,那麼就在網絡內部實現了各層的internal covaraite shift管控。

                                           

如上,BN就是在每一次Forward Pass(一個Forward Pass即是批量化vectorized並行計算一個batch的samples)中,在網絡沿途每一個FC後面,對其輸出的features(which is going to be the input of the next FC)的一次可學習normalization。具體做法是求feature中各個channel上在整個batch上的均值和方差(上式中xi是將一張feature map一起計算一個mean map,即假設上一個FC輸出的是100維數據,那麼xi∈100dim,mean of x也是一個100dim),然後進行一次參數化的mean subtraction & varaince scaling/normalization。這樣之後,保證在網絡的各個環節,即每次有數據輸入FC層時,該輸入數據都有很好的mean和varaince的特徵,每次輸入的數據都很穩定,不shift。

BN的好處是:

  • 對抗bad parameter initialization;
  • enable large learning rate and faster convergence;
  • reularize the model------ BN可以代替dropout;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章