神經(jīng)網(wǎng)絡訓練的一些建議

你或許可以輕松的使用tensorflow等深度學習框架構建一個你想要的深度學習模型,但是在訓練的過程中總是會出現(xiàn)一些這樣那樣的問題,那么下面就讓我介紹一些常出現(xiàn)的問題和解決的方案,畢竟算法工程師也叫調參師嘛

先放上地表最強寶可夢大師的一張關于深度學習模型訓練的圖


神經(jīng)網(wǎng)絡的訓練其實就是這么幾步,那么下面我們就要說一下它容易出些什么樣的問題,需要怎么去解決。

有的時候你有沒有發(fā)現(xiàn)網(wǎng)絡越深效果反而越差呢?

梯度爆炸和消失

其實這里第一個問題就是深層網(wǎng)絡帶來的梯度爆炸和梯度消失,層數(shù)越多問題就越加得明顯,關于梯度爆炸和梯度消失的問題可以參考我的相關博文http://www.itdecent.cn/p/9f919535e270

誤差在反向傳播的過程,一旦是梯度消失就會出現(xiàn)如下圖所示的情況


梯度爆炸情況類似,離輸出層的更新還靠譜些,離輸出層越遠情況就越糟糕。

梯度的問題大多來源于不合適的激活函數(shù)和過大的權值初始化,像sigmoid這種激活函數(shù)梯度最大的時候才0.25,乘幾下就沒有了,那能怎么辦。

選擇合適的激活函數(shù)

ReLU函數(shù)



Maxout函數(shù)


其實可以看的出來maxout是可以擬合出relu函數(shù)的,這邊是兩個元素的max,你可以設定任意你想要的一些個數(shù)


還有的問題就是你的優(yōu)化算法不夠好,像梯度下降這種簡單的優(yōu)化算法其實是很難得到好的結果的

這邊講三個關于學習率和梯度的優(yōu)化算法,更多的優(yōu)化算法請參考http://www.itdecent.cn/p/61741ef524b3

首先是動量梯度下降法,也就是Momentu

它保留了前面梯度對下一梯度的影響,準確的說指數(shù)平均法,平均了t時刻前的所有梯度,下面是從吳恩達課程copy下來的圖片


RMSprop

這邊也是采用的指數(shù)平均,和Momentu有點異曲同工。很明顯它限制住了學習率。

Adm

綜合上面兩種方法



這邊出現(xiàn)了校正,其實吳恩達的課程中提過,因為指數(shù)平均初始值為0,后期也會有點飄,需要必要的校正。

還有問題那就是過擬合啦

首先是



思想很簡單,我們提前終止訓練,當測試集精度足夠好的時候

正則化

dropout

幾個注意點:
隨機選取一些神經(jīng)元扔掉,但是扔掉的需要備份,因為每一批次訓練需要扔掉的可能都不一樣,但是扔的時候必須保證所有的神經(jīng)元都還是有的
訓練好的權重需要*權重,1-p

(未完待續(xù)……)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容