1. 程式人生 > >深度學習之收斂問題

深度學習之收斂問題

bat 模擬 訓練 gin i-o 都是 wid 分類 number

http://blog.csdn.net/xlbryant/article/details/48470987

1.數據庫太小一般不會帶來不收斂的問題,只要你一直在train總會收斂(rp問題跑飛了不算)。反而不收斂一般是由於樣本的信息量太大導致網絡不足以fit住整個樣本空間。樣本少只可能帶來過擬合的問題,你看下你的training set上的loss收斂了嗎?如果只是validate set上不收斂那就說明overfitting了,這時候就要考慮各種anti-overfit的trick了,比如dropout,SGD,增大minibatch的數量,減少fc層的節點數量,momentum,finetune等。
2.learning rate設大了會帶來跑飛(loss突然一直很大)的問題

,這個是新手最常見的情況——為啥網絡跑著跑著看著要收斂了結果突然飛了呢?可能性最大的原因是你用了relu作為激活函數的同時使用了softmax或者帶有exp的函數做分類層的loss函數。當某一次訓練傳到最後一層的時候,某一節點激活過度(比如100),那麽exp(100)=Inf,發生溢出,bp後所有的weight會變成NAN,然後從此之後weight就會一直保持NAN,於是loss就飛起來辣。會為了模擬這個情況,我復現了一下一年前我的一次失敗的實驗。我花了整個過程的loss曲線:
技術分享其中紅色是loss,綠色是accuracy。可以看出在2300左右的時候跑飛了一次,不過所幸lr設的並不是非常大所以又拉了回來。如果lr設的過大會出現跑飛再也回不來的情況。這時候你停一下隨便挑一個層的weights看一看,很有可能都是NAN了。對於這種情況建議用二分法嘗試。0.1~0.0001.不同模型不同任務最優的lr都不一樣。
3.盡量收集更多的數據。
有個方法是爬flickr,找名人標簽,然後稍微人工剔除一下就能收集一套不錯的樣本。其實收集樣本不在於多而在於hard,比如你收集了40張基本姿態表情相同的同一個人的圖片不如收集他的10張不同表情的圖片。之前做過試驗,50張variance大的圖per person和300多張類似的圖per person訓練出來的模型後者就比前者高半個點。
4.盡量用小模型。如果數據太少盡量縮小模型復雜度。考慮減少層數或者減少kernel number。
=======================
看到這個問題的時候我正好在訓練一個10,000 class face identify的網絡,感覺很有緣所以小答一下。估計是運氣好一次就收斂了~附accuracy的圖(我是從random的googlenet開始train的,第100k次訓練的時候做了finetune)。

深度學習之收斂問題