神经网络之dropout层
一:引言
因為在機器學(xué)習(xí)的一些模型中,如果模型的參數(shù)太多,而訓(xùn)練樣本又太少的話,這樣訓(xùn)練出來的模型很容易產(chǎn)生過擬合現(xiàn)象。在訓(xùn)練bp網(wǎng)絡(luò)時經(jīng)常遇到的一個問題,過擬合指的是模型在訓(xùn)練數(shù)據(jù)上損失函數(shù)比較小,預(yù)測準(zhǔn)確率較高(如果通過畫圖來表示的話,就是擬合曲線比較尖,不平滑,泛化能力不好),但是在測試數(shù)據(jù)上損失函數(shù)比較大,預(yù)測準(zhǔn)確率較低。
常用的防治過擬合的方法是在模型的損失函數(shù)中,需要對模型的參數(shù)進行“懲罰”,這樣的話這些參數(shù)就不會太大,而越小的參數(shù)說明模型越簡單,越簡單的模型則越不容易產(chǎn)生過擬合現(xiàn)象。因此在添加權(quán)值懲罰項后,應(yīng)用梯度下降算法迭代優(yōu)化計算時,如果參數(shù)theta比較大,則此時的正則項數(shù)值也比較大,那么在下一次更新參數(shù)時,參數(shù)削減的也比較大。可以使擬合結(jié)果看起來更平滑,不至于過擬合。
Dropout是hintion最近2年提出的;為了防止模型過擬合,Dropout可以作為一種trikc供選擇。在hinton的論文摘要中指出,在每個訓(xùn)練批次中,通過忽略一半的特征檢測器(讓一半的隱層節(jié)點值為0),可以明顯地減少過擬合現(xiàn)象。這種方式可以減少特征檢測器間的相互作用,檢測器相互作用是指某些檢測器依賴其他檢測器才能發(fā)揮作用。
二 Dropout方法
訓(xùn)練階段:
1.Dropout是在標(biāo)準(zhǔn)的bp網(wǎng)絡(luò)的的結(jié)構(gòu)上,使bp網(wǎng)的隱層激活值,以一定的比例v變?yōu)?,即按照一定比例v,隨機地讓一部分隱層節(jié)點失效;在后面benchmark實驗測試時,部分實驗讓隱層節(jié)點失效的基礎(chǔ)上,使輸入數(shù)據(jù)也以一定比例(試驗用20%)是部分輸入數(shù)據(jù)失效(這個有點像denoising autoencoder),這樣得到了更好的結(jié)果。
2.去掉權(quán)值懲罰項,取而代之的事,限制權(quán)值的范圍,給每個權(quán)值設(shè)置一個上限范圍;如果在訓(xùn)練跟新的過程中,權(quán)值超過了這個上限,則把權(quán)值設(shè)置為這個上限的值(這個上限值得設(shè)定作者并沒有說設(shè)置多少最好,后面的試驗中作者說這個上限設(shè)置為15時,最好;為啥?估計是交叉驗證得出的實驗結(jié)論)。
這樣處理,不論權(quán)值更新量有多大,權(quán)值都不會過大。此外,還可以使算法使用一個比較大的學(xué)習(xí)率,來加快學(xué)習(xí)速度,從而使算法在一個更廣闊的權(quán)值空間中搜索更好的權(quán)值,而不用擔(dān)心權(quán)值過大。
測試階段:
在網(wǎng)絡(luò)前向傳播到輸出層前時隱含層節(jié)點的輸出值都要縮減到(1-v)倍;例如正常的隱層輸出為a,此時需要縮減為a(1-v)。
這里我的解釋是:假設(shè)比例v=0.5,即在訓(xùn)練階段,以0.5的比例忽略隱層節(jié)點;那么假設(shè)隱層有80個節(jié)點,每個節(jié)點輸出值為1,那么此時只有40個節(jié)點正常工作;也就是說總的輸出為40個1和40個0;輸出總和為40;而在測試階段,由于我們的權(quán)值已經(jīng)訓(xùn)練完成,此時就不在按照0.5的比例忽略隱層輸出,假設(shè)此時每個隱層的輸出還是1,那么此時總的輸出為80個1,明顯比dropout訓(xùn)練時輸出大一倍(由于dropout比例為0.5);所以為了得到和訓(xùn)練時一樣的輸出結(jié)果,就縮減隱層輸出為a(1-v);即此時輸出80個0.5,總和也為40.這樣就使得測試階段和訓(xùn)練階段的輸出“一致”了。(個人見解)
三 Dropout原理分析
Dropout可以看做是一種模型平均,所謂模型平均,顧名思義,就是把來自不同模型的估計或者預(yù)測通過一定的權(quán)重平均起來,在一些文獻中也稱為模型組合,它一般包括組合估計和組合預(yù)測。
Dropout中哪里體現(xiàn)了“不同模型”;這個奧秘就是我們隨機選擇忽略隱層節(jié)點,在每個批次的訓(xùn)練過程中,由于每次隨機忽略的隱層節(jié)點都不同,這樣就使每次訓(xùn)練的網(wǎng)絡(luò)都是不一樣的,每次訓(xùn)練都可以單做一個“新”的模型;此外,隱含節(jié)點都是以一定概率隨機出現(xiàn),因此不能保證每2個隱含節(jié)點每次都同時出現(xiàn),這樣權(quán)值的更新不再依賴于有固定關(guān)系隱含節(jié)點的共同作用,阻止了某些特征僅僅在其它特定特征下才有效果的情況。
這樣dropout過程就是一個非常有效的神經(jīng)網(wǎng)絡(luò)模型平均方法,通過訓(xùn)練大量的不同的網(wǎng)絡(luò),來平均預(yù)測概率。不同的模型在不同的訓(xùn)練集上訓(xùn)練(每個批次的訓(xùn)練數(shù)據(jù)都是隨機選擇),最后在每個模型用相同的權(quán)重來“融合”,介個有點類似boosting算法。
http://m.blog.csdn.net/article/details?id=50890473
轉(zhuǎn)載于:https://www.cnblogs.com/zyber/p/6824980.html
總結(jié)
以上是生活随笔為你收集整理的神经网络之dropout层的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信 SQLite 数据库修复实践
- 下一篇: 如何为Apache JMeter开发插件