繼續學習deep learning,看yusugomori的code,看到里面DA(Denoising Autoencoders)和SDA(Stacked Denoising Autoencoders)的code,與RBM非常像。心里有個問題,autoencoder和RBM有什么區別和聯系?又上網上找了些資料(前面轉載那兩篇),學習了一下。下面記一下筆記。
1. autoencoder是多層神經網絡,其中輸入層和輸出層表示相同的含義,具有相同的節點數,如圖:
autoencode學習的是一個輸入輸出相同的“恒等函數”。
2. 從1中可以看到,autoencoder學習的還是輸入的特征表示。
3. 不過輸入和輸出相同,使得這個網絡的輸出沒有任何意義。autoencoder的意義在于學習的(通常是節點數更少的)中間coder層(最中間的那一層),這一層是輸入向量的良好表示。這個過程起到了“降維”的作用。
4. 當autoencoder只有一個隱含層的時候,其原理相當于主成分分析(PCA)
5. 當autoencoder有多個隱含層的時候,每兩層之間可以用RBM來pre-training,最后由BP來調整最終權值
6. 網絡權重更新公式很容易用求偏導數的方法推導出來,算法是梯度下降法。
7. denoising autoencoder是autoencoder的一個變種,與autoencoder不同的是,denoising autoencoder在輸入的過程中加入了噪聲信息,從而讓autoencoder能夠學習這種噪聲。
8. denoising autoencoder與RBM非常像:
(1)參數一樣:隱含層偏置、顯示層偏置、網絡權重
(2)作用一樣:都是輸入的另一種(壓縮)表示
(3)過程類似:都有reconstruct,并且都是reconstruct與input的差別,越小越好
9. denoising autoencoder與RBM的區別:
背后原理就不說了哈(RBM是能量函數),區別在于訓練準則。RBM是隱含層“產生”顯示層的概率(通常用log表示),denoising autoencoder是輸入分布與reconstruct分布的KL距離。所用的訓練方法,前者是CD-k,后者是梯度下降。
10. 再補充一下,RBM固定只有兩層;autoencoder,可以有多層,并且這些多層網絡可以由標準的bp算法來更新網絡權重和偏置,與標準神經網絡不同的是,autoencoder的輸入層和最終的輸出層是“同一層”,不僅僅是節點數目、輸出相同,而是完完全全的“同一層”,這也會影響到這一層相關的權值更新方式。總之,輸入與輸出是同一層,在此基礎上,再由輸入與輸出的差別構造準則函數,再求各個參數的偏導數,再用bp方式更新各個權重......