0
機器學習中,一般將樣本數據分成獨立的三部分:訓練集、驗證集和測試集。
其中驗證集在機器學習中所起到的作用是:開發(fā)模型總需要調節(jié)模型的參數,而整個調節(jié)過程需要在驗證集數據上運行訓練的模型,從而給出其表現的反饋信號來修改網絡模型及參數。
然而在對樣本數據的劃分上,往往受限于一些過時的規(guī)則以及思維定式的限制,在劃分驗證集以及解決驗證集目前存在的一些問題上,面臨著比較大的阻礙。
數據科學家 Ray Heberer 專門撰寫了一篇文章來介紹驗證集目前存在的一些問題,并表達了自己的看法:驗證集如今變得不再有新意。
對此,他提出用心理模型來改善驗證集當前的困局。
正文內容如下:
研究者們入門數據科學世界時,意識到的第一件事便是,擁有訓練和驗證機器學習模型的獨立數據集,至關重要。但是要實現這一點,很不容易。盡管我們對于為何要對數據集進行劃分的背后有一個簡單的直覺,然而深入理解這一困擾這個行業(yè)的問題,仍存在許多阻礙。
其中一個阻礙便是堅持使用已過時的“拇指規(guī)則”(也叫經驗法則),例如“ 按 70:30 的比例分割訓練集和測試集”(70–30 train-test split)或大數據出現之前的黑暗時代遺留下來的方法。
另一個阻礙是:我們許多人在學習“除了測試集之外,我們還應該有一個獨立驗證集用于調整超參數”的過程中都會遇到一個問題:如果我們僅通過調整超參數就會導致測試集過擬合,那么就不會導致驗證集過擬合嗎?然而針對這一問題,研究者們還沒有找到一個好的答案。
對于該問題的回答當然是肯定的。這會導致驗證集過擬合,并且這已經不是新鮮事了。這里本文我嘗試探索一些方法來思考為什么會發(fā)生這種情況,并希望通過這樣做,還能開辟出一條更深入地理解過擬合和數據劃分的道路,而不僅僅是討論上面這兩個人們?yōu)闇蕚涿嬖嚩枰私獾拿}陳述。
本文首先將探討損失曲面(Loss Landscapes)的概念,以及如何利用樣本曲面與總體曲面之間的關系理解驗證集泄漏。在此過程中,將基于一些簡化的假設來開發(fā)有用的心理模型(Mental Model )。最后,將通過一個快速的實驗來驗證我們的理解。
讓我們開始吧!
雙變量函數(GitHub代碼地址:https://gist.github.com/rayheberer/bd2d94443e77b9734d52a7a4c736bbf3)
如果你熟悉機器學習,尤其是研究過神經網絡和梯度下降算法,以及閱讀過下面這篇關于梯度優(yōu)化算法的(文中有豐富的可視化圖片和動畫)文章,那么你對損失曲面概念一定不陌生。
具體而言,損失曲面就是將機器學習模型的損失或誤差作為其參數的函數。
如果你覺得這個概念過于簡單而不必特別關注,我十分能理解。盡管你已經理解了相關基本概念,但“損失曲面”實際上是這類函數的名稱,知道它后你可以輕松查閱各種有趣的內容和相關研究。
“曲面”一詞喚起了我們的物理直覺。照片由 Fabrizio Conti 在 Unsplash 上提供
損失曲面是可以通過梯度下降或其他方法(例如模擬退火、演化方法)進行遍歷的函數。即使你要處理的函數通常位于高維空間中, 這樣命名讓我們不由得根據物理直覺來思考它。
盡管我們通常將損失曲面視為模型參數函數,但也可將它們視為超參數函數。
需要注意的是:雖然損失可以根據數據和模型參數顯式計算,但損失與模型超參數之間聯系更不直接。如果你對此感到困惑,不妨回顧下生物學家使用適應度曲面( Fitness Landscapes)將繁殖成功作為遺傳因素的函數。必要時你可將超參數函數(和數據)的損失和“模型適應度曲面”的損失,視作相同的。
現在要意識到的關鍵是,每個數據集分區(qū)都會有獨立的損失曲面,而訓練集、驗證集和測試集的損失曲面完全不同。如果數據已經被很好地分割,那么每一組數據就都是一個有代表性但不相同的樣本。
最重要的是,所有現有數據的損失曲面與真實環(huán)境中的潛在“總體”數據的損失曲面不同。我們之所以同時需要驗證集和測試集,是因為如果隨著時間的推移驗證集確實泄漏了信息,那么我們仍需要一些數據來無偏估計模型在真實環(huán)境中的性能。
一種考慮超參數調整的方法是,將遍歷驗證集數據的損失曲面作為超參數函數。讓我們從假設一個“理想”曲面來開始建立直覺。
對于理想的損失曲面,超參數當然是“獨立的”,意思是超參數與損失的之間沒有相互作用項。這類函數的等高線不會對角突出,如下圖所示:
這類的損失曲面之所以理想,是因為在處理它們時,可以將調整許多超參數的問題分解為一次單獨調整一個超參數。由于任意一個超參數的最佳值與其他超參數無關,因此我們可以按順序而不是并行地進行超參數調整。
換句話說,就是將每個超參數視為一個旋鈕。我們要做的就是不斷調整每個特定旋鈕,直到找到最佳位置。
然后關聯每個旋鈕,就可以得到損失曲面的投影。我們的這部分函數將只有一個自變量:正在不斷調整的超參數。
這就是變得有趣的地方:回想一下,每個數據集都有自己的損失曲面?,F在想象在調節(jié)的每個旋鈕之后疊加這些函數的投影。然后讓我們選擇用于確定最佳超參數值的驗證數據的損失曲面,和全部總體數據的假設損失曲面,它是我們期望的模型最優(yōu)結果,也是測試集的估計(如果采樣正確)。
當我們根據驗證集數據每次都將旋鈕調至最佳值后,會發(fā)生什么呢?
可能的結果是驗證集和“總體”損失曲面不太一致。當每次我們調整一個超參數值使驗證集的損失曲面達到峰值時,我們可能已經越過“總體”損失曲面的峰值。調整得越多,越過的峰值就越多。這將導致驗證集和實際性能(由測試集估計)之間的差距越來越大。
就像這樣!這就是驗證集會變得過時和泄漏信息的原因,或者至少是一種有用的思考方式。
在這里,特別細心的讀者可能會問:“如果驗證和總體損失曲面沒有全部重合,那為什么峰值的重合要少于其他點的重合呢?”這是一個很好的問題,并且開始測試我們開發(fā)的心理模型的局限性。
為了回答這個問題,考慮單個超參數的驗證性能。現在,將目標函數的每個值都視為獲得了來自泛化特征和驗證集數據異常的貢獻。
隨著獲得更多的最優(yōu)值,每一個部分做出貢獻的機會就會增加。為了在不降低測試集和真實環(huán)境性能的情況下提升驗證性能,要求提高驗證性能的貢獻只來自泛化特征部分。
作為反饋,在這里向大家提出以下問題:如果你要優(yōu)化的一個超參數實際上不能從數據(例如 random_state)中學習泛化特征,針對這種情況優(yōu)化驗證損失會產生什么影響?
歸根結底,我們在此討論的是一個心理模型,正如 George Box 的著名格言所說的:
所有模型都是錯的,但有些是有用的。
我希望這是思考驗證集過度擬合背后機制的一種有用方法。
作為數據科學家,我們不能不通過實驗就闡述一個觀點。要求超參數之間沒有任何交互作用,是過于嚴格的。盡管這對于開發(fā)心理模型很有用,但最好有一些經驗結果表明這種想法能擴展到沒那么理想的場景。
接下來進行一個關于梯度提升回歸模型(Gradient Boosting Regression Model)上執(zhí)行的調整量以及驗證集和測試集性能之間的差距的快速實驗。其中選擇使用梯度提升算法的原因,是它是具有大量超參數的主流模型。
根據我們對驗證集泄漏的理解,我們期望的結果是:隨著調整的增加,驗證集和測試集之間的性能差距將不斷擴大。在實驗中,“更多的”調整定義為通過5個不同的超參數進行更多次的隨機搜索迭代。迭代次數越多,就越有可能在驗證集上找到更理想的結果。如果心理模型的部分最優(yōu)值真的來自非泛化的驗證數據異常,那么我們期望在測試數據上不要出現這種性能提升。
在展示最終結果之前,需要提前說明一件重要的事:這個實驗可能偏向于支持我的論點:
當然,通過使用大型驗證集可以減少驗證集泄漏的風險,但我使用了小數據來進行訓練和驗證,即“波士頓的房價”數據集,為的是能夠輕松地演示過度調整小的驗證集的情況。
你可以懷疑這些結論是否適用于除我選擇的特定數據集以外的其它數據集!我鼓勵你提出自己的實驗并分享你的結果。
如圖所示,當我們投入越多的精力用于優(yōu)化超參數和根據驗證集性能選擇模型時,驗證集和測試集之間的性能差距就越大。
如果我們已經調優(yōu)了一個超參數子集,然后再調優(yōu)另一個超參數集,或者嘗試切換使用的模型族,驗證集和測試集間的性能差距會更加顯著。根據數據樣本(驗證集)做出的每個決策,都會將該樣本的隨機波動緩慢地編碼到結果中。
這實際上是我第二次嘗試解釋超參數調整與驗證集過擬合現象之間的關系。而難以置信的是,我們很難清楚地解釋相對簡單的潛在直覺想法。
我認為部分原因是,“提問-回答”的思維定式仍然主導了我們的集體認知,例如“過度擬合驗證數據”和“驗證集泄漏信息”沒有視覺或經驗直覺的支持。
盡管本文是為了更深入、更初級的解釋超參數調整和過擬合驗證集之間的關系,但我們仍有更多角度空間和思考方式。 Cassie Kozyrkov 最近發(fā)布了一篇文章,將教學和《憨豆先生》進行類比,對數據集分割進行了有趣的論述:
很高興看到數據社區(qū)提出一些其它想法! 雷鋒網雷鋒網雷鋒網
via:https://towardsdatascience.com/why-machine-learning-validation-sets-grow-stale-69fa043fd547
雷峰網原創(chuàng)文章,未經授權禁止轉載。詳情見轉載須知。