訓練神經網絡時,我們會有一個訓練集,一個測試集,人在這件事上幾乎是不會出錯的
當訓練集精度為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層的神經網絡已經可以表示一切連續函數了
沒必要多加