UFLDL教程: Exercise:Self-Taught Learning
自我學(xué)習(xí)
Deep Learning and Unsupervised Feature Learning Tutorial Solutions
1.先訓(xùn)練稀疏自編碼器提取特征,再把特征和label給softmax分類器進(jìn)行訓(xùn)練,最后用test數(shù)據(jù)集進(jìn)行測(cè)試。
2.由于實(shí)際應(yīng)用中找到大量有標(biāo)注的樣本是非常困難的,所有采用先用大量無標(biāo)注樣本來進(jìn)行無監(jiān)督訓(xùn)練自編碼器,再用自編碼器來提取特征,配合有標(biāo)注樣本來進(jìn)行有監(jiān)督訓(xùn)練softmax分類器。
3.數(shù)據(jù)預(yù)處理方面:例如,如果對(duì)未標(biāo)注數(shù)據(jù)集進(jìn)行PCA預(yù)處理,就必須將得到的矩陣 U 保存起來,并且應(yīng)用到有標(biāo)注訓(xùn)練集和測(cè)試集上;而不能使用有標(biāo)注訓(xùn)練集重新估計(jì)出一個(gè)不同的矩陣 U (也不能重新計(jì)算均值并做均值標(biāo)準(zhǔn)化),否則的話可能得到一個(gè)完全不一致的數(shù)據(jù)預(yù)處理操作,導(dǎo)致進(jìn)入自編碼器的數(shù)據(jù)分布迥異于訓(xùn)練自編碼器時(shí)的數(shù)據(jù)分布。
4.自學(xué)習(xí)(self-taught learning) 不要求未標(biāo)注數(shù)據(jù) x_u 和已標(biāo)注數(shù)據(jù) x_l 來自同樣的分布。另外一種帶限制性的方式也被稱為半監(jiān)督學(xué)習(xí),它要求 x_u和 x_l 服從同樣的分布。
流程圖
稀疏自編碼器學(xué)習(xí)圖像特征(實(shí)現(xiàn)自學(xué)習(xí))—用到無標(biāo)簽的樣本集
softmax回歸對(duì)樣本分類—用到有標(biāo)簽的訓(xùn)練樣本集
步驟
第0步:設(shè)置神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
該神經(jīng)網(wǎng)絡(luò)包括三層:
輸入層的神經(jīng)元個(gè)數(shù)(數(shù)字識(shí)別,則設(shè)置輸入的圖像大小)
輸出端的神經(jīng)元個(gè)數(shù)(也就是類別數(shù))
隱藏層神經(jīng)元個(gè)數(shù)
另外一些關(guān)于系數(shù)編碼的參數(shù)
sparsityParam、lambda、beta
最大迭代次數(shù):maxIter
第一步:產(chǎn)生無標(biāo)簽樣本集和有標(biāo)簽樣本集(訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集)
1)導(dǎo)入數(shù)據(jù)集mnistData和mnistLabels
mnistData是一個(gè)矩陣,每一列為一個(gè)輸入樣本(也就是一個(gè)輸入的數(shù)字圖像所有像素點(diǎn)按列排布)
mnistLabels是一個(gè)向量,它存儲(chǔ)的數(shù)字表示mnistData中每一列樣本的類別
(2)將輸入的樣本集mnistData進(jìn)行分組
① 首先,將mnistData分為兩組:一組為有標(biāo)簽的數(shù)據(jù)集(數(shù)字0-4的樣本),另一組為無標(biāo)簽的數(shù)據(jù)集(數(shù)字5-9的樣本)
(這兩組的指標(biāo)集分別為labeledSet和unlabeledSet)
② 然后,再將有標(biāo)簽的數(shù)據(jù)集平均分為兩組,一組作為訓(xùn)練集、一組作為測(cè)試集;
(這兩組的指標(biāo)集分別為trainSet和testSet)
這里的指標(biāo),指在mnistData中的列序號(hào)
③ 分別得到上述三組指標(biāo)集得到相應(yīng)的數(shù)據(jù)集,并得到有標(biāo)簽數(shù)據(jù)集的標(biāo)簽
unlabeledData:無標(biāo)簽數(shù)據(jù)集,每一列為一個(gè)樣本
trainData:有標(biāo)簽訓(xùn)練集,每一列為一個(gè)樣本,相應(yīng)的標(biāo)簽存放在trainLabels中
testData:有標(biāo)簽測(cè)試集,每一列為一個(gè)樣本,相應(yīng)的標(biāo)簽存放在testLabels中
用29404個(gè)無標(biāo)注數(shù)據(jù)unlabeledData(手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)MNIST Dataset中數(shù)字為5-9的數(shù)據(jù))來訓(xùn)練稀疏自動(dòng)編碼器,得到其權(quán)重參數(shù)opttheta。這一步的目的是提取這些數(shù)據(jù)的特征,雖然我們不知道它提取的究竟是哪些特征(當(dāng)然,可以通過可視化結(jié)果看出來,可假設(shè)其提取的特征為Features),但是我們知道它提取到的特征實(shí)際上就是已訓(xùn)練好的稀疏自動(dòng)編碼器的隱藏層的激活值(即:第2層激活值)。注意:本節(jié)所有訓(xùn)練稀疏自動(dòng)編碼器的算法用的都L-BFGS算法。
第二步:訓(xùn)練稀疏自編碼器
利用無標(biāo)簽數(shù)據(jù)集unlabeledData訓(xùn)練稀疏自編碼器
① 初始化化自編碼器的參數(shù)theta
② 調(diào)用minFunc中的最優(yōu)化函數(shù),計(jì)算得到稀疏自編碼器的參數(shù)
包括設(shè)置minFunc函數(shù)的一些參數(shù)及對(duì)minFunc函數(shù)的調(diào)用,這里要用到稀疏自編碼器的代價(jià)函數(shù)和梯度計(jì)算的函數(shù)sparseAutoencoderCost
第三步:利用稀疏自編碼器對(duì)有標(biāo)簽的訓(xùn)練樣本集和測(cè)試樣本集提取特征
在得到稀疏自編碼器后,可以利用它從有標(biāo)簽的數(shù)據(jù)集中提取圖像特征,這里需要完成feedForwardAutoencoder.m函數(shù)
所謂圖像的特征,其實(shí)就是指該圖像在稀疏自編碼器的權(quán)值矩陣W1作用下得到的隱藏層的輸出
可以得到訓(xùn)練集的特征trainFeatures和測(cè)試集的特征testFeatures
它們的每一列分別是由稀疏自編碼器提取出的特征
訓(xùn)練樣本集提取特征
把15298個(gè)已標(biāo)注數(shù)據(jù)trainData(手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)MNIST Dataset中數(shù)字為0-4的前一半數(shù)據(jù))作為訓(xùn)練數(shù)據(jù)集通過這個(gè)已訓(xùn)練好的稀疏自動(dòng)編碼器(即:權(quán)重參數(shù)為opttheta的稀疏自動(dòng)編碼器),就可提取出跟上一步一樣的相同的特征參數(shù),這里trainData提取的特征表達(dá)假設(shè)為trainFeatures,它其實(shí)也是隱藏層的激活值。如果還不明白,這里打一個(gè)比方:假設(shè)上一步提取的是一個(gè)通信信號(hào)A(對(duì)應(yīng)unlabeledData)的特征是一階累積量,而這一步提取的就是通信信號(hào)B(對(duì)應(yīng)trainData)的一階累積量,它們提取的都是同樣的特征,只是對(duì)象不同而已。同樣地,unlabeledData和trainData提取的是同樣的特征Features,只是對(duì)象不同而已。
測(cè)試樣本集提取特征
把15298個(gè)已標(biāo)注數(shù)據(jù)testData(手寫數(shù)字?jǐn)?shù)據(jù)庫(kù)MNIST Dataset中數(shù)字為0-4的后一半數(shù)據(jù))作為測(cè)試數(shù)據(jù)集通過這個(gè)已訓(xùn)練好的稀疏自動(dòng)編碼器(即:權(quán)重參數(shù)為opttheta的稀疏自動(dòng)編碼器),就可提取出跟上一步一樣的相同的特征參數(shù),這里testData提取的特征表達(dá)假設(shè)為testFeatures,它其實(shí)也是隱藏層的激活值。
注意:如果上一步對(duì)unlabeledData做了預(yù)處理,一定要把其各種數(shù)據(jù)預(yù)處理參數(shù)(比如PCA中主成份U)保存起來,因?yàn)檫@一步的訓(xùn)練數(shù)據(jù)集trainData和下一步的測(cè)試數(shù)據(jù)集testData也一定要做相同的預(yù)處理。本節(jié)練習(xí),因?yàn)橛玫氖鞘謱憯?shù)字?jǐn)?shù)據(jù)庫(kù)MNIST Dataset,已經(jīng)經(jīng)過了預(yù)處理,所以不用再預(yù)處理。
具體見:http://ufldl.stanford.edu/wiki/index.php/%E8%87%AA%E6%88%91%E5%AD%A6%E4%B9%A0
第四步:利用訓(xùn)練樣本集訓(xùn)練softmax回歸模型
利用訓(xùn)練集的特征集trainFeatures及其標(biāo)簽集trainLabels,訓(xùn)練softmax回歸模型
注:softmaxTrain函數(shù)的輸入?yún)?shù)(特征維數(shù),標(biāo)簽數(shù),懲罰項(xiàng)權(quán)值λ,訓(xùn)練數(shù)據(jù)集的數(shù)據(jù),訓(xùn)練數(shù)據(jù)集的標(biāo)簽,其他參數(shù))
把第三步提取出來的特征trainFeatures和已標(biāo)注數(shù)據(jù)trainData的標(biāo)簽trainLabels作為輸入來訓(xùn)練softmax分類器,得到其回歸模型softmaxModel。
第五步:對(duì)測(cè)試數(shù)據(jù)集進(jìn)行分類
利用得到的softmax回歸模型對(duì)測(cè)試集進(jìn)行分類
把第三步提取出來的特征testFeatures輸入訓(xùn)練好的softmax回歸模型softmaxModel,從而預(yù)測(cè)出已標(biāo)注數(shù)據(jù)testData的類別pred,再把pred和已標(biāo)注數(shù)據(jù)testData本來的標(biāo)簽testLabels對(duì)比,就可得出正確率。
綜上,Self-taught learning是利用未標(biāo)注數(shù)據(jù),用無監(jiān)督學(xué)習(xí)來提取特征參數(shù),然后用有監(jiān)督學(xué)習(xí)和提取的特征參數(shù)來訓(xùn)練分類器。
本次實(shí)驗(yàn)主要是進(jìn)行0~4這5個(gè)數(shù)字的分類,雖然進(jìn)行無監(jiān)督訓(xùn)練用的是數(shù)字5~9的訓(xùn)練樣本,這依然不會(huì)影響后面的結(jié)果。
5-9的數(shù)字進(jìn)行降維的訓(xùn)練,訓(xùn)練出一般圖像到低維空間的表示矩陣W和B,后用W和B,將要分類的圖像0-4用低維表示.
function [activation] = feedForwardAutoencoder(theta, hiddenSize, visibleSize, data) % 該函數(shù)的作用是:利用稀疏自編碼器從數(shù)據(jù)中提取特征 % theta: trained weights from the autoencoder % visibleSize: the number of input units (probably 64) % hiddenSize: the number of hidden units (probably 25) % data: Our matrix containing the training data as columns. So, data(:,i) is the i-th training example. % We first convert theta to the (W1, W2, b1, b2) matrix/vector format, so that this % follows the notation convention of the lecture notes. W1 = reshape(theta(1:hiddenSize*visibleSize), hiddenSize, visibleSize); b1 = theta(2*hiddenSize*visibleSize+1:2*hiddenSize*visibleSize+hiddenSize);%% ---------- YOUR CODE HERE -------------------------------------- % Instructions: Compute the activation of the hidden layer for the Sparse Autoencoder. activation=sigmoid(W1*data+repmat(b1,1,size(data,2)));%-------------------------------------------------------------------end%------------------------------------------------------------------- % Here's an implementation of the sigmoid function, which you may find useful % in your computation of the costs and the gradients. This inputs a (row or % column) vector (say (z1, z2, z3)) and returns (f(z1), f(z2), f(z3)). function sigm = sigmoid(x)sigm = 1 ./ (1 + exp(-x)); end
參考文獻(xiàn)
UFLDL教程(五)之self-taught learning
Deep Learning 7_深度學(xué)習(xí)UFLDL教程:Self-Taught Learning_Exercise(斯坦福大學(xué)深度學(xué)習(xí)教程)
自我學(xué)習(xí)
Deep Learning 6_深度學(xué)習(xí)UFLDL教程:Softmax Regression_Exercise(斯坦福大學(xué)深度學(xué)習(xí)教程)
吳恩達(dá) Andrew Ng 的公開課
總結(jié)
以上是生活随笔為你收集整理的UFLDL教程: Exercise:Self-Taught Learning的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UFLDL教程:Exercise:Sof
- 下一篇: UFLDL教程: Exercise: I