Self-Taught Learning To Deep Networds

       本博客是參照UFLDL教程的Self-Taught Learning to Deep Networds寫的,也感謝tornadomeet,看了他的博客也對自己的理解幫助不小。


一、從自我學習到深層網絡

        在自我學習(參考本博客Self-Taught Learning)中,我們用未標註的數據來學習自編碼器,然後用學到的特徵表示對已標註數據學習特徵,然後用該特徵作爲softmax迴歸的輸入學習分類模型,這兩個訓練過程是分開的,如果把兩個模型組合在一起,可以得到最終的分類器模型:


       這是一個大的神經網絡模型,我們用預訓練(利用稀疏自編碼器訓練第一層,利用softmax或logistic迴歸訓練第二層)獲得模型的參數,模型組合在一起後還可以用BP算法進行微調(fine-tuning),微調使得已標註數據也能對自編碼器的W1進行修正。因爲無監督的特徵學習已經能“代表”輸入數據了,有監督的softmax或logistic對特徵較好地擬合分類器,一定程度上看整體已經得到較好的參數來學習特徵並分類了,但是如果我們繼續使用BP算法來微調這些模型參數,通常能夠得到更好的局部最優值。多層神經網絡模型是高度非凸的優化問題,對初始參數很敏感,參數不好很容易達到效果不好的局部最優值,如果先使用預訓練來得到模型的初始參數,然後微調效果會比較好。

      但教程也說到通常要有大量的已標註數據纔對無監督的特徵學習進行微調,這種情況下能顯著提高分類器性能,如果無監督學習的未標註數據很多,但只有相對較少的已標註數據,使用微調的作用有限。


二、深度網絡小概覽

         上面的網絡還是比較“淺”的網絡,只有一個輸入層、隱藏層、輸出層的三層神經網絡,隱藏層是對輸入層學習到的特徵,是對輸入層的非線性表達,如果有多層這樣的隱藏層,那麼這樣的深度網絡就具有更優異的表達能力(更復雜的函數關係)。但是要注意隱藏層是要非線性變換,比如sigmoid函數,如果是線性變換,那麼多層隱藏層學習到的還是線性變換,其實也就相當於單層隱藏層。

       深度網絡的優點如下:

  1.  深度網絡能夠學習到比淺層網絡更復雜的函數關係。如果用k層的網絡學習到的函數關係(中間隱藏層的單元數目與輸入是多項式關係時),用k-1層的網絡很難表達這些函數關係,除非使用指數級別的隱藏單元數目。
  2. 深度網絡學習到的是“部分-整體”的關係,一個隱藏層接着一個隱藏層地學習,學習過程是慢慢上升的,越前面的隱藏層學習到的是越小“部分”、細節的東西,越後面的隱藏層學習到的是越“整體”、大局的東西,而整體是由局部組成的。比如在圖像識別中,第一層可以學習到用圖像像素組合在一起來檢測邊緣(例如之前做過的稀疏自編碼),第二層可以學習到將邊緣組合起來檢測更長的輪廓或簡單“目標的部件”,更深的層次學習到的是更爲複雜、高階、向目標靠攏的特徵。
  3. 大腦皮層也是分多層進行計算的,所以深度網絡符合大腦學習的過程,具有一定的生物學理論基礎。
      深度網絡也有缺點如下:
  1. 訓練深度網絡需要大量的已標註數據,但通常標註數據獲取到的成本都是比較大的,很難用足夠多的樣本來擬合深度網絡複雜的函數關係,這樣就很容易導致過擬合問題了。
  2. 深度網絡相比淺層網絡是一個高度的非凸優化問題,參數的搜索區域充斥着很多“壞”的局部極值,所以參數優化是一個難題。
  3. 梯度彌散問題,訓練神經網絡的算法是BP算法,但BP的參數梯度從輸出層到網絡的最初幾層會急劇地減少,所以前面幾層的參數梯度會很小,所以在用隨機參數初始化時,最初幾層的變化很緩慢,以致它們不能進行很好地學習。
     所以就有了逐層貪婪訓練(greedy layer-wise training)方法,每次只訓練一層隱藏層,可以採用有監督的訓練,但通常採用的是無監督的訓練比如稀疏自編碼,每一步時把之前訓練好的k-1層隱藏層固定,然後增加第k層,全部隱含層訓練完畢後,把那些參數作爲最終整個網絡的初始參數進行有監督的微調。逐層貪婪訓練方法成功的原因,一個是可以利用大量的未標註數據進行無監督的學習,二是用無監督學習後相對於初始化而言,參數已經處於模型比較好的位置上,因爲無標籤數據已經提供了大量輸入數據包含的模型的先驗知識。
      

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