一、過擬合
1.過擬合現象
過擬合(overfitting)是指在模型參數擬合過程中的問題,由於訓練數據包含抽樣誤差,訓練時,複雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。具體表現就是最終模型在訓練集上效果好;在測試集上效果差。模型泛化能力弱。
2.過擬合產生的原因?
(1)在對模型進行訓練時,有可能遇到訓練數據不夠,即訓練數據無法對整個數據的分佈進行估計的時候
(2)權值學習迭代次數足夠多(Overtraining),擬合了訓練數據中的噪聲和訓練樣例中沒有代表性的特徵.
3.過擬合解決方法
- 數據增強。
- 採用正則化。
- Dropout。
- 提前終止訓練過程。
- Batch Nomalization。
二、欠擬合
欠擬合的表現:
訓練了很長時間,但是在訓練集上,loss值仍然很大甚至與初始值沒有太大區別,而且精確度也很低,幾乎接近於0,在測試集上亦如此。
神經網絡的欠擬合大致分爲兩種情況,一種是神經網絡的擬合能力不足,一種是網絡配置的問題。
解決方法:
對於大量的數據樣本,神經網絡無法去擬合全部數據,只能擬合大量樣本的整體特徵,或者少數樣本的具體特徵。此時,需要做的很簡單,只需要增加深度,也就是增加神經網絡的層數就可以了。也可以增加神經網絡的寬度,將每一層的神經單元數量增加,但是同等情況下,效果明顯不如增加層數,而且要想達到較好的效果,需要增加的神經元數遠超過增加一層增加的神經元數。深度深比寬度寬的模型更優這一點,是大家普遍認同的。
那麼如果loss和accurancy仍然如此呢?不論怎麼增加神經網絡的層數,用哪怕只有一條數據去訓練擬合,神經網絡就是“巋然不動”,loss的值“屹立不倒”,那麼這就與神經網絡的擬合能力無關了,就要考慮一下其他的因素了。這也是我遇到的那個問題的根源所在。
尋找最優的權重初始化方案
首先要說的就是權重的初始化方案。神經網絡在訓練之前,我們需要給其賦予一個初值,但是如何選擇這個初始值,這是個問題。神經網絡有大概如下的幾種初始化方案:
-
全零初始化 Zeros
-
全1初始化 Ones
-
初始化爲固定值value Constant
-
隨機正態分佈初始化 RandomNormal
-
隨機均勻分佈初始化 RandomUniform
-
截尾高斯分佈初始化 TruncatedNormal
-
VarianceScaling
-
用隨機正交矩陣初始化Orthogonal
-
使用單位矩陣初始化 Identiy
-
LeCun均勻分佈初始化方法 lecun_uniform
-
LeCun正態分佈初始化方法 lecun_normal
-
Glorot正態分佈初始化方法 glorot_normal
-
Glorot均勻分佈初始化 glorot_uniform
-
He正態分佈初始化 he_normal
-
LeCun均勻分佈初始化 he_uniform
使用適當的激活函數
不僅僅是初始化,在神經網絡的激活函數方面的選取,也不是隨意的。比如,卷積神經網絡中,卷積層的輸出,需要使用的激活函數一般爲ReLu,循環神經網絡中的循環層使用的激活函數一般爲tanh,或者ReLu,全連接層一般也是多用ReLu來激活,只有在神經網絡的輸出層,使用全連接層來分類的情況下,纔會使用softmax這種激活函數。而在各種機器學習入門教程裏面最常講到的sigmoid函數,想都不要想它,它已經不適用於深度學習了,哪怕是作爲其改進版的softmax函數,也僅僅是在輸出層才使用。
選擇合適的優化器和學習速率
神經網絡訓練的優化器也是需要考慮的一大因素。神經網絡的優化器其實有很多種,每種都有其不同的特點,我們最耳熟能詳的就是梯度下降法,對應着有批量梯度下降,隨機梯度下降。這種優化方法其實不賴,尤其是在神經網絡即將最終收斂的時候,使用一個合適的學習速率使得其最終下降到儘可能低的點上。但是隨機梯度下降有着明顯的缺點,尤其是跟Momentum、Adagrad、Adadelta等其他優化器對比之後。
使用更加複雜的模型
減少正則化的參數
參考:
1.《深度學習》
2.過擬合:https://blog.csdn.net/chen645096127/article/details/78990928
3.