1. 程式人生 > >DeepLearning學習隨記(一)稀疏自編碼器

DeepLearning學習隨記(一)稀疏自編碼器

               

講義從稀疏自編碼(Sparse Autoencoder)這一章節開始講起。前面三節是神經網路、BP神經網路以及梯度檢驗的方法。由於還有點神經網路的相關知識,這部分不是太難懂。就從自編碼器和稀疏性(Autoencoders and sparisity)記起吧。

稀疏自編碼器構建:

假設我們只有一個沒有類別標籤的訓練樣本集合{x(1),x(2)...},一個自編碼神經網路就是一種非監督學習演算法,它使用BP演算法,並將目標值設為輸入值(y(i)=x(i))。Autoencoder

我們的目標是希望得到hW,b(X)≈x。用aj(2)(x)表示輸入向量x對隱藏層單元j的啟用值。則j的平均啟用值:

為了達到稀疏性,也即用最少(最稀疏)的隱藏單元來表示輸入層的特徵,我們希望所有隱藏層單元平均啟用值接近於0.於是應用KL距離:

其中為了方便書寫:

這樣,神經網路整體代價函式就可以表示為:,其中J(W,b)在前面BP網路章節中介紹過。

講義中同時給出了這種情況下如何計算用於偏導數計算的殘差,自己懶得去推導了,直接拿來用就好了:

將反向傳導過程中殘差計算公式改為:即可。

這樣,一個稀疏自編碼器就完成了。

個人感覺這個跟PCA貌似有點類似,可以將資料的維度降到很低(稀疏性嘛,用幾個有用的隱層就可以表示出原始資料)。從Visualizing a Trained Autoencoder這節的結果來看,應該是這麼個情況。

練習:

講義中還給出了一個Exercise,Matlab用的不熟啊,這裡去看了tornadomeet的博文http://www.cnblogs.com/tornadomeet/archive/2013/03/20/2970724.html

,裡面將程式碼實現了(膜拜下~),自己下下來跑了一下,結果什麼的都跟原來博文一樣(廢話了,同一個程式,哈哈),最後沒有收斂,迭代400次終止了。同時發現matlab貌似有點好用啊。。。這麼幾行程式碼就實現了,讓我這用慣了C的情何以堪...回去自己補一下matlab了。