UFLDL即(unsupervised feature learning & deep learning)。這是斯坦福網(wǎng)站上的一篇經(jīng)典教程,。顧名思義,,你將在這篇這篇文章中學(xué)習(xí)到無(wú)監(jiān)督特征學(xué)習(xí)和深度學(xué)習(xí)的主要觀點(diǎn)。 UFLDL全文出處在這:http://ufldl./wiki/index.php/UFLDL%E6%95%99%E7%A8%8B,,本文為本人原創(chuàng),,參考了UFLDL的教程,是我自己個(gè)人對(duì)于這一系列教程的理解以及自己的實(shí)驗(yàn)結(jié)果,。非盈利性質(zhì)網(wǎng)站轉(zhuǎn)載請(qǐng)?jiān)谖恼麻_(kāi)頭處著名本文作者:77695,,來(lái)源http://www.cnblogs.com/cj695/。盈利性質(zhì)網(wǎng)站轉(zhuǎn)載請(qǐng)與作者聯(lián)系,,聯(lián)系方式在文章后面,。如未聯(lián)系,本人將通過(guò)一切可能且合法的途徑追繳相應(yīng)稿酬,。請(qǐ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作為輸入,,將輸入與對(duì)應(yīng)權(quán)值W(與x1,x2,。。,。相乘),,(與1相乘)相乘后求和,并將和放入激活函數(shù),,即可得到該神經(jīng)元的輸出,。我們稱這個(gè)神經(jīng)元的輸入-輸出映射關(guān)系其實(shí)就是一個(gè)邏輯回歸(logistic regression) 在這里激活函數(shù)我們用: 這是sigmoid函數(shù)的圖像 整個(gè)神經(jīng)元可以用一個(gè)公式表示: 神經(jīng)網(wǎng)絡(luò)就是很多個(gè)神經(jīng)元組合在一起,一個(gè)神經(jīng)元的輸出,,也可以是另外一個(gè)神經(jīng)元的輸入,,如下圖: 具體請(qǐng)直接查看UFLDL相應(yīng)教程,這里不再贅述,,下文一樣,。 反向傳導(dǎo)算法一個(gè)神經(jīng)網(wǎng)絡(luò)向前傳導(dǎo),其神經(jīng)元的參數(shù)可以是各種各樣的,,這樣也會(huì)導(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ù)組合有很多,,并不是每一種組合都好,,也不是說(shuō)越接近越好,當(dāng)W參數(shù)太大的時(shí)候,,會(huì)發(fā)生過(guò)擬合,,使得泛化能力不夠,因此我們引入所有W的平方和,,加入到代價(jià)函數(shù)中,,我們稱它叫懲罰項(xiàng)。我們使用梯度下降法,,求得最優(yōu)的W,,b這就是機(jī)器學(xué)習(xí)的整個(gè)過(guò)程。梯度下降中,,其實(shí)就是求得代價(jià)函數(shù)對(duì)W,b的偏導(dǎo)值。在計(jì)算偏導(dǎo)的時(shí)候,,因?yàn)閺?fù)合函數(shù)的求導(dǎo)法則: 可以看到,,要求整個(gè)懲罰函數(shù)的導(dǎo)數(shù)首先就要計(jì)算從懲罰函數(shù)開(kāi)始向后求導(dǎo),具體公式這里就不貼了,。 梯度檢驗(yàn)要檢測(cè)自己反向傳導(dǎo)得到的偏導(dǎo)函數(shù)是否正確,,這里有一種簡(jiǎn)單粗暴的方法,就是梯度檢驗(yàn),,通過(guò)對(duì)某一個(gè)參數(shù)加以及減一個(gè)較小的值的差除以2倍較小的值即可近似算出該點(diǎn)偏導(dǎo)值,,因此可以用來(lái)檢驗(yàn)偏導(dǎo)是否計(jì)算正確。但為什么我們不直接用這個(gè)計(jì)算代替求偏導(dǎo)函數(shù),,因?yàn)樘耍?/p> 在這里我們用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í)現(xiàn)生成數(shù)據(jù)集:即從所有10副512x512的圖片中取8x8的塊,一共取10000塊,。這是數(shù)據(jù)集的一些圖片,,可以看到這主要是一些自然圖片。 這里只粘貼所有自己實(shí)現(xiàn)部分的代碼,。
生成結(jié)果如下: 實(shí)現(xiàn)懲罰函數(shù)以及梯度函數(shù):按照之前的公式計(jì)算,,大家直接看代碼吧。
實(shí)現(xiàn)時(shí)候出了一個(gè)問(wèn)題,,算梯度的時(shí)候少加了lambda*W1,,粗心害死人啊,! 梯度檢驗(yàn):按照公式實(shí)現(xiàn)梯度檢驗(yàn),,檢驗(yàn)實(shí)現(xiàn)的梯度是否正確。
看到運(yùn)行結(jié)果 只差10^-12數(shù)量級(jí),,說(shuō)明梯度檢驗(yàn)的實(shí)現(xiàn)沒(méi)錯(cuò) 訓(xùn)練以及結(jié)果:最后運(yùn)行得到結(jié)果如下: 可以看到學(xué)習(xí)出來(lái)的結(jié)果基本是圖片相互正交的部分,,相當(dāng)于傅立葉變換中不同頻率正弦波,相當(dāng)于很多正交的基,,這些“基”以一定的權(quán)重相加,,就能夠近似組成任何一個(gè)8x8的圖片塊。 另外值得一提的是,,對(duì)于梯度下降算法,,在這里使用的是L-BFGS算法,,對(duì)于這個(gè)算法,我們不能將它用于商業(yè)用途,,若用與商業(yè)用途的話,,可以使用fminlbfgs函數(shù),他比L-BFGS慢但可用于商業(yè)用途,。
|
|
來(lái)自: mscdj > 《deep learning》