首先要明白,測試集上的準確率低並不一定是過擬合。有可能在訓練集上準確率就很低,也就是說你的模型壓根沒有訓練好!!
所以:首先,要用訓練好的模型在訓練集上跑一遍,如果在訓練集上準確率就很低,那麼就不是過擬合,而是欠擬合。
原因是在梯度下降求導時,卡在了local minima(在求導為0,是極小值),saddle point(求導為0,不是極小值),plateau(求導近似為0)上。
解決這個問題可以有兩個做法:1是改變啟用函式;2是改變梯度下降求導方式;後邊會詳細講。
然後:如果在訓練集上準確率很好,在測試集上準確率低,那麼就是過擬合(overfitting)。
解決欠擬合的1方法:改變啟用函式。一定程度上,欠擬合是因為啟用函式選擇了sigmoid函式。對於sigmoid函式來說,致命的問題就是梯度消失,sigmoid會衰減輸入。梯度消失的含義是:在靠近輸出層的引數更新梯度很大,在靠近輸入層的引數更新梯度很小,導致在學習率一致的情況下,在靠近輸出層的後幾層引數更新快,在已經收斂的時候,靠近輸入層引數更新很慢,還是接近隨機狀態,使得靠近輸出層引數接收的input接近隨機。
我們換用relu啟用函式就可以解決梯度消失的問題。在input<0時,output = 0, 在input>0時,output = input,這樣在計算時,引數會少於整體神經元個數,relu計算很快。leaky relu、parametric relu等是relu的變種,用relu可以解決一般欠擬合。
另外maxout也是一種啟用函式,relu是maxout的一種特例,它可以實現每個神經元都有自己不同的啟用函式,但是maxout引數多於其他啟用函式(因為每有乙個輸出,都要在一組給定數目的輸出(引數)中選擇乙個最大的作為輸出,而其他的啟用函式,都是給一組引數,產生乙個輸出)。雖然引數變多了,但是在訓練時,我們梯度下降只更新一組輸出中選出的那個輸出對應的引數!!!!並且訓練集資料很多,每個資料都會梯度更新不同的引數。maxout是根據資料自動學習權重,模型引數訓練好了,模型固定了,也就得到不同的啟用函式。
解決欠擬合方法2:改變梯度下降策略;
可以嘗試其他的梯度下降函式,比如adagrad、rmsprop、momentum、adam(=momentum+rmsprop),它們按照一定權重考慮了新梯度值和舊梯度值。
多層full connect 神經網路測試
1 搭建了乙個多層full connect神經網路,用於mnist識別 2 中測試了幾種cross entropy的用法,並進行對比,cross entropy1,cross entropy2,cross entropy3對輸入引數各有要求,所得到的結果是相同的。3 在測試過程中出現了loss na...
MATLAB神經網路4 測試
對於深度神經網路,檢視 monitor deep learning training progress.視覺化感知器資料的函式 視覺化的維度有限制 針對上述plotpv的資料,畫出分了線 神經網路資料擬合的程度,回歸圖 神經網路的效能,以演算法中定義的方式,常見的是mse來衡量 以對數刻度顯示。隨著...
卷積神經網路功能測試方法
卷積神經網路 cnn 是在語音和影象識別領域使用非常廣泛的一類神經網路結構 1 從圖1中可以看到,它包括3類網路層,一類是卷積層,一類是下取樣層,最後是全連線層。cnn的訓練和dnn一樣,也包括前向計算和反向傳播。不過不同的是,dnn是全連線的網路結構,其前向計算和反向傳播的過程相對都比較簡單。但c...