训练集、验证集、测试集的作用
目錄
- 1. 前言
- 2. 訓練集、驗證集、測試集的作用
- 3. 一些雜碎的東西
- ① 過擬合
- ② 驗證集和測試集的區別
- ③ 三者劃分比例
- ④ 訓練樣本與 驗證樣本、測試樣本分布不匹配的問題
- ⑤ 關于測試集
- 4.參考來源
1. 前言
本篇是看完吳恩達老師DL的課,寫來當筆記看的,若有錯誤與疑慮,請指正或提出。
?
?
2. 訓練集、驗證集、測試集的作用
訓練集(Training set)的作用:更新模型參數。
驗證集(開發集)(Dev set) 的作用:評估訓練得到的多種不同模型或者是帶著不同參數的同一模型的效果,再根據模型在驗證集的效果對模型進行選擇和調參(因此可以說驗證集也參與了訓練),使得模型效果在驗證集達到最優,最后選出效果最好的模型。
測試集(Test set) 的作用:對最終篩選出來模型的泛化能力進行評價。測試集最重要的是未知,即用一個學習集之外的數據集來對模型的效果進行評估,看看模型能否給出合適的輸出;就像是用一張你平時刷題沒刷到過的題組成的卷子,來檢驗你對知識的掌握情況,這樣才合理嘛。
另外,我想提一下這個: 對于測試集的作用,Ng原話是:對最終選定模型的性能進行無偏估計。我剛看課程時是云里霧里的,后面發現對于測試集作用,兩句話其實是一個意思😑。
下面為個人理解:無偏估計(概率論的東西),就是估計量的期望值等于被估計量的真實值。最重要的是這一句:樣本均值的期望是總體均值的無偏估計。證明如下:(專門開個word寫一遍。。)
上面是純概率論的東西,現在把它代入到深度學習里面。把模型的性能評價指標(誤差、準確度什么的)當成是隨機變量X,在有n個數據的測試集上,你計算n個數據得到的n個指標值(即上面的X1~Xn),再除以n,不就得到樣本均值的期望了(這里的樣本是指標的值,不是指數據集里的那種樣本)。根據樣本均值的期望是總體均值的無偏估計,所以計算測試集上的性能評價指標平均值其實就是在對模型的總體性能做無偏估計,這個過程同時也是在對模型泛化性能進行評價。
?
?
3. 一些雜碎的東西
① 過擬合
一切試圖提升效果的改變都會導致過擬合。比如對訓練集的過擬合:你用梯度下降的方式對模型參數進行多次的調整,來降低train loss,經過多次調整后,模型對于訓練集的擬合效果會特別好,然而對于驗證集的擬合可能效果就不是特別好(就是泛化能力差),這就導致了過擬合。 亦或者是驗證集的過擬合:你每次訓練完若干批樣本后,要用驗證集對模型性能進行評估,然后多次調整超參數,讓模型在驗證集上的性能變得更好,這其實會在超參數層面的過擬合了。
② 驗證集和測試集的區別
二者都有對模型效果進行評估的作用,它們最重要的區別在于對于模型是否未知。在用驗證集進行人工調參的過程中,驗證集對于模型是已知的。驗證集在被反復使用,用于讓模型朝著對驗證集擬合甚至過擬合的方向前進,所以測試集的數據是肯定不能和驗證集的數據混雜在一起的:混雜在一起就好比就是你把期末考試的題(未知)泄露到期末考前模擬題(已知)里面,這樣期末考出來成績虛高(在這個泄露數據的測試集里,模型性能指標好),學生可能沒真正掌握知識點(泛化能力差,導致對于學習集之外的樣本可能給不出合適的輸出);而測試集僅僅使用一次來評價你調整完的最終模型的性能。
③ 三者劃分比例
以下都是Ng課上提到的thumb rules:
④ 訓練樣本與 驗證樣本、測試樣本分布不匹配的問題
比如對識別貓這一任務,你訓練的圖片可能是高像素、經過后期處理的;而你的驗證樣本和測試樣本來源于用戶手機隨手拍的模糊貓圖,這就導致樣本分布不匹配的問題。而驗證集是用來對多個模型性能進行評估和對模型性能進一步優化,我們是選擇在驗證集上效果最好的模型作為最終模型,并在測試集上進行模型性能評估。因此,要保證驗證樣本和測試樣本來自同一分布。
⑤ 關于測試集
測試集不是必要的,訓練集和驗證集才是必要的。你要通過訓練集讓模型不斷地學習新東西,然后用驗證集來判斷模型效果的好壞,然后調整模型,多次迭代得到最終模型。你得到最終模型靠的是訓練集和驗證集,測試集只不過是對你最終模型的效果進行評估而已。
?
?
4.參考來源
總結
以上是生活随笔為你收集整理的训练集、验证集、测试集的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二阶系统的性能分析(开环相幅和阶跃响应)
- 下一篇: 我的软考高项考试之旅