深度學習1:減小過擬合的方式

參考:https://blog.csdn.net/heyongluoyao8/article/details/49429629

https://blog.csdn.net/Leo_Xu06/article/details/71320727

https://zhuanlan.zhihu.com/p/33058988?edition=yidianzixun&utm_source=yidianzixun&yidian_docid=0IAfAEZE

 

因爲數據量的限制以及訓練參數的增多,幾乎所有大型卷積神經網絡都面臨着過擬合的問題,目前常用的防止過擬合的方法有下面幾種:

 1、data augmentation: 所有的過擬合無非就是訓練樣本的缺乏和訓練參數的增加。一般要想獲得更好的模型,需要大量的訓練參數,這也是爲什麼CNN網絡越來越深的原因之一,而如果訓練樣本缺乏多樣性,那再多的訓練參數也毫無意義,因爲這造成了過擬合,訓練的模型泛化能力相應也會很差。大量數據帶來的特徵多樣性有助於充分利用所有的訓練參數。data augmentation的手段一般有: 1)收集更多數據  2)對已有數據進行crop裁剪,flip翻轉,加光照等操作  3)利用生成模型(比如GAN)生成一些數據。
 

2、weight decay: 常用的weight decay有L1和L2正則化,L1較L2能夠獲得更稀疏的參數,但L1零點不可導。在損失函數中,weight decay是放在正則項(regularization)前面的一個係數,正則項一般指示模型的複雜度,所以weight decay的作用是調節模型複雜度對損失函數的影響,若weight decay很大,則複雜的模型損失函數的值也就大。

L1、L2正則的公式:https://blog.csdn.net/heyongluoyao8/article/details/49429629

3、 提前終止: 提前停止其實是另一種正則化方法,就是在訓練集和驗證集上,一次迭代之後計算各自的錯誤率,當在驗證集上的錯誤率最小,在沒開始增大之前停止訓練,因爲如果接着訓練,訓練集上的錯誤率一般是會繼續減小的,但驗證集上的錯誤率會上升,這就說明模型的泛化能力開始變差了,出現過擬合問題,及時停止能獲得泛化更好的模型。如下圖(左邊是訓練集錯誤率,右圖是驗證集錯誤率,在虛線處提前結束訓練):
 

4、dropout : CNN訓練過程中使用dropout是在每次訓練過程中隨機將部分神經元的權重置爲0,即讓一些神經元失效,這樣可以縮減參數量,避免過擬合,關於dropout爲什麼有效,有兩種觀點:1)每次迭代隨機使部分神經元失效使得模型的多樣性增強,獲得了類似多個模型ensemble的效果,避免過擬合  2)dropout其實也是一個data augmentation的過程,它導致了稀疏性,使得局部數據簇差異性更加明顯,這也是其能夠防止過擬合的原因 ?3)它強迫一個神經單元,和隨機挑選出來的其他神經單元共同工作,達到好的效果。消除減弱了神經元節點間的聯合適應性,增強了泛化能力。關於dropout的解釋可參考這篇博客https://blog.csdn.net/stdcoutzyx/article/details/49022443。單獨使用 dropout 就可以使得模型獲得良好表現,不過,如果搭配Max-Norm 食用的話,那麼效果更佳https://zhuanlan.zhihu.com/p/33058988?edition=yidianzixun&utm_source=yidianzixun&yidian_docid=0IAfAEZE

5、bagging 和其他集成方法(主要用於機器學習中)

其實bagging的方法是可以起到正則化的作用,因爲正則化就是要減少泛化誤差,而bagging的方法可以組合多個模型起到減少泛化誤差的作用. 在深度學習中同樣可以使用此方法,但是其會增加計算和存儲的成本.(bagging得到的各個模型對圖像處理n次,投票得出結果)http://www.imooc.com/article/details/id/30564


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章