為了應對神經(jīng)網(wǎng)絡很容易過擬合的問題,2014年 Hinton 提出了一個神器罐寨,
**Dropout: A Simple Way to Prevent Neural Networks from Overfitting **
(original paper: http://jmlr.org/papers/v15/srivastava14a.html)
實驗結(jié)果:
dropout 是指在深度學習網(wǎng)絡的訓練過程中跋破,按照一定的概率將一部分神經(jīng)網(wǎng)絡單元暫時從網(wǎng)絡中丟棄瓶蝴,相當于從原始的網(wǎng)絡中找到一個更瘦的網(wǎng)絡
在大規(guī)模的神經(jīng)網(wǎng)絡中有這樣兩個缺點:1. 費時毒返;2. 容易過擬合
對于一個有 N 個節(jié)點的神經(jīng)網(wǎng)絡,有了 dropou t后舷手,就可以看做是 2^N 個模型的集合了拧簸,但此時要訓練的參數(shù)數(shù)目卻是不變的,這就緩解了費時的問題男窟。
論文中做了這樣的類比狡恬,無性繁殖可以保留大段的優(yōu)秀基因,而有性繁殖則將基因隨機拆了又拆蝎宇,破壞了大段基因的聯(lián)合適應性弟劲,但是自然選擇中選擇了有性繁殖,物競天擇兔乞,適者生存,可見有性繁殖的強大凉唐。
dropout 也能達到同樣的效果庸追,它強迫一個神經(jīng)單元,和隨機挑選出來的其他神經(jīng)單元共同工作台囱,消除減弱了神經(jīng)元節(jié)點間的聯(lián)合適應性淡溯,增強了泛化能力。
每層 Dropout 網(wǎng)絡和傳統(tǒng)網(wǎng)絡計算的不同之處:
相應的公式:
對于單個神經(jīng)元是這樣的:
在訓練時簿训,每個神經(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 訓練,并用 10-fold cross validation 得到 classification accuracy 為: 86.04%
在 input 和 第一個隱藏層之間所袁,插入一層 dropout 鳄哭,rate=20%,意思是纲熏,5個神經(jīng)元里面有一個被隨機去掉后,accuracy 為:82.18%锄俄,下降了一點
在兩個隱藏層之間局劲,第二個隱藏層和 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.reibang.com/p/28f02bb59fe5
也許可以找到你想要的