UFLDL深度學習筆記 (三)無監督特征學習


UFLDL深度學習筆記 (三)無監督特征學習

1. 主題思路

UFLDL 無監督特征學習”本節全稱為自我學習與無監督特征學習,和前一節softmax回歸很類似,所以本篇筆記會比較簡化,主題思路和步驟如下:

  • 把有標簽數據分為兩份,先對一份原始數據做無監督的稀疏自編碼訓練,獲得輸入層到隱藏層的最優化權值參數\(W, b\)
  • 把另一份數據分成分成訓練集與測試集,都送入該參數對應的第一層網絡(去掉輸出層的稀疏自編碼網絡);
  • 用訓練集輸出的特征作為輸入,訓練softmax分類器;
  • 再用此參數對測試集進行分類,計算出分類准確率。

后面兩個步驟和前一節softmax回歸相同,區別僅僅是輸入變成了原始數據的稀疏自編碼隱藏層激活值。

特征提取網絡組合形態

2. 本節練習不需要公式推導

3. 代碼實現

根據前面的步驟描述,我們要實現對有監督數據的特征提取,為了報出稀疏自編碼模塊sparseAutoencoderCost.m的獨立性,單獨寫一個feedForwardAutoencoder.m模塊來實現。代碼是不是非常簡單?

function [activation] = feedForwardAutoencoder(theta, hiddenSize, visibleSize, data)
W1 = reshape(theta(1:hiddenSize*visibleSize), hiddenSize, visibleSize);
b1 = theta(2*hiddenSize*visibleSize+1:2*hiddenSize*visibleSize+hiddenSize);
m = size(data,2);
activation = sigmoid(W1*data + repmat(b1,1,m));
end
function sigm = sigmoid(x)
    sigm = 1 ./ (1 + exp(-x));
end

從UFLDL原有代碼中可以發現分類標簽從0-9移動到了1-10,原因在於matlab的數組索引從1開始,最后做softmax判決時,找最大概率的分類的類別號得到的是1-10,所以才做移動的。

此外練習說明中將類別為6-10作為無監督學習的素材,1-5作為有監督softmax回歸的素材,無非就是為了判決出類別號后,統計准確率時可以將softmaxPredict.m輸出的類別號與測試集的真實label直接比較,不用考慮偏移的問題。

4.圖示與結果

數據集仍然來自Yann Lecun的筆跡數據庫,再瞜一眼原始MMIST數據集的筆跡。

handwritting

設定與練習說明相同的參數,運行完整代碼https://github.com/codgeek/deeplearning 可以看到預測准確率達到98.35%。達到了練習的標准結果。

回過來看一下,無監督學習到底學習到了什么呢?

類似稀疏自編碼對邊緣的學習,上圖的特征其實還是稀疏自編碼學習到的阿拉伯數字的筆跡基本特征,各種弧線樣式。另外一點有點講究的是對總數據集合拆分兩組,也可以不按照1-5、6-10來拆,如果按照數據集的前一半后一段拆成兩組。這樣無監督訓練數據就是所有0-9的數字筆跡,softmax判決的也是0-9的數字筆跡。代碼見stlExercise.m% 拆分無監督學習和softmax監督學習方法二 部分。

結果有些意外又可以解釋:准確率為95.8%。 可以解釋為稀疏自編碼、softmax有監督學習對每個分類的數據量都減少了,在1E5量級上,數據量對結果好壞有明顯的影響。


免責聲明!

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



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