為了應(yīng)對神經(jīng)網(wǎng)絡(luò)很容易過擬合的問題,2014年 Hinton 提出了一個神器,
**Dropout: A Simple Way to Prevent Neural Networks from Overfitting **
(original paper: http://jmlr.org/papers/v15/srivastava14a.html)
實(shí)驗(yàn)結(jié)果:

dropout 是指在深度學(xué)習(xí)網(wǎng)絡(luò)的訓(xùn)練過程中,按照一定的概率將一部分神經(jīng)網(wǎng)絡(luò)單元暫時從網(wǎng)絡(luò)中丟棄,相當(dāng)于從原始的網(wǎng)絡(luò)中找到一個更瘦的網(wǎng)絡(luò)

在大規(guī)模的神經(jīng)網(wǎng)絡(luò)中有這樣兩個缺點(diǎn):1. 費(fèi)時;2. 容易過擬合
對于一個有 N 個節(jié)點(diǎn)的神經(jīng)網(wǎng)絡(luò),有了 dropou t后,就可以看做是 2^N 個模型的集合了,但此時要訓(xùn)練的參數(shù)數(shù)目卻是不變的,這就緩解了費(fèi)時的問題。
論文中做了這樣的類比,無性繁殖可以保留大段的優(yōu)秀基因,而有性繁殖則將基因隨機(jī)拆了又拆,破壞了大段基因的聯(lián)合適應(yīng)性,但是自然選擇中選擇了有性繁殖,物競天擇,適者生存,可見有性繁殖的強(qiáng)大。
dropout 也能達(dá)到同樣的效果,它強(qiáng)迫一個神經(jīng)單元,和隨機(jī)挑選出來的其他神經(jīng)單元共同工作,消除減弱了神經(jīng)元節(jié)點(diǎn)間的聯(lián)合適應(yīng)性,增強(qiáng)了泛化能力。
每層 Dropout 網(wǎng)絡(luò)和傳統(tǒng)網(wǎng)絡(luò)計(jì)算的不同之處:

相應(yīng)的公式:

對于單個神經(jīng)元是這樣的:

在訓(xùn)練時,每個神經(jīng)單元都可能以概率 p 去除;
在測試階段,每個神經(jīng)單元都是存在的,權(quán)重參數(shù)w要乘以p,成為:pw。
看一下在 Keras 里面怎么用 dropout
問題:binary 分類,根據(jù)數(shù)據(jù)集,識別 rocks 和 mock-mines
數(shù)據(jù)集下載:存在 sonar.csv 里面,http://archive.ics.uci.edu/ml/machine-learning-databases/undocumented/connectionist-bench/sonar/sonar.all-data
Baseline 中,NN 具有兩個 隱藏層,分別有 60 和 30 個神經(jīng)元,用 SGD 訓(xùn)練,并用 10-fold cross validation 得到 classification accuracy 為: 86.04%



在 input 和 第一個隱藏層之間,插入一層 dropout ,rate=20%,意思是,5個神經(jīng)元里面有一個被隨機(jī)去掉后,accuracy 為:82.18%,下降了一點(diǎn)

在兩個隱藏層之間,第二個隱藏層和 output 層之間加入 dropout 后,accuracy 為:84.00%

可見本例并不適合用 dropout 的。
參考資料:
http://blog.csdn.net/stdcoutzyx/article/details/49022443
http://machinelearningmastery.com/dropout-regularization-deep-learning-models-keras/
推薦閱讀 歷史技術(shù)博文鏈接匯總
http://www.itdecent.cn/p/28f02bb59fe5
也許可以找到你想要的