偏差和方差及其解決辦法


訓練神經網絡時,我們會有一個訓練集,一個測試集,人在這件事上幾乎是不會出錯的

 

當訓練集精度為99%,而測試集精度為90%時

這時就是出現了過擬合,我們稱他為方差較高

 

當訓練集精度為85%,測試集精度也為85%時

這就是擬合的不好,我們稱他為高偏差

 

為了之后表達方便我稱訓練集精度為a,測試集精度為b

 

高方差的解決辦法:

  出現高方差時一般是,a,b先一起上升,然后到某一點之后 a繼續上升b開始下降

   

  Early Stopping

  我常用的就是訓練時,每訓練100次輸出一次訓練集精度,每1k次保存一次模型

  一旦發現b開始下降了,就停止訓練

  這里定義下什么叫做b開始下降

  不是說連續300次訓練b都在下降就叫b開始下降了

  最好是連續1000 - 2000次訓練b都在下降才能叫做b開始下降了

  因為b是會有波動的,偶爾幾次下降是正常行為

 

  另外的解決辦法是正則化

  因為神經網絡過擬合的根本原因就是網絡設計的過於復雜了

  正則化就是一種把網絡簡化的方法

  drop out 正則化:

    在訓練神經網絡時,按照一定的概率去更新節點

    其實網絡會過擬合

    每一次學習時,這次讓一部分節點學習,下次讓另一部分節點學習

    這樣每次學習就能學到不同的過擬合特征

    最后再用的時候,過擬合相互抵消,就解決了過擬合的問題

  L2正則化:

    將loss改為loss = loss + (a/2n)*(w1 * w1 + w2 * w2 + ....... + wm * wm)

    a為自己指定的系數,n為樣本個數,w就是我們訓練時的w

    這樣的話,在做反向傳播的時候dwi = dwi + (a/n) * wi

    wi = wi - learning_rate * dwi

    那么那個多出來的東西會使無論此時的wi是什么,我們都會試圖讓他變得更小

    讓w趨近於0,就會弱化這個神經元對結果的影響,達到了減小神經網絡復雜度的效果

 

 

高偏差的解決辦法:

   高偏差沒什么好說的,就是神經網絡太簡單了唄

  這時候要么繼續訓練,要么加數據,要么就加節點,加層數

  最好不要加層數,因為3層的神經網絡已經可以表示一切連續函數了

  沒必要多加


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM