1. 程式人生 > >訓練集、驗證集和測試集的意義(轉)

訓練集、驗證集和測試集的意義(轉)

來看 valid 更新 次數 bsp 根據 可靠 交集 epo

轉自: https://blog.csdn.net/ch1209498273/article/details/78266558

在有監督的機器學習中,經常會說到訓練集(train)、驗證集(validation)和測試集(test),這三個集合的區分可能會讓人糊塗,特別是,有些讀者搞不清楚驗證集和測試集有什麽區別。

I. 劃分

如果我們自己已經有了一個大的標註數據集,想要完成一個有監督模型的測試,那麽通常使用均勻隨機抽樣的方式,將數據集劃分為訓練集、驗證集、測試集,這三個集合不能有交集,常見的比例是8:1:1,當然比例是人為的。從這個角度來看,三個集合都是同分布的。

如果是做比賽,官方只提供了一個標註的數據集(作為訓練集)以及一個沒有標註的測試集,那麽我們做模型的時候,通常會人工從訓練集中劃分一個驗證集出來。這時候我們通常不再劃分一個測試集,可能的原因有兩個:1、比賽方基本都很摳,訓練集的樣本本來就少;2、我們也沒法保證要提交的測試集是否跟訓練集完全同分布,因此再劃分一個跟訓練集同分布的測試集就沒多大意義了。

II. 參數

有了模型後,訓練集就是用來訓練參數的,說準確點,一般是用來梯度下降的。而驗證集基本是在每個epoch完成後,用來測試一下當前模型的準確率。因為驗證集跟訓練集沒有交集,因此這個準確率是可靠的。那麽為啥還需要一個測試集呢?

這就需要區分一下模型的各種參數了。事實上,對於一個模型來說,其參數可以分為普通參數和超參數。在不引入強化學習的前提下,那麽普通參數就是可以被梯度下降所更新的,也就是訓練集所更新的參數。另外,還有超參數的概念,比如網絡層數、網絡節點數、叠代次數、學習率等等,這些參數不在梯度下降的更新範圍內。盡管現在已經有一些算法可以用來搜索模型的超參數,但多數情況下我們還是自己人工根據驗證集來調。

III. 所以

那也就是說,從狹義來講,驗證集沒有參與梯度下降的過程,也就是說是沒有經過訓練的;但從廣義上來看,驗證集卻參與了一個“人工調參”的過程,我們根據驗證集的結果調節了叠代數、調節了學習率等等,使得結果在驗證集上最優。因此,我們也可以認為,驗證集也參與了訓練。

那麽就很明顯了,我們還需要一個完全沒有經過訓練的集合,那就是測試集,我們既不用測試集梯度下降,也不用它來控制超參數,只是在模型最終訓練完成後,用來測試一下最後準確率。

IV. 然而

聰明的讀者就會類比到,其實這是一個無休止的過程。如果測試集準確率很差,那麽我們還是會去調整模型的各種參數,這時候又可以認為測試集也參與訓練了。好吧,我們可能還需要一個“測試測試集”,也許還需要“測試測試測試集”...

算了吧,還是在測試集就停止吧。

訓練集、驗證集和測試集的意義(轉)