神經網絡在網絡結構確定的情況下,有兩部分影響模型最終的性能,一是普通參數(比如權重w和偏置b),另一個是超參數(例如學習率,網絡層數)。普通參數我們在訓練集上進行訓練,超參數我們一般人工指定(比較不同超參數的模型在驗證集上的性能)。那爲什麼我們不像普通參數一樣在訓練集上訓練超參數呢?(花書給出瞭解答)一是超參數一般難以優化(無法像普通參數一樣通過梯度下降的方式進行優化)。二是超參數很多時候不適合在訓練集上進行訓練,例如:如果在訓練集上訓練能控制模型容量的超參數,這些超參數總會被訓練成使得模型容量最大的參數(因爲模型容量越大,訓練誤差越小),所以訓練集上訓練超參數的結果就是模型絕對過擬合。
正因爲超參數無法在訓練集上進行訓練,因此我們單獨設立了一個驗證集,用於選擇(人工訓練)最優的超參數。因爲驗證集是用於選擇超參數的,因此驗證集和訓練集是獨立不重疊的。
測試集是用於在完成神經網絡訓練過程後,爲了客觀評價模型在其未見過(未曾影響普通參數和超參數選擇)的數據上的性能,因此測試與驗證集和訓練集之間也是獨立不重疊的,而且測試集不能提出對參數或者超參數的修改意見,只能作爲評價網絡性能的一個指標。
可以歸納爲一下兩個步驟:
訓練普通參數:在訓練集(給定超參數)上利用學習算法,訓練普通參數,使得模型在訓練集上的誤差降低到可接受的程度(一般接近人類的水平)。
訓練超參數:在驗證集上驗證網絡的generalization error(泛化能力),並根據模型性能對超參數進行調整,也就是我們常說的調參。
重複1和2兩個步驟,直至網絡在驗證集上取得較低的generalization error。
此時完整的訓練過程結束。在完成參數和超參數的訓練後,在測試集上測試網絡的性能。
劃分比例是:訓練集:驗證集:測試集 = 6:2:2。
例如共有10000個樣本,則訓練集分爲6000個樣本,驗證集爲2000樣本,測試集爲2000樣本。
不設置驗證集的話,劃分比利是:訓練集:測試集 = 7:3,其實這種情況下的測試集被稱爲驗證集或者開發集會更貼切。
對於大規模樣本集,例如百萬級別的數據集,驗證集和測試集所佔的比例會減小很多,因爲驗證(比較)模型性能和測試模型性能一定的樣本規模就足夠了。
[1] 吳恩達的機器學習課程
[2] 訓練集、驗證集和測試集的概念及劃分原則
[3] 訓練集、驗證集、測試集的劃分
[4] 數據集的劃分–訓練集、驗證集和測試集