1、dropout簡述
dropout是解決神經網路模型過擬合的一種常用方法。dropout是指在神經網路訓練過程中,以一定的概率隨機丟棄神經元(注意是暫時丟棄),以減少神經元之間的依賴性,從而提高模型的泛化能力。
dropout類似ensemble方法(組合多個模型,以獲得更好的效果,使整合的模型具有更強的泛化能力)
區別在於:dropout在訓練過程中每次迭代都會得到乙個新模型,最終結果是多個模型的融合,得到的只有乙個模型,一組引數。
2、dropout給模型帶來的改變
(1)訓練層面
加入dropout後模型訓練過程,都要計算概率,確定哪些神經元被丟棄,被丟棄的神經元輸出變為0
沒有dropout:
加入dropout:
(2)測試層面
訓練過程,神經元被丟棄的概率為(1-p),被保留下來的可能性為p;
測試過程,神經元一直都在,在測試階段必須**出在訓練階段使用的網路集的行為,所以每個引數都要乘以p。
(注意這個p是神經元保留下來的概率)
3、a practical guide for training dropout networks
(1)network size:採用dropout後,隱含層節點數n要按照n/p增加;
(2)learning rate and momentum:dropout的引入產生了很多雜訊,為了降低雜訊的影響,可以通過以下兩種方式:learning rate的取值是普通網路的10-100倍;momentum:momentum對於標準網路一般採用0.9,對於dropout網路一般是0.95-0.99。兩種可以同時使用
(3)max-norm regularization:大的learning rate and momentum會造成網路引數太大,一般給隱含層權重的norm乙個上限c,c一般取值3-4。
(4)dropout rate
一般取值0.5~0.8。經過交叉驗證,隱含節點dropout率等於0.5的時候效果最好,原因是0.5的時候dropout隨機生成的網路結構最多。
更多詳細內容請閱讀:dropout-a ****** way to prevent neural networks from overfittingimport numpy as np
defdropout
(x, p, mode=
'train'):
keep_prob =
1- p
if mode ==
'train'
: x *= np.random.binomial(
1, keep_prob, size=x.shape)
else
: x *= keep_prob
return x
# 簡化,直接在訓練階段對輸入進行rescale,測試階段則不需任何操作
# 參考:
defdropout
(x, p, mode=
'train'):
keep_prob =
1- p
if mode ==
'train'
: x *= np.random.binomial(
1, keep_prob, size=x.shape)
/ keep_prob
return x
參考:深度學習網路大殺器之dropout——深入解析dropout
dropout為何能防止過擬合?
知識延伸:
hinton提出的經典防過擬合方法dropout,只是sdr的特例
深度學習 Drop out
1.原理 在每個訓練批次的前向傳播中,以概率p保留部分神經元。目的是 簡化神經網路的複雜度,降低過擬合風險。根據保留概率p計算乙個概率向量r 1,0,1,0,0,1,1.然後保留部分節點。2.注意點 因為dropout一般只使用在訓練時,而測試時所有的神經元都會保留。為了使訓練和測試時對應,可以有以...
深度學習中的Dropout原理介紹
如果網路的問題在於連線密集,那麼久強制讓它稀疏,基於這種想法的演算法就是dropout演算法。因為在機器學習的一些模型中,如果模型的引數太多,而訓練樣本又太少的話,這樣訓練出來的模型很容易產生過擬合現象。在訓練bp網路時經常遇到的乙個問題,過擬合指的是模型在訓練資料上損失函式比較小,準確率較高 如果...
深度學習 dropout理解
深度神經網路的訓練是一件非常困難的事,涉及到很多因素,比如損失函式的非凸性導致的區域性最優值 計算過程中的數值穩定性 訓練過程中的過擬合等。其中,過擬合是很容易發生的現象,也是在訓練dnn中必須要解決的問題。過擬合我們先來講一下什麼是 過擬合 過擬合是指模型訓練到一定程度後,在訓練集上得到的測試誤差...