日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器

發(fā)布時(shí)間:2025/3/21 pytorch 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
 深度學(xué)習(xí)入門教程UFLDL學(xué)習(xí)實(shí)驗(yàn)筆記一:稀疏自編碼器

UFLDL即(unsupervised feature learning & deep learning)。這是斯坦福網(wǎng)站上的一篇經(jīng)典教程。顧名思義,你將在這篇這篇文章中學(xué)習(xí)到無監(jiān)督特征學(xué)習(xí)和深度學(xué)習(xí)的主要觀點(diǎn)。

UFLDL全文出處在這:http://ufldl.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B,本文為本人原創(chuàng),參考了UFLDL的教程,是我自己個(gè)人對于這一系列教程的理解以及自己的實(shí)驗(yàn)結(jié)果。非盈利性質(zhì)網(wǎng)站轉(zhuǎn)載請?jiān)谖恼麻_頭處著名本文作者:77695,來源http://www.cnblogs.com/cj695/。盈利性質(zhì)網(wǎng)站轉(zhuǎn)載請與作者聯(lián)系,聯(lián)系方式在文章后面。如未聯(lián)系,本人將通過一切可能且合法的途徑追繳相應(yīng)稿酬。請?jiān)谵D(zhuǎn)載時(shí)保留此聲明。

神經(jīng)網(wǎng)絡(luò)

一個(gè)神經(jīng)網(wǎng)絡(luò)由一系列神經(jīng)元組成,一個(gè)神經(jīng)元由一系列參數(shù)x1,x2。。。及偏置量+1作為輸入,將輸入與對應(yīng)權(quán)值W(與x1,x2。。。相乘),(與1相乘)相乘后求和,并將和放入激活函數(shù),即可得到該神經(jīng)元的輸出。我們稱這個(gè)神經(jīng)元的輸入-輸出映射關(guān)系其實(shí)就是一個(gè)邏輯回歸(logistic regression)

在這里激活函數(shù)我們用:

他的導(dǎo)數(shù)是右邊的形式

這是sigmoid函數(shù)的圖像

整個(gè)神經(jīng)元可以用一個(gè)公式表示:

神經(jīng)網(wǎng)絡(luò)就是很多個(gè)神經(jīng)元組合在一起,一個(gè)神經(jīng)元的輸出,也可以是另外一個(gè)神經(jīng)元的輸入,如下圖:

具體請直接查看UFLDL相應(yīng)教程,這里不再贅述,下文一樣。

反向傳導(dǎo)算法

一個(gè)神經(jīng)網(wǎng)絡(luò)向前傳導(dǎo),其神經(jīng)元的參數(shù)可以是各種各樣的,這樣也會導(dǎo)致各種各樣的借,而我希望我整個(gè)神經(jīng)網(wǎng)絡(luò)的輸出,是與我預(yù)期的輸出越相近越好,為了描述相近的程度,我們計(jì)算神經(jīng)網(wǎng)絡(luò)輸出與預(yù)計(jì)輸出的差值的平方和。這個(gè)和越小,即輸出與預(yù)期越接近,我們稱這個(gè)叫做代價(jià)函數(shù)。但使得輸出與預(yù)期接近的W參數(shù)組合有很多,并不是每一種組合都好,也不是說越接近越好,當(dāng)W參數(shù)太大的時(shí)候,會發(fā)生過擬合,使得泛化能力不夠,因此我們引入所有W的平方和,加入到代價(jià)函數(shù)中,我們稱它叫懲罰項(xiàng)。我們使用梯度下降法,求得最優(yōu)的W,b這就是機(jī)器學(xué)習(xí)的整個(gè)過程。梯度下降中,其實(shí)就是求得代價(jià)函數(shù)對W,b的偏導(dǎo)值。在計(jì)算偏導(dǎo)的時(shí)候,因?yàn)閺?fù)合函數(shù)的求導(dǎo)法則:

可以看到,要求整個(gè)懲罰函數(shù)的導(dǎo)數(shù)首先就要計(jì)算從懲罰函數(shù)開始向后求導(dǎo),具體公式這里就不貼了。

梯度檢驗(yàn)

要檢測自己反向傳導(dǎo)得到的偏導(dǎo)函數(shù)是否正確,這里有一種簡單粗暴的方法,就是梯度檢驗(yàn),通過對某一個(gè)參數(shù)加以及減一個(gè)較小的值的差除以2倍較小的值即可近似算出該點(diǎn)偏導(dǎo)值,因此可以用來檢驗(yàn)偏導(dǎo)是否計(jì)算正確。但為什么我們不直接用這個(gè)計(jì)算代替求偏導(dǎo)函數(shù),因?yàn)樘?#xff01;

在這里我們用L-BFGS算法快速計(jì)算偏導(dǎo)數(shù)

