UFLDL——Exercise:Self-Taught Learning 自我學習

實驗要求可以參考deeplearning的tutorial, Exercise:Self-Taught Learning  。本實驗和上一個實驗一樣都是對手寫數字0-9的識別,區別在於上一個實驗直接把原始圖像的像素值作爲特徵輸入到softmax迴歸進行分類,而本實驗通過自學習從原始像素值從學習到維度更低的特徵(稀疏自動編碼),再交給softmax迴歸,相當於比之前的實驗多了自學習特徵的步驟,最後實驗顯示,加上自學習特徵之後模型的正確率更高。

1. 神經網絡結構:

實驗中爲三層神經網絡,輸入層28*28個neuron,隱含層200個neuron(都不包括bias結點),輸出層爲10個neuron。

2. 數據:

實驗中的數據採用的是MNIST手寫數字數據庫(0-9手寫數字),共6萬個手寫數據,每個樣本是大小爲28*28的圖片,下圖是把訓練數據中的前100個手寫數據圖像進行顯示。
 

因爲稀疏自動編碼爲非監督模型,softmax迴歸爲監督模型,所以我們把原始數據集分成unlabeled數據集和labeled數據結。把數據集中所有5-9的數字組成unlabeled數據集,用於訓練稀疏自動編碼學習得到新的特徵;0-4的數字組成labeled數據集用於softmax迴歸,其中0-4的一半數據用於訓練,剩餘一半用於測試。下圖是三部分數據集的大小。
 


3. 特徵學習

特徵學習是通過稀疏自動編碼得到從輸入層到隱含層的參數,有了這個參數我們可以把任意的手寫數字映射到新的特徵空間,新的特徵就是隱含層的激活量。

在稀疏自動編碼中,設置最大的迭代次數爲400次,我剛開始的時候沒有注意,設了100次,最後的正確率變成了97.6%(雖然減少的不多)參數轉化成圖片後也和實驗要求不同。雖然本實驗中初始參數已知,但在實際的應用中都需要自己定這些參數,從中可以發現,參數的設定也非常的重要。


                                                      稀疏自動編碼迭代400次的參數顯示                                            稀疏自動編碼迭代100次的參數顯示

通過稀疏自動編碼之後,我們知道如何把原始特徵轉化成新的特徵,接下來,需要把labeled數據集的訓練數據和特徵數據都變成新的特徵。


4. Logistic迴歸

現在,訓練集的新特徵訓練logistic迴歸,然後用學習到的模型對測試集的新特徵進行測試,最後正確率爲98.3%,相比於直接用原始數據(92.6%)設計分類器高不少。


 

5. 擴展

實驗中,我們是用5-9的數字訓練稀疏自動編碼,然後對0-4的數字進行分類,最後表現出較好的分類結果。現在我們會有一個疑問,如果只用0-4的數字訓練稀疏自動編碼,最後的性能會不會特高呢?

我們被0-4的數字分成了3部分,然後進行和上面一樣的實驗,下面是代碼修改的地方。

% numTrain = round(numel(labeledSet)/2);
% trainSet = labeledSet(1:numTrain);
% testSet  = labeledSet(numTrain+1:end);
 
numTrain = round(numel(labeledSet)/3);
trainSet = labeledSet(1:numTrain);
testSet  = labeledSet(numTrain+1:numTrain*2);
unlabeledSet  = labeledSet(numTrain*2+1:end);

最後我們得到稀疏自動編碼的參數圖像,可以發現和之間的幾乎沒有明顯的區別,正確也值提高了0.09%,可以說幾乎沒變,這說明特徵的學習不一定要從需要分類的數據中學習得到,因爲自學習是非監督模型。很想知道如果用和數字差別很大的圖像(比如自然圖像)進行訓練稀疏自動編碼,最後的正確率會是多少,等有空的時候測試下。



6. 補充:無監督特徵學習

有兩種常見的無監督特徵學習方式,區別在於你有什麼樣的未標註數據。自學習(self-taught learning) 是其中更爲一般的、更強大的學習方式,它不要求未標註數據 x_u 和已標註數據  x_l 來自同樣的分佈。另外一種帶限制性的方式也被稱爲半監督學習,它要求x_u和x_l 服從同樣的分佈。下面通過例子解釋二者的區別。

假定有一個計算機視覺方面的任務,目標是區分汽車和摩托車圖像;也即訓練樣本里面要麼是汽車的圖像,要麼是摩托車的圖像。哪裏可以獲取大量的未標註數據呢?最簡單的方式可能是從互聯網上下載一些隨機的圖像數據集,在這些數據上訓練出一個稀疏自編碼器,從中得到有用的特徵。這個例子裏,未標註數據完全來自於一個和已標註數據不同的分佈(未標註數據集中,或許其中一些圖像包含汽車或者摩托車,但是不是所有的圖像都如此)。這種情形被稱爲自學習。

相反,如果有大量的未標註圖像數據,要麼是汽車圖像,要麼是摩托車圖像,僅僅是缺失了類標號(沒有標註每張圖片到底是汽車還是摩托車)。也可以用這些未標註數據來學習特徵。這種方式,即要求未標註樣本和帶標註樣本服從相同的分佈,有時候被稱爲半監督學習。在實踐中,常常無法找到滿足這種要求的未標註數據(到哪裏找到一個每張圖像不是汽車就是摩托車,只是丟失了類標號的圖像數據庫?)因此,自學習在無標註數據集的特徵學習中應用更廣。


7. 代碼

源代碼下載





發佈了24 篇原創文章 · 獲贊 29 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章