神經網路最佳化篇:如何理解 dropout(Understanding Dropout)

Oten發表於2023-12-26

理解 dropout

Dropout可以隨機刪除網路中的神經單元,為什麼可以透過正則化發揮如此大的作用呢?

直觀上理解:不要依賴於任何一個特徵,因為該單元的輸入可能隨時被清除,因此該單元透過這種方式傳播下去,併為單元的四個輸入增加一點權重,透過傳播所有權重,dropout將產生收縮權重的平方範數的效果,和之前講的\(L2\)正則化類似;實施dropout的結果實它會壓縮權重,並完成一些預防過擬合的外層正則化;\(L2\)對不同權重的衰減是不同的,它取決於啟用函式倍增的大小。

總結一下,dropout的功能類似於\(L2\)正則化,與\(L2\)正則化不同的是應用方式不同會帶來一點點小變化,甚至更適用於不同的輸入範圍。

第二個直觀認識是,從單個神經元入手,如圖,這個單元的工作就是輸入並生成一些有意義的輸出。透過dropout,該單元的輸入幾乎被消除,有時這兩個單元會被刪除,有時會刪除其它單元,就是說,用紫色圈起來的這個單元,它不能依靠任何特徵,因為特徵都有可能被隨機清除,或者說該單元的輸入也都可能被隨機清除。不願意把所有賭注都放在一個節點上,不願意給任何一個輸入加上太多權重,因為它可能會被刪除,因此該單元將透過這種方式積極地傳播開,併為單元的四個輸入增加一點權重,透過傳播所有權重,dropout將產生收縮權重的平方範數的效果,和之前講過的\(L2\)正則化類似,實施dropout的結果是它會壓縮權重,並完成一些預防過擬合的外層正則化。

事實證明,dropout被正式地作為一種正則化的替代形式,\(L2\)對不同權重的衰減是不同的,它取決於倍增的啟用函式的大小。

總結一下,dropout的功能類似於\(L2\)正則化,與\(L2\)正則化不同的是,被應用的方式不同,dropout也會有所不同,甚至更適用於不同的輸入範圍。

實施dropout的另一個細節是,這是一個擁有三個輸入特徵的網路,其中一個要選擇的引數是keep-prob,它代表每一層上保留單元的機率。所以不同層的keep-prob也可以變化。第一層,矩陣\(W^{[1]}\)是7×3,第二個權重矩陣\(W^{[2]}\)是7×7,第三個權重矩陣\(W^{[3]}\)是3×7,以此類推,\(W^{[2]}\)是最大的權重矩陣,因為\(W^{[2]}\)擁有最大引數集,即7×7,為了預防矩陣的過擬合,對於這一層,認為這是第二層,它的keep-prob值應該相對較低,假設是0.5。對於其它層,過擬合的程度可能沒那麼嚴重,它們的keep-prob值可能高一些,可能是0.7,這裡是0.7。如果在某一層,不必擔心其過擬合的問題,那麼keep-prob可以為1,為了表達清除,用紫色線筆把它們圈出來,每層keep-prob的值可能不同。

注意keep-prob的值是1,意味著保留所有單元,並且不在這一層使用dropout,對於有可能出現過擬合,且含有諸多引數的層,可以把keep-prob設定成比較小的值,以便應用更強大的dropout,有點像在處理\(L2\)正則化的正則化引數\(\lambda\),嘗試對某些層施行更多正則化,從技術上講,也可以對輸入層應用dropout,有機會刪除一個或多個輸入特徵,雖然現實中通常不這麼做,keep-prob的值為1,是非常常用的輸入值,也可以用更大的值,或許是0.9。但是消除一半的輸入特徵是不太可能的,如果遵守這個準則,keep-prob會接近於1,即使對輸入層應用dropout

總結一下,如果擔心某些層比其它層更容易發生過擬合,可以把某些層的keep-prob值設定得比其它層更低,缺點是為了使用交叉驗證,要搜尋更多的超級引數,另一種方案是在一些層上應用dropout,而有些層不用dropout,應用dropout的層只含有一個超級引數,就是keep-prob

結束前分享兩個實施過程中的技巧,實施dropout,在計算機視覺領域有很多成功的第一次。計算視覺中的輸入量非常大,輸入太多畫素,以至於沒有足夠的資料,所以dropout在計算機視覺中應用得比較頻繁,有些計算機視覺研究人員非常喜歡用它,幾乎成了預設的選擇,但要牢記一點,dropout是一種正則化方法,它有助於預防過擬合,因此除非演算法過擬合,不然是不會使用dropout的,所以它在其它領域應用得比較少,主要存在於計算機視覺領域,因為通常沒有足夠的資料,所以一直存在過擬合,這就是有些計算機視覺研究人員如此鍾情於dropout函式的原因。直觀上認為不能概括其它學科。

dropout一大缺點就是代價函式\(J\)不再被明確定義,每次迭代,都會隨機移除一些節點,如果再三檢查梯度下降的效能,實際上是很難進行復查的。定義明確的代價函式\(J\)每次迭代後都會下降,因為所最佳化的代價函式\(J\)實際上並沒有明確定義,或者說在某種程度上很難計算,所以失去了除錯工具來繪製這樣的圖片。通常會關閉dropout函式,將keep-prob的值設為1,執行程式碼,確保J函式單調遞減。然後開啟dropout函式,希望在dropout過程中,程式碼並未引入bug。覺得也可以嘗試其它方法,雖然並沒有關於這些方法效能的資料統計,但可以把它們與dropout方法一起使用。

相關文章