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


最近開始看Deep Learning,隨手記點,方便以后查看。

主要參考資料是Stanford 教授 Andrew Ng 的 Deep Learning 教程講義:http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial。這個講義已經有人翻譯了(贊一個),可以參見鄧侃的新浪博客http://blog.sina.com.cn/s/blog_46d0a3930101h6nf.html。另外,博客園里有一個前輩關於講義中練習的一系列文章,在具體實現時可以參照下:http://www.cnblogs.com/tornadomeet/category/497607.html

講義從稀疏自編碼(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距離:

其中為了方便書寫:

其中\textstyle \rho是稀疏參數,一般來說選一個很小的數,如0.05。

這樣,神經網絡整體代價函數就可以表示為:,其中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了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM