用NN實現數據的降維

聲明: 本文系轉載,來自作者:tornadomeet 出處:http://www.cnblogs.com/tornadomeet

數據降維的重要性就不必說了,而用NN(神經網絡)來對數據進行大量的降維是從2006開始的,這起源於2006年science上的一篇文章:reducing the dimensionality of data with neural networks,作者就是鼎鼎有名的Hinton,這篇文章也標誌着deep learning進入火熱的時代。

  今天花了點時間讀了下這篇文章,下面是一點筆記:

  多層感知機其實在上世紀已經被提出來了,但是爲什麼它沒有得到廣泛應用呢?其原因在於對多層非線性網絡進行權值優化時很難得到全局的參數。因爲一般使用數值優化算法(比如BP算法)時需要隨機給網絡賦一個值,而當這個權值太大的話,就很容易收斂到”差”的局部收斂點,權值太小的話則在進行誤差反向傳遞時離輸入層越近的權值更新越慢,因此優化問題是多層NN沒有大規模應用的原因。而本文的作者設計出來的autoencoder深度網絡確能夠較快的找到比較好的全局最優點,它是用無監督的方法(這裏是RBM)先分開對每層網絡進行訓練,然後將它當做是初始值來微調。這種方法被認爲是對PCA的一個非線性泛化方法。

每一層網絡的預訓練都採用的是RBM方法,關於RBM的簡單介紹可以參考前面的博文:Deep learning:十九(RBM簡單理解),其主要思想是是利用能量函數,如下:

   

  給定一張輸入圖像(暫時是以二值圖像爲例),我們可以通過調整網絡的權值和偏置值使得網絡對該輸入圖像的能量最低。

  文章說單層的二值網絡不足以模擬大量的數據集,因此一般採用多層網絡,即把第一層網絡的輸出作爲第二層網絡的輸入。並且每增加一個網絡層,就會提高網絡對輸入數據重構的log下界概率值,且上層的網絡能夠提取出其下層網絡更高階的特徵。

  圖像的預訓練和微調,編碼和解碼的示意圖如下:

   

  由上圖可以看到,當網絡的預訓練過程完成後,我們需要把解碼部分重新拿回來展開構成整個網絡,然後用真實的數據作爲樣本標籤來微調網絡的參數。

  當網絡的輸入數據是連續值時,只需將可視層的二進制值改爲服從方差爲1的高斯分佈即可,而第一個隱含層的輸出仍然爲二進制變量。

  文章中包含了多個實驗部分,有手寫數字體的識別,人臉圖像的壓縮,新聞主題的提取等。在這些實驗的分層訓練過程中,其第一個RBM網絡的輸入層都是其對應的真實數據,且將值歸一化到了(0,1).而其它RBM的輸入層都是上一個RBM網絡輸出層的概率值;但是在實際的網絡結構中,除了最底層的輸入層和最頂層RBM的隱含層是連續值外,其它所有層都是一個二值隨機變量。此時最頂層RBM的隱含層是一個高斯分佈的隨機變量,其均值由該RBM的輸入值決定,方差爲1。

 

  實驗結果1:

   

  這3副圖中每幅圖的最上面一層是原圖,其後面跟着的是用NN重構的圖,以及PCA重構的圖(可以選取主成分數量不同的PCA和logicPCA或者標準PCA的組合,本人對這logicPCA沒有仔細去研究過)。其中左上角那副圖是用NN將一個784維的數據直接降到6維!

  作者通過實驗還發現:如果網絡的深度淺到只有1個隱含層時,這時候可以不用對網絡進行預訓練也同樣可以達到很好的效果,但是對網絡用RBM進行預訓練可以節省後面用BP訓練的時間。另外,當網絡中參數的個數是相同時,深層網絡比淺層網絡在測試數據上的重構誤差更小,但僅限於兩者參數個數相同時。作者在MINIST手寫數字識別庫中,用的是4個隱含層的網絡結構,維數依次爲784-500-500-2000-10,其識別誤差率減小至1.2%。預訓時練得到的網絡權值佔最終識別率的主要部分,因爲預訓練中已經隱含了數據的內部結構,而微調時用的標籤數據只對參數起到稍許的作用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章