1. 程式人生 > >機器學習/深度學習入門:過擬合問題

機器學習/深度學習入門:過擬合問題

關於神經網路中過擬合的問題小記。

在訓練的時候你的模型是否會出現訓練時速度很慢?或者預測結果與訓練結果相差過大的現象?那我們可能就需要處理一下過擬合的問題了。

當你的模型過於複雜時,比如說輸入引數過多,你的模型就會出現過擬合問題,該模型雖然會在訓練集上表現出較好的預測結果,然而!在預測的時候呢?預測結果就會表現的很差。根據維基的定義以及我平時的一些實驗總結,當你observation 的noise 過多,輸入維度過大,都可能會導致overfitting。

解決辦法就是我們可以啟用交叉驗證(cross-validation),正則化(regularization),Early Stopping,剪枝(pruning),Bayesian priors,新增Dropout層,

這幾種方法。

cross-validation: 

cross-validation 的原理就是現在它的一個子集上做訓練,這個子集就是訓練集,再用驗證集測試所訓練出的模型,來評價模型的效能和指標,最後再用測試集來預測。

Early Stopping就是在每次訓練的epoch結束時,將計算出的accuracy 跟上一次的進行比較,如果accuracy 不再變化,那麼停止訓練。

regularization:

模型假設三層,輸入,隱藏,輸出。輸入層為2個神經元,輸出為2個,batchsize為10,下圖為當隱藏層神經元個數分別設定為3,6,20時,模型的情況: 
這裡寫圖片描述 
注意看當隱藏神經元為20時,模型的狀況,每個紅色的點都被完美的歸類,沒錯,這在訓練時結果是很好,但是在測試集的表現呢?這就不一定了,誰能保證自己的訓練結每點噪聲呢?是不是?所以用這個模型去預測未知的,就可能造成預測結果很差,這就是NN的overfitting問題。

所以一般大部分情況,我們在除錯模型時很多時候是在跟overfitting做鬥爭。關於regularization 方法。

簡單來說就是在目標函式上加一個λλ 使之變成 Error+λf(θ)Error+λf(θ) ,λλ 用來懲罰那些權重很大的向量,稱之為正則係數吧!λ=0λ=0 就意味著沒有采用regularization來預防overfitting。

regularization 有 L1 regularization和L2 regularization。如果你想知道哪一個特徵對最後的結果產生了比較大的影響,可以採用L1 regularization,如果你不那麼在意對特徵的分析,那就用L2 regularization吧。

新增Dropout層:

具體實現可參考論文:Dropout: A Simple Way to Prevent Neural Networks from Overfitting