天天看點

DropoutDropout

Dropout

  • Dropout
    • 目的
    • 方法
    • 這樣是否改變了輸出的分布?怎麼解決的?
    • 那dropout為什麼能緩解過拟合?
    • 可以換一個角度解釋嗎?
    • 一般dropout中的超參數p選為多少?為什麼?
    • dropout還有什麼作用?
    • dropout有什麼缺點?為什麼很多人覺得BN層可以取代dropout?

Dropout

目的

減少特征檢測器(隐層節點)間的互相作用,檢測器互相作用是指某些檢測器依賴其他檢測器才能發揮作用

方法

以機率p來失活(pytorch)部分神經元,隻用在訓練時,測試時全部神經元都要使用,不會太依賴某些局部特征。

測試時的兩種情況:

1)在每個神經元對應的權重w需乘以p,即。(原理:為了使測試時期望與訓練時dropout後的期望對應,需給w乘以p。)

2)inverted dropout, 訓練時:将dropout後保留下來的神經元權重乘以1/p,稱作懲罰項。這樣訓練時權重擴大,測試時不需要再乘以p以縮小

這樣是否改變了輸出的分布?怎麼解決的?

設不使用dropout時,一個神經元的輸出的期望E=x。

使用dropout後,在訓練過程中,對其輸出以機率p進行保留,其輸出的期望

E = p x + ( 1 − p ) ∗ 0 = p x E=px+(1-p)*0=px E=px+(1−p)∗0=px

為了使其在測試時輸出的期望依然為px,我們對參數乘以p,輸出的期望為E=px。

第一個px代表選擇性保留,第二個px表示縮放。

那dropout為什麼能緩解過拟合?

在每一個batchsize中,訓練的神經元的集合都不同,相當于訓練了很多個模型。

在測試階段,相當于多個模型共同作用,抵消了個别模型對于極端資料的拟合,進而緩解過拟合。

同時,一些神經元組合不會經常被一起訓練,緩解了它們之間的依賴關系,緩解了過拟合。

可以換一個角度解釋嗎?

不使用dropout時的A樣本和使用dropout時的B樣本,可能會使網絡産生類似甚至相同的輸出。

是以,在使用dropout時,相當于在訓練資料中增加了一個A樣本,而原資料庫中可能沒有A樣本。

最後相當于做了資料集的擴增,增加了資料量,緩解了過拟合。

一般dropout中的超參數p選為多少?為什麼?

一般選為0.5。

設神經元總數為n,保留的機率為p,那麼被保留的神經元個數為pn。

如果說訓練不同的神經元集合相當于訓練不同的模型

那麼一共訓練了C(n,pn)(組合公式,n為下标,pn為上标)

當p=0.5時,訓練的模型數量最多,可以最大程度緩解過拟合。

dropout還有什麼作用?

輸入添加p接近1的dropout層,相當于對輸入資料加了噪聲,實作了樣本增強。

dropout有什麼缺點?為什麼很多人覺得BN層可以取代dropout?

1)訓練速度慢

每次訓練的神經元變少了,每個子模型的能力在一定程度上降低,拟合速度下降,訓練時間變長。

2)局限性較強

比較适合全連接配接層。

對于卷積層,比較依賴特征圖中每個元素之間的關系。

而且,卷積層的權值共享和局部連接配接在一定程度上已經實作了參數的稀疏化。

強行dropout效果未必會變好。

反之,BN層規範了每一個神經元的輸入。

不使用BN層,每一個神經元的輸入分布變化較大,或者每層的神經元的輸入分布存在差異,

每次反向傳播最佳的學習率不同,網絡需要遷就學習率最小的,訓練較慢。

使用BN層後,就可以适當增加學習率,提升訓練速度。

同時,BN層對于卷積層也是适用的,通用性較強。

綜上,BN層更全面,dropout更适用于全連接配接層。BN層可能暫時還無法全面取代dropout。

(這句就屬于仁者見仁智者見智了)

可以使用dropblock,

Dropblock的研究者認為,卷積層對于dropout并不敏感.。

因為卷積層通常是三層連用:卷積+激活+池化層,池化層本身就是對相鄰單元起作用。

而且即使随機丢棄,卷積層仍然可以從相鄰的激活單元學習到相同的資訊。是以,在全連接配接層上效果很好的Dropout在卷積層上效果并不好。相當于把cutout應用到特征圖。