先驗證集是不參與梯度下降的過程的,所以我想那么做也是可以,只是和使用驗證集的初衷不一樣了(其實就是沒理解驗證集在干嘛,還說的那么好聽 😦)。
驗證集的作用:
使用驗證集是為了 快速調參,也就是用驗證集選擇超參數(網絡層數,網絡節點數,迭代次數,學習率這些)。另外用驗證集還可以監控模型是否異常(過擬合啦什么的),然后決定是不是要提前停止訓練。
驗證集的關鍵在於 選擇超參數,我們手動調參是為了讓模型在驗證集上的表現越來越好,如果把測試集作為驗證集,調參去擬合測試集,就有點像作弊了。
而測試集既 不參與參數的學習過程,也 不參與參數的選擇過程,僅僅用於模型評價。
驗證集的正確打開方式:
驗證集可以看做參與了 “人工調參” 的訓練過程
一般訓練幾個 epoch 就跑一次驗證看看效果(大部分網絡自帶這個功能)
這樣做的第一個好處是:可以及時發現模型或者參數的問題,比如模型在驗證集上發散啦、出現很奇怪的結果啦(Inf)、mAP不增長或者增長很慢啦等等情況,這時可以及時終止訓練,重新調參或者調整模型,而不需要等到訓練結束。
另一個好處是驗證模型的泛化能力,如果在驗證集上的效果比訓練集上差很多,就該考慮模型是否過擬合了。同時,還可以通過驗證集對比不同的模型。
訓練集是用來訓練參數的,說准確點,一般是用來梯度下降的。而驗證集基本是在每個epoch完成后,用來測試一下當前模型的准確率。因為驗證集跟訓練集沒有交集,因此這個准確率是可靠的。
事實上,對於一個模型來說,其參數可以分為普通參數和超參數。在不引入強化學習的前提下,那么普通參數就是可以被梯度下降所更新的,也就是訓練集所更新的參數。另外,還有超參數的概念,比如網絡層數、網絡節點數、迭代次數、學習率等等,這些參數不在梯度下降的更新范圍內。盡管現在已經有一些算法可以用來搜索模型的超參數,但多數情況下我們還是自己人工根據驗證集來調。