訓練集、驗證集和測試集的概念及划分原則


深度學習中,常將可得的數據集划分為訓練集(training set),驗證集(development set/validation set)和測試集(test set).下文主要回答以下幾個問題:一是為什么要將數據集划分為如上三個集合,三個集合之間有什么區別;二是我們划分的原則是什么.

1. 訓練集、驗證集和測試集的概念

  • 訓練集:顧名思義指的是用於訓練的樣本集合,主要用來訓練神經網絡中的參數.

  • 驗證集:從字面意思理解即為用於驗證模型性能的樣本集合.不同神經網絡在訓練集上訓練結束后,通過驗證集來比較判斷各個模型的性能.這里的不同模型主要是指對應不同超參數的神經網絡,也可以指完全不同結構的神經網絡.

  • 測試集:對於訓練完成的神經網絡,測試集用於客觀的評價神經網絡的性能.

那么,訓練集、驗證集和測試集之間又有什么區別呢?一般而言,訓練集與后兩者之間較易分辨,驗證集和測試集之間的概念較易混淆.個人是從下面的角度來理解的:

  • 神經網絡在網絡結構確定的情況下,有兩部分影響模型最終的性能,一是普通參數(比如權重w和偏置b),另一個是超參數(例如學習率,網絡層數).普通參數我們在訓練集上進行訓練,超參數我們一般人工指定(比較不同超參數的模型在驗證集上的性能).那為什么我們不像普通參數一樣在訓練集上訓練超參數呢?(花書給出了解答)一是超參數一般難以優化(無法像普通參數一樣通過梯度下降的方式進行優化).二是超參數很多時候不適合在訓練集上進行訓練,例如,如果在訓練集上訓練能控制模型容量的超參數,這些超參數總會被訓練成使得模型容量最大的參數(因為模型容量越大,訓練誤差越小),所以訓練集上訓練超參數的結果就是模型絕對過擬合.

  • 正因為超參數無法在訓練集上進行訓練,因此我們單獨設立了一個驗證集,用於選擇(人工訓練)最優的超參數.因為驗證集是用於選擇超參數的,因此驗證集和訓練集是獨立不重疊的.

  • 測試集是用於在完成神經網絡訓練過程后,為了客觀評價模型在其未見過(未曾影響普通參數和超參數選擇)的數據上的性能,因此測試與驗證集和訓練集之間也是獨立不重疊的,而且測試集不能提出對參數或者超參數的修改意見,只能作為評價網絡性能的一個指標.

至此,我們可以將神經網絡完整的訓練過程歸結為一下兩個步驟:

  1. 訓練普通參數.在訓練集(給定超參數)上利用學習算法,訓練普通參數,使得模型在訓練集上的誤差降低到可接受的程度(一般接近人類的水平).

  2. '訓練'超參數.在驗證集上驗證網絡的generalization error(泛化能力),並根據模型性能對超參數進行調整.

重復1和2兩個步驟,直至網絡在驗證集上取得較低的generalization error.此時完整的訓練過程結束.在完成參數和超參數的訓練后,在測試集上測試網絡的性能.

2. 訓練集、驗證集和測試集的划分原則

本部分內容主要總結自Andrew Ng課程,課程中給出的原則是:

  • 對於小規模樣本集,常用的非配比例是trianing set/dev set/test set 6:2:2.例如共有10000個樣本,則訓練集分為6000個樣本,驗證集為2000樣本,測試集為2000樣本.

  • 對於大規模樣本集,則dev/test set的比例會減小很多,因為驗證(比較)模型性能和測試模型性能一定的樣本規模就足夠了.例如共有1000000個樣本,則訓練集分為9980000個樣本,驗證集分為10000個樣本,測試集分為10000個樣本.

當我們不能獲得足夠的感興趣的訓練樣本時,利用其他一些類似數據來訓練網絡時,該如何划分training, dev and test set?
例如我們在做一個識別貓的程序,我們的目標是識別用戶拍照上傳的貓的圖片,但是我們能獲得的APP上傳的數據十分有限(例如10000張),所以准備通過利用網絡爬蟲下載的貓的圖片(200000張)來協助訓練網絡.而因為網絡爬取的圖片與用戶上傳的圖片有較大區別,這時候應該如何划分training/dev/test set?

  • 一種方案是將app與web圖片進行混合,然后按照大數據划分原則進行划分,即205000張training set,2500張dev set,2500張測試集.
  • 另一種方案是,將app圖片中2500張分給dyev set,2500張分給test set,5000張app圖片和200000張web圖片混合作為訓練集.

Andrew Ng指出第二種方案更好,因為第二種方案dev set的數據全部來自app,與我們真正關心的數據具有相同的分布.而第一種方案,dev set中大概只有120張圖片來自app,而剩下的大部分來自web,必然導致模型的評價准則偏移靶心.

當然,第二種方案會導致dev/test set與training set不同分布的問題,這會給誤差分析帶來麻煩.Andrew Ng給出的解決方案是在training set中划分出一部分作為train-dev set,該部分不用於訓練,作為評價模型generalization error,而train-dev set與dev set之間的誤差作為data mismatch error,表示數據分布不同引起的誤差.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM