【NLP學習筆記】訓練集、驗證集和測試集的概念及劃分

一、概念

  • 訓練集:用於訓練的樣本集合,主要用來訓練神經網絡中的參數。
  • 驗證集:用於驗證模型性能的樣本集合。不同神經網絡在訓練集上訓練結束後,通過驗證集來比較判斷各個模型的性能.這裏的不同模型主要是指對應不同超參數的神經網絡,也可以指完全不同結構的神經網絡。
  • 測試集:對於訓練完成的神經網絡,測試集用於客觀的評價神經網絡的性能。

二、深入理解他們之間的區別

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

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

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

三、神網完整的訓練過程

可以歸納爲一下兩個步驟:

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

  2. 訓練超參數:在驗證集上驗證網絡的generalization error(泛化能力),並根據模型性能對超參數進行調整,也就是我們常說的調參

重複1和2兩個步驟,直至網絡在驗證集上取得較低的generalization error。

此時完整的訓練過程結束。在完成參數和超參數的訓練後,在測試集上測試網絡的性能。

三、劃分原則

3.1 小規模數據集

  • 劃分比例是:訓練集:驗證集:測試集 = 6:2:2。
    例如共有10000個樣本,則訓練集分爲6000個樣本,驗證集爲2000樣本,測試集爲2000樣本。

  • 不設置驗證集的話,劃分比利是:訓練集:測試集 = 7:3,其實這種情況下的測試集被稱爲驗證集或者開發集會更貼切。

3.2 大規模數據集

對於大規模樣本集,例如百萬級別的數據集,驗證集和測試集所佔的比例會減小很多,因爲驗證(比較)模型性能和測試模型性能一定的樣本規模就足夠了。

  • 一般是:訓練集:驗證集:測試集 = 9.8:0.1:0.1。
    例如共有1000000個樣本,訓練集分爲980000個樣本,驗證集分爲10000個樣本,測試集分爲10000個樣本。

四、擴展

  • 在有些數據集的劃分中,沒有真正的測試集,也就是隻有訓練集和測試集。
  • 利用訓練集來訓練模型,然後通過測試模型在測試集上的表現來調整超參和採用不同的策略來提高模型在測試集上的表現,而沒有真正的測試集來評估模型的性能,缺少真正的測試集可能會導致模型過擬合,使用這種方式在測試集上所獲取的模型評估是不可靠的。
  • 建議不要省略驗證集,利用驗證集來調整模型,利用測試集來評估模型的指標。如果模型上線的指標要求比較高時,可以適當的加大測試集的數量以此來獲取更高精度的評估指標,建議不要超過30%。
  • 從訓練集中劃分出一部分作爲驗證集,該部分不用於訓練,作爲評價模型generalization error,而訓練集與驗證集之間的誤差作爲data mismatch error,表示數據分佈不同引起的誤差。
  • 這種劃分方式有利於保證:數據具有相同的分佈
  • 如果訓練集和測試集的數據分佈可能不相同,那麼必定會導致一個問題,模型在訓練集上的表現會非常的好,而在測試集上表現可能不會那麼理想。
  • 通過訓練數據來訓練模型,就是希望模型能夠從訓練集中學習到數據的分佈,如果訓練集和測試集數據不在同一個分佈中,那麼模型在測試集上的表現肯定是不會理想的。

參考

[1] 吳恩達的機器學習課程
[2] 訓練集、驗證集和測試集的概念及劃分原則
[3] 訓練集、驗證集、測試集的劃分
[4] 數據集的劃分–訓練集、驗證集和測試集