過擬合
先談談過擬合,所謂過擬合,指的是模型在訓練集上表現的很好,但是在交叉驗證集合測試集上表現一般,也就是說模型對未知樣本的預測表現一般,泛化(generalization)能力較差。
如圖所示
(圖片來源:coursera 吳恩達機器學習公開課)
從圖中可以看出,圖一是欠擬合,模型不能很好地擬合數據;圖二是最佳的情況;圖三就是過擬合,采用了很復雜的模型。最后導致曲線波動很大,最后最可能出現的結果就是模型對於未知樣本的預測效果很差。
在對模型進行訓練時,有可能遇到訓練數據不夠,即訓練數據無法對整個數據的分布進行估計的時候,或者在對模型進行過度訓練(overtraining)時,常常會導致模型的過擬合(overfitting)。如下圖所示:
那么如何防止過擬合呢?一般的方法有early stopping、數據集擴增(Data augmentation)、正則化(Regularization)、Dropout等。
有一個概念需要先說明,在機器學習算法中,我們常常將原始數據集分為三部分:training data、validation data,testing data。這個validation data是什么?它其實就是用來避免過擬合的,在訓練過程中,我們通常用它來確定一些超參數(比如根據validation data上的accuracy來確定early stopping的epoch大小、根據validation data確定learning rate等等)。那為啥不直接在testing data上做這些呢?因為如果在testing data做這些,那么隨着訓練的進行,我們的網絡實際上就是在一點一點地overfitting我們的testing data,導致最后得到的testing accuracy沒有任何參考意義。
Early stopping:
Early stopping便是一種迭代次數截斷的方法來防止過擬合的方法,即在模型對訓練數據集迭代收斂之前停止迭代來防止過擬合。對模型進行訓練的過程即是對模型的參數進行學習更新的過程,這個參數學習的過程往往會用到一些迭代方法,如梯度下降(Gradient descent)學習算法。這樣可以有效阻止過擬合的發生,因為過擬合本質上就是對自身特點過度地學習。
正則化:
指的是在目標函數后面添加一個正則化項,一般有L1正則化與L2正則化。L1正則是基於L1范數,即在目標函數后面加上參數的L1范數和項,即參數絕對值和與參數的積項
L2正則是基於L2范數,即在目標函數后面加上參數的L2范數和項,即參數的平方和與參數的積項:
數據集擴增
在數據挖掘領域流行着這樣的一句話,“有時候往往擁有更多的數據勝過一個好的模型”。但是往往條件有限,如人力物力財力的不足,而不能收集到更多的數據,如在進行分類的任務中,需要對數據進行打標,並且很多情況下都是人工得進行打標,因此一旦需要打標的數據量過多,就會導致效率低下以及可能出錯的情況。所以,往往在這時候,需要采取一些計算的方式與策略在已有的數據集上進行手腳,以得到更多的數據。
通俗得講,數據機擴增即需要得到更多的符合要求的數據,即和已有的數據是獨立同分布的,或者近似獨立同分布的。一般有以下方法:
- 從數據源頭采集更多數據
- 復制原有數據並加上隨機噪聲
- 重采樣
- 根據當前數據集估計數據分布參數,使用該分布產生更多數據等
DropOut:
而在神經網絡中,有一種方法是通過修改神經網絡本身結構來實現的,其名為Dropout。該方法是在對網絡進行訓練時用一種技巧(trick),對於如下所示的三層人工神經網絡:
對於上圖所示的網絡,在訓練開始時,隨機得刪除一些(可以設定為一半,也可以為1/3,1/4等)隱藏層神經元,即認為這些神經元不存在,同時保持輸入層與輸出層神經元的個數不變,這樣便得到如下的ANN:
然后按照BP學習算法對ANN中的參數進行學習更新(虛線連接的單元不更新,因為認為這些神經元被臨時刪除了)。這樣一次迭代更新便完成了。下一次迭代中,同樣隨機刪除一些神經元,與上次不一樣,做隨機選擇。這樣一直進行瑕疵,直至訓練結束。
(原文地址:http://blog.csdn.net/heyongluoyao8/article/details/49429629)