關於 Dropout 可以防止過擬合,出處:深度學習領域大神 Hinton,在2012年文獻:《Improving neural networks by preventing co-adaptation of feature detectors》提出的。
【Dropout 可以防止過擬合】
運用了dropout的訓練過程,相當於訓練了很多個只有半數隱層單元的神經網絡(后面簡稱為“半數網絡”),每一個這樣的半數網絡,都可以給出一個分類結果,這些結果有的是正確的,有的是錯誤的。隨着訓練的進行,大部分半數網絡都可以給出正確的分類結果,那么少數的錯誤分類結果就不會對最終結果造成大的影響。
在每次訓練的時候,讓一半的特征檢測器停過工作,這樣可以提高網絡的泛化能力,Hinton把它稱之為dropout。
Hinton認為:過擬合,可以通過阻止某些特征的協同作用來緩解。在每次訓練的時候,每個神經元有百分之50的幾率被移除,這樣可以讓一個神經元的出現不應該依賴於另外一個神經元。
每次將一個神經網絡進行dropout之后就是對這個網絡進行了瘦身處理,有一些參數被dropout掉,得到了一個更加簡單的網絡。
【迭代過程】
1. 在訓練開始時,我們隨機地“刪除”一半的隱層單元,視它們為不存在;
2. 保持輸入輸出層不變,按照BP算法更新神經網絡中的權值(虛線連接的單元不更新,因為它們被“臨時刪除”了)。
以上就是一次迭代的過程,在第二次迭代中,也用同樣的方法,只不過這次刪除的那一半隱層單元,跟上一次刪除掉的肯定是不一樣的,因為我們每一次迭代都是“隨機”地去刪掉一半。第三次、第四次……都是這樣,直至訓練結束。
另外一個可以防止過擬合的原因是:我們可以把dropout理解為模型平均。 假設我們要實現一個圖片分類任務,我們設計出了1000個網絡,這1000個網絡,我們可以設計得各不相同,然后我們對這1000個網絡進行訓練,訓練完后我們采用平均的方法,進行預測,這樣肯定可以提高網絡的泛化能力,或者說可以防止過擬合,因為這1000個網絡,它們各不相同,可以提高網絡的穩定性。而所謂的dropout我們可以這么理解,這 n 個網絡,它們權值共享,並且具有相同的網絡層數(這樣可以大大減小計算量)。我們每次dropout后,網絡模型都可以看成是整個網絡的子網絡。(需要注意的是如果采用dropout,訓練時間大大延長,但是對測試階段沒影響)。
根據個人實際經驗,dropout在數據量比較小的時候,不建議使用,效果並沒有特別好,dropout的值一般來說取值為0.5效果會比較好。
【Reference】