訓練誤差和泛化誤差、K折交叉驗證

我們需要區分訓練誤差(training error)和泛化誤差(generalization error)。通俗來講,前者指模型在訓練數據集上表現出的誤差,後者指模型在任意一個測試數據樣本上表現出的誤差的期望,並常常通過測試數據集上的誤差來近似。計算訓練誤差和泛化誤差可以使用之前介紹過的損失函數,例如線性迴歸用到的平方損失函數和softmax迴歸用到的交叉熵損失函數。

讓我們以高考爲例來直觀地解釋訓練誤差和泛化誤差這兩個概念。訓練誤差可以認爲是做往年高考試題(訓練題)時的錯誤率,泛化誤差則可以通過真正參加高考(測試題)時的答題錯誤率來近似。假設訓練題和測試題都隨機採樣於一個未知的依照相同考綱的巨大試題庫。如果讓一名未學習中學知識的小學生去答題,那麼測試題和訓練題的答題錯誤率可能很相近。但如果換成一名反覆練習訓練題的高三備考生答題,即使在訓練題上做到了錯誤率爲0,也不代表真實的高考成績會如此。

在機器學習裏,我們通常假設訓練數據集(訓練題)和測試數據集(測試題)裏的每一個樣本都是從同一個概率分佈中相互獨立地生成的。基於該獨立同分布假設,給定任意一個機器學習模型(含參數),它的訓練誤差的期望和泛化誤差都是一樣的。例如,如果我們將模型參數設成隨機值(小學生),那麼訓練誤差和泛化誤差會非常相近。但我們從前面幾節中已經瞭解到,模型的參數是通過在訓練數據集上訓練模型而學習出的,參數的選擇依據了最小化訓練誤差(高三備考生)。所以,訓練誤差的期望小於或等於泛化誤差。也就是說,一般情況下,由訓練數據集學到的模型參數會使模型在訓練數據集上的表現優於或等於在測試數據集上的表現。由於無法從訓練誤差估計泛化誤差,一味地降低訓練誤差並不意味着泛化誤差一定會降低。

機器學習模型應關注降低泛化誤差。

 

K折交叉驗證:

由於驗證數據集不參與模型訓練,當訓練數據不夠用時,預留大量的驗證數據顯得太奢侈。一種改善的方法是K折交叉驗證(K-fold cross-validation)。在K折交叉驗證中,我們把原始訓練數據集分割成K個不重合的子數據集,然後我們做K次模型訓練和驗證。每一次,我們使用一個子數據集驗證模型,並使用其他K−1個子數據集來訓練模型。在這K次訓練和驗證中,每次用來驗證模型的子數據集都不同。最後,我們對這K次訓練誤差和驗證誤差分別求平均。

 

資料來源:《動手學深度學習》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章