機器學習策略篇:詳解開發集和測試集的大小(Size of dev and test sets)

Oten發表於2024-05-07

在深度學習時代,設立開發集和測試集的方針也在變化。

可能聽說過一條經驗法則,在機器學習中,把取得的全部資料用70/30比例分成訓練集和測試集。或者如果必須設立訓練集、開發集和測試集,會這麼分60%訓練集,20%開發集,20%測試集。在機器學習的早期,這樣分是相當合理的,特別是以前的資料集大小要小得多。所以如果總共有100個樣本,這樣70/30或者60/20/20分的經驗法則是相當合理的。如果有幾千個樣本或者有一萬個樣本,這些做法也還是合理的。

但在現代機器學習中,更習慣操作規模大得多的資料集,比如說有1百萬個訓練樣本,這樣分可能更合理,98%作為訓練集,1%開發集,1%測試集,用\(D\)\(T\)縮寫來表示開發集和測試集。因為如果有1百萬個樣本,那麼1%就是10,000個樣本,這對於開發集和測試集來說可能已經夠了。所以在現代深度學習時代,有時擁有大得多的資料集,所以使用小於20%的比例或者小於30%比例的資料作為開發集和測試集也是合理的。而且因為深度學習演算法對資料的胃口很大,可以看到那些有海量資料集的問題,有更高比例的資料劃分到訓練集裡,那麼測試集呢?

要記住,測試集的目的是完成系統開發之後,測試集可以幫評估投產系統的效能。方針就是,令的測試集足夠大,能夠以高置信度評估系統整體效能。所以除非需要對最終投產系統有一個很精確的指標,一般來說測試集不需要上百萬個例子。對於的應用程式,也許想,有10,000個例子就能給足夠的置信度來給出效能指標了,也許100,000個之類的可能就夠了,這數目可能遠遠小於比如說整體資料集的30%,取決於有多少資料。

對於某些應用,也許不需要對系統效能有置信度很高的評估,也許只需要訓練集和開發集。認為,不單獨分出一個測試集也是可以的。事實上,有時在實踐中有些人會只分成訓練集和測試集,他們實際上在測試集上迭代,所以這裡沒有測試集,他們有的是訓練集和開發集,但沒有測試集。如果真的在除錯這個集,這個開發集或這個測試集,這最好稱為開發集。

不過在機器學習的歷史裡,不是每個人都把術語定義分得很清的,有時人們說的開發集,其實應該看作測試集。但如果只要有資料去訓練,有資料去除錯就夠了。打算不管測試集,直接部署最終系統,所以不用太擔心它的實際表現,覺得這也是很好的,就將它們稱為訓練集、開發集就好。然後說清楚沒有測試集,這是不是有點不正常?絕對不建議在搭建系統時省略測試集,因為有個單獨的測試集比較令安心。因為可以使用這組不帶偏差的資料來測量系統的效能。但如果的開發集非常大,這樣就不會對開發集過擬合得太厲害,這種情況,只有訓練集和測試集也不是完全不合理的。不過一般不建議這麼做。

總結一下,在大資料時代舊的經驗規則,這個70/30不再適用了。現在流行的是把大量資料分到訓練集,然後少量資料分到開發集和測試集,特別是當有一個非常大的資料集時。以前的經驗法則其實是為了確保開發集足夠大,能夠達到它的目的,就是幫評估不同的想法,然後選出\(A\)還是\(B\)更好。測試集的目的是評估最終的成本偏差,只需要設立足夠大的測試集,可以用來這麼評估就行了,可能只需要遠遠小於總體資料量的30%。

所以希望本隨筆能給們一點指導和建議,知道如何在深度學習時代設立開發和測試集。

相關文章