神经网络不收敛的查缺补漏
- 數據歸一化
數據歸一化包括三個內容:數據縮放的本質、區別,以及選擇合適的縮放方法。縮放包括歸一化和標準化,兩者的本質都是一個線性變換,線性變換有很多良好的性質,這些性質決定了為什么對數據進行改變后竟然不會失效,反而還能提高數據的表現。例如線性變換不會改變數值的排序。 歸一化和標準化的而區別,歸一化是統一到一定的區間(由極值決定),而標準化和整體樣本由很大關系。
什么時候使用歸一化/標準化, 如果對輸出結果范圍要求,用歸一化;如果數據較為穩定,不存在極端的最大最小值,用歸一化;如果存在噪音和異常值,可以使用標準化處理。
數據歸一化后,最優解在尋優過程中變得平緩,更容易正確收斂到最優解。引入歸一化,是由于不同評價指標中,其量綱單位往往不同,變化區間處于不同的數量級,不進行歸一化,可能導致某些目標被忽視。
- 沒有檢測預處理結果和最終的訓練測試集結果
- 預處理結果的標簽是否對應;
- 忘了做數據預處理
- 直接輸入了源數據,導致了輸入網絡源端錯誤,致使整個網絡無法收斂;
- 忘了使用正則化
過擬合現象很普遍,根本原因還是數據量不足以支撐復雜度高的模型,因此最直接的解決過擬合問題的辦法是增加訓練數據量。但要獲得帶標簽的數據成本是很高的。 正規化不僅僅是控制過度擬合。通過在訓練過程中引入一些隨機過程,您在某種意義上“平滑”了成本環境。這可以加速培訓,幫助處理數據中的異常值,并防止網絡的極端重量配置。
- Batch Size設的太大
合適的Batch,內存利用率提高,矩陣乘法的并行效率高;跑完一次epoch所需要的迭代次數減少;批次越大,確定下降的維度方向越準確,引起訓練震蕩越小。
過大的batch: 內存利用率提高,可能導致內存容量撐不住;跑完一次epoch的次數減少,但要達到相同的精度,從而對參數的修正也顯得更加緩慢;增大到一定程度,其確定的下降方向已經不再變化。
太大導致了下降方向變化不大,從而引起模型的不收斂現象產生。
- 學習率設置的不對
學習率是一個重要的超參數,學習率越小,沿著損失梯度下降的速度越慢,從模型訓練過程而言,學習率的選擇?很重要,防止錯過任何局部最優解,也意味著著我們要花更多的時間收斂,尤其是如果我們處于曲線的至高點。
如果學習率太小,網絡很可能會陷入局部最優,局部最優導致了不收斂;但是如果太大,超過了極值,損失就會停止下降,在某一位置反復震蕩, 反復震蕩也會導致模型的不收斂。
- 激活函數使用的不對
激活函數導致了隱含層輸出特征表示出現了數據未歸一化的問題。
- 網絡存在壞梯度
一般梯度存在為0,在模型訓練中可以默認一個梯度值,如超過改梯度值,則設為該值,否則就以原先值進行梯度衰減。
- 參數初始化錯誤
- 網絡太深
第一:層數的增多會使每一層任務都變得簡單,例如計算乘法,可以在第一層計算按位加法,第二層計算兩個數的加法,第三層計算乘法,這樣的算法邏輯更加簡單,清晰。也就是說中間層可以做更深的抽象。
第二:數學上可以證明只有一層隱藏層的神經網絡可以表示任意的函數,但是神經元的數量卻是指數級增加的,但是使用深層網絡可以解決這個問題。
一味的增加隱藏層數量并不會給最終的結果帶來好處,但是上文已經說了層數的增加可以使神經網絡提升,那么問題的原因就是增加后的網絡的權重不對。實際上,梯度消失和梯度爆炸都是梯度不穩定的表現,這是因為淺層的神經元=后面所有神經元的乘積,所以當層數增多后容易引起不穩定的表現。
隱藏層神經元數量錯誤
總結
以上是生活随笔為你收集整理的神经网络不收敛的查缺补漏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核最新的连续内存分配器(CM
- 下一篇: subversion 命令