深度學習 Dropout原理及其python實現

2021-08-25 14:15:24 字數 2448 閱讀 2039

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隨機生成的網路結構最多。

import 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-a ****** way to prevent neural networks from overfitting

參考:深度學習網路大殺器之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中必須要解決的問題。過擬合我們先來講一下什麼是 過擬合 過擬合是指模型訓練到一定程度後,在訓練集上得到的測試誤差...