自編碼算法與稀疏性

使得輸出盡可能與輸入一致我們稱之為自編碼。比如,若隱藏層神經(jīng)元數(shù)目小于輸入層,則這個(gè)網(wǎng)絡(luò)就要學(xué)習(xí)怎么去壓縮這些數(shù)據(jù)。使得神經(jīng)元大部分的時(shí)間都是被抑制的限制則被稱作稀疏性限制。其懲罰函數(shù)如下:

可視化自編碼器訓(xùn)練結(jié)果

可以證明,時(shí)有單元i有最大激勵(lì)。

實(shí)現(xiàn)

生成數(shù)據(jù)集:即從所有10副512x512的圖片中取8x8的塊,一共取10000塊。

這是數(shù)據(jù)集的一些圖片,可以看到這主要是一些自然圖片。

這里只粘貼所有自己實(shí)現(xiàn)部分的代碼。

?
1 2 3 4 5 6 7 8 9 10 [w,h,n]=size(IMAGES); randx=randi(w-patchsize,1,numpatches); randy=randi(h-patchsize,1,numpatches); randIdx=randi(n,1,numpatches); for i=1 : numpatches ????pc=IMAGES(randx(i):randx(i)+patchsize-1,randy(i):randy(i)+patchsize-1,randIdx(i)); ????patches(:,i)=pc(:); end

生成結(jié)果如下:

實(shí)現(xiàn)懲罰函數(shù)以及梯度函數(shù):按照之前的公式計(jì)算,大家直接看代碼吧。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [l,n]=size(data); dataHidden=sigmoid(W1*data+b1*ones(1,n)); dataOut=sigmoid(W2*dataHidden+b2*ones(1,n)); rou=sum(dataHidden,2)/n; spCost=beta*(sum((sparsityParam*log(sparsityParam*ones(size(rou))./rou)... ????+(1-sparsityParam)*log(((1-sparsityParam)*ones(size(rou)))./(1-rou))))); xyCost=(sum(sum((dataOut-data).*(dataOut-data))))/2/n; wCost=(lambda/2)*((sum(sum(W1.*W1))+sum(sum(W2.*W2)))); cost=wCost+xyCost+spCost; delta3=-(data-dataOut).*dataOut.*(1-dataOut); spDt=beta*((-sparsityParam*ones(size(rou))./rou)+(((1-sparsityParam)... ????*ones(size(rou)))./(ones(size(rou))-rou))); delta2=((W2')*delta3+spDt*ones(1,n)).*dataHidden.*(1-dataHidden); W2grad=(delta3*(dataHidden'))/n+lambda*W2; W1grad=(delta2*(data'))/n+lambda*W1; b2grad=delta3*ones(n,1)/n; b1grad=delta2*ones(n,1)/n;

實(shí)現(xiàn)時(shí)候出了一個(gè)問題,算梯度的時(shí)候少加了lambda*W1,粗心害死人啊!

梯度檢驗(yàn):按照公式實(shí)現(xiàn)梯度檢驗(yàn),檢驗(yàn)實(shí)現(xiàn)的梯度是否正確。

?
1 2 3 4 5 6 for i=1 :(size(theta,1)) ????e = zeros(size(theta)); ????e(i)=EPSILON; ????cha=(J(theta+e)-J(theta-e)); ????numgrad(i)=cha/(2*EPSILON); end

看到運(yùn)行結(jié)果

只差10^-12數(shù)量級,說明梯度檢驗(yàn)的實(shí)現(xiàn)沒錯(cuò)

訓(xùn)練以及結(jié)果:

最后運(yùn)行得到結(jié)果如下:

可以看到學(xué)習(xí)出來的結(jié)果基本是圖片相互正交的部分,相當(dāng)于傅立葉變換中不同頻率正弦波,相當(dāng)于很多正交的基,這些“基”以一定的權(quán)重相加,就能夠近似組成任何一個(gè)8x8的圖片塊。

另外值得一提的是,對于梯度下降算法,在這里使用的是L-BFGS算法,對于這個(gè)算法,我們不能將它用于商業(yè)用途,若用與商業(yè)用途的話,可以使用fminlbfgs函數(shù),他比L-BFGS慢但可用于商業(yè)用途。

?

本博客(http://www.cnblogs.com/cj695/)未標(biāo)明轉(zhuǎn)載的內(nèi)容均為本站原創(chuàng),非商業(yè)用途轉(zhuǎn)載時(shí)請署名(77695)并注明來源(http://www.cnblogs.com/cj695/)。商業(yè)用途請聯(lián)系作者(77695)QQ:646710030。作者(77695)保留本博客所有內(nèi)容的一切權(quán)利。

總結(jié)

以上是生活随笔為你收集整理的深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。