自己在實現 dropout 的時候遇到的一些問題,遇到到過擬合的情況,想通過 dropout 減少過擬合,提高識別成功率。
本文首發於卷積神經網路(CNN)入門講解
不過大家不用擔心,dropout肯定用還是可以用的,谷歌只是想特定時刻,利用專利保護或者對抗某些競爭對手或者不良企業
上圖特徵清晰明了,相必大家一眼就能認出是誰了把
所以你看,每次訓練都隨機讓一定神經元停止參與運算,簡單的操作讓我們由一個模型演變成四個模型:
這樣就出現了一個問題,就好比
我覺得都可以,反正這個東西的思想是保證魯棒性,擾動可以用多種方式實現,可以丟通路,可以丟輸出,可以加雜訊,只要擾動了就行。
我們都知道Dropout可以隨機刪除網路中的神經單元,它為什麼可以通過正則化發揮如此大的作用呢? 直觀上理解:神經網路不依賴於任何一個具體的輸入特徵,因為該單元的輸入可能隨時被清除,因此該單元通過這種方式傳播下去,並為單元的輸入增加一點權重,通過傳播所有權重, dropout將產生收縮權重的平方範數的效果,和$L2$正則化類似;實施 dropout的結果使它會壓縮權重,並完成一些預防過擬合的外層正則化; $L2$對不同權重的衰減是不同的,它取決於激活函數倍增的大小。
dropout的功能類似於 $L2$正則化,與 $L2$正則化不同的是應用方式不同會帶來一點點小變化,甚至更適用於不同的輸入範圍。
dropout實施的另一個細節是,要為神經網路中的每一層選擇一個keep_prob,即該層節點保留的概率。不同層的keep_prob可以變化。對於網路中前面的層,它的keep_prob應該相對較低。對於其它層,過擬合可能沒那麼嚴重,它們的keep_prob可能高一些。如果在某一層,我們不必擔心過擬合問題,可以將keep_prob設置成1。
對於有可能出現過擬合,且含有諸多參數的層,我們可以把 keep_prob設置成比較小的值,以便應用更強大的 dropout,有點像在處理 $L2$正則化的正則化參數$lambda$。
總結一下,dropout大致有如下作用:
我們知道,在每一層使用dropout後,都會對沒有被dropout掉的神經元進行rescale。即$rescale = 1/(1-keep_prob)$。此步驟是為了彌補因為隨即刪除節點而造成的輸出減少的副作用。
==所以dropout時,權重並沒有被丟棄,只是後面需要對未丟棄神經元做一個rescale來保持期望輸出大小不變。實際丟棄的是就是神經元的輸出。==
參考:
Dropout解決過擬合問題
吳恩達,改善深層神經網路:超參數調試、正則化以及優化
使用dropout丟棄輸出(激活值),使用dropconnect[Wan2013]丟棄權重。
When training with Dropout, a randomly selected subset of activations are set to zero within each layer. DropConnect instead sets a randomly selected subset of weights within the network to zero.
[Wan2013]: Wan, L., Zeiler, M., Zhang, S., Le Cun, Y., Fergus, R. (2013, February). Regularization of neural networks using dropconnect. In International conference on machine learning (ICML 2013) (pp. 1058-1066).
丟的是輸出,樓上說丟權重的應該是deep compression的剪枝吧,pruning。
輸出
丟棄輸出,丟棄權重那個忘記叫什麼名字了,好像不叫drop out?建議看一下cs231n