先說下一般對原始數據的划分為什么分為訓練集、驗證集、測試集三個部分?
train data的作用是訓練模型,validation data的作用是對模型的超參數進行調節,為什么不直接在test data上對參數進行調節?因為如果在test data上來調節參數,那么隨着訓練的進行,我們的網絡實際上就是在一點一點地向我們的test data過度擬合,導致最后得到的test data的指標參考意義下降。
首先明確我們訓練神經網絡模型的目標是使得其在未知數據上也有很好的擬合能力(一般測試集充當未知數據的角色),所以如何直觀的判斷模型是否過擬合了?如果模型在訓練集上有良好的表現,但是在測試集上表現卻沒那么好,很可能就是過擬合了。
那么在神經網絡中該如何解決過擬合問題?
根據問題解決問題
(一)數據方面導致的過擬合
1.訓練數據集過小導致過擬合
如果數據集過小,由於神經網絡中的參數過多,這時很容易就導致過擬合,此時應該增大訓練數據,或者選用別的更合適的模型。
2.訓練數據不均衡導致過擬合
如果訓練數據不均衡,顯然模型會趨向於擬合數據較多的一類,因為它提供的信息更多,這種情況應該首先考慮的是均衡數據、數據增強等,具體可以參照如何處理數據不均衡問題。
(二)由模型導致的過擬合
如果數據相對均衡且訓練數據足夠仍出現過擬合,應該從模型角度着手
1.簡化模型
簡化模型最直接的手段是減少模型層數或者減小模型中隱層節點的個數。
L1正則化:L1正則化傾向於使得接近於0的參數變成0,這樣就相當於減少了參數,模型自然變得更簡單。
L2正則化:L2正則化加快了參數的減小速度,參數小模型能夠擬合的數據變少且擬合的剛剛好(這個法則也叫做奧卡姆剃刀),過擬合的可能性就降低。
此外參數過多使得網絡能夠擬合更多的數據,且為了擬合一些數據,這些數據中特有的一些特征可能相應的參數就很大,很容易導致過擬合,簡化模型、減小權值從而防止過擬合。
2.提取更泛化的表征
神經網絡可以理解為一個非線性多元函數簇,訓練神經網絡是為了很好的完成輸入到輸出的映射,且模型的泛化能力足夠好,這就需要提取魯棒的表征
產生過擬合使得模型泛化性降低,說明抽取的表征泛化性不夠強。
引入dropout,訓練時隨機使得一些網絡節點失活,因為每次失活的節點不固定,因此相應的權重都不會過大,一方面使得模型更簡單了,另一方面避免提取到那些特有組合下才起作用的表征,從而促使模型提取更泛化的表征。
dropout優點很多,一般模型方面防止過擬合都是用dropout,具體見https://www.cnblogs.com/dyl222/p/10959481.html有對dropout詳細介紹。