官术网_书友最值得收藏!

1.6 測試和驗證

了解模型對新實例的泛化能力的唯一方法是在新實例上進行實際嘗試。一種方法是將模型部署到生產環境并監控其性能。這種方法很有效,但如果模型非常糟糕,你的用戶就會抱怨,所以這顯然不是最好的方法。

更好的選擇是將數據分成兩組:訓練集和測試集。顧名思義,你可以使用訓練集訓練模型,并使用測試集對其進行測試。新實例的錯誤率稱為泛化誤差(或樣本外誤差),通過在測試集上評估模型,你可以獲得誤差的估計值。這個值能告訴你模型在處理以前從未見過的實例時的表現。

如果訓練誤差很低(即模型在訓練集上犯的錯誤很少)但是泛化誤差很高,這意味著你的模型過擬合了訓練數據。

通常使用80%的數據進行訓練,保留20%的數據進行測試。然而,這取決于數據集的大小:如果它包含1000萬個實例,那么保留1%意味著你的測試集將包含10萬個實例,這可能足以很好地估計泛化誤差。

1.6.1 超參數調整和模型選擇

評估模型非常簡單:只需使用一個測試集。現在假設你在兩種類型的模型(比如線性模型和多項式模型)之間猶豫不決,你如何做出判斷呢?一種選擇是同時訓練這兩個模型,并使用測試集比較它們的泛化能力。

現在假設線性模型泛化得更好,但你想應用一些正則化來避免過擬合。問題是,你如何選擇正則化超參數的值?一種選擇是對于這個超參數,使用100個不同的值來訓練100個不同的模型。假設你找到了最佳超參數值,它生成的模型泛化誤差最小,比如只有5%的誤差。你將此模型部署到生產環境,但遺憾的是它的性能并不如預期,產生了15%的誤差。到底發生了什么?

問題是你多次測量了測試集上的泛化誤差,并且調整了模型和超參數來生成擬合那個測試集的最佳模型。這意味著該模型不太可能在新數據上表現良好。

這個問題的一個常見解決方案稱為保持驗證(見圖1-25):你只需保持訓練集的一部分,以評估幾個候選模型并選擇最佳模型。新的保留集稱為驗證集(或開發集)。更具體地說,你可以在簡化的訓練集(即完整訓練集減去驗證集)上訓練具有各種超參數的多個模型,然后選擇在驗證集上表現最佳的模型。在此保持驗證過程之后,你在完整訓練集(包括驗證集)上訓練最佳模型,這就是你的最終模型。最后,你在測試集上評估這個最終模型以獲得泛化誤差的估計。

圖1-25:使用保持驗證的模型選擇

這個解決方案通常效果很好。但是,如果驗證集太小,則模型評估就不精確,你最終可能會錯誤地選擇一個次優模型。相反,如果驗證集太大,那么剩余的訓練集會比完整的訓練集小得多。為什么這樣不好?好吧,由于最終模型是在完整的訓練集上進行訓練,因此在小得多的訓練集上訓練的候選模型并不理想。這就像選擇最快的短跑運動員去參加馬拉松比賽。解決這個問題的一種方法是使用許多小的驗證集執行重復的交叉驗證。每個模型在對其余數據進行訓練后,每個驗證集都會評估一次。通過對模型的所有評估求平均,可以更準確地衡量其性能。然而,有一個缺點:訓練時間是驗證集數量的倍數。

1.6.2 數據不匹配

在某些情況下,很容易獲得大量數據用于訓練,但這些數據可能無法完全代表將在生產環境中使用的數據。例如,假設你想創建一個移動應用程序來拍攝花朵照片并自動確定它們的種類。你可以輕松地在網絡上下載數百萬張花卉圖片,但它們并不能完全代表在移動設備上使用該應用程序實際拍攝的照片。也許你只有1000張有代表性的照片(即實際使用該應用程序拍攝的)。

在這種情況下,要記住的最重要的規則是驗證集和測試集都必須盡可能地代表你希望在生產環境中使用的數據,因此它們應該完全由有代表性的圖片組成:你可以將它們打亂并將一半放在驗證集中,一半放在測試集中(確保兩個集中都沒有重復或接近重復)。在網絡圖片上訓練了模型后,如果你觀察到模型在驗證集上的表現令人失望,那么你將不知道這是因為模型對訓練集過擬合了,還是僅僅因為網絡圖片和移動應用程序圖片之間的不匹配。

一種解決方案是將一些訓練圖片(來自網絡)放在被吳恩達(Andrew Ng)稱為train-dev(訓練開發)集(見圖1-26)的另一個集合中。模型訓練完成后(在訓練集上,而不是在train-dev集上),你可以在train-dev集上對其進行評估。如果模型表現不佳,那么它一定是對訓練集過擬合了,所以應該盡量簡化或正則化該模型、獲取更多的訓練數據,以及清洗訓練數據。但是如果模型在train-dev集上表現良好,那么你可以在開發集上評估模型。如果模型表現不佳,那么問題一定來自數據不匹配。你可以嘗試通過預處理網絡圖片來解決這個問題,使它們看起來更像移動應用程序拍攝的照片,然后重新訓練模型。一旦你擁有在train-dev集和開發集上都表現良好的模型,就可以在測試集上最后一次評估它,以了解它在生產環境中的表現。

圖1-26:當真實數據稀缺時(右),你可以使用類似豐富的數據(左)進行訓練,并在train-dev集中保留一些數據以評估過擬合。然后使用真實數據評估數據不匹配(開發集)和最終模型的性能(測試集)

沒有免費的午餐定理

模型是數據的簡化表示。簡化旨在丟棄不太可能泛化到新實例的多余細節。當你選擇特定類型的模型時,你是在隱含地對數據做出假設。例如,如果你選擇線性模型,則隱含地假設數據基本上是線性的,并且實例與直線之間的距離只是噪聲,可以安全地忽略它。

在1996年的一篇著名論文(https://homl.info/8[9]中,David Wolpert證明,如果你完全不對數據做出任何假設,那么就沒有理由偏愛某個模型。這被稱為沒有免費的午餐(No Free Lunch,NFL)定理。對于一些數據集,最好的模型是線性模型,而對于其他數據集,最好的模型是神經網絡模型。不存在一個先驗模型可以保證一定能更好地工作(這是定理名稱的由來)。確定哪種模型最好的唯一方法是對所有模型進行評估。由于這是不可能的,因此在實踐中你對數據做出了一些合理的假設并僅評估了幾個合理的模型。例如,對于簡單的任務,你可能只會評估幾個具有不同正則化水平的線性模型,而對于復雜的問題,你可能會評估多個神經網絡模型。

主站蜘蛛池模板: 文安县| 平泉县| 林周县| 蕲春县| 行唐县| 沈丘县| 武山县| 武胜县| 凉山| 金寨县| 湘潭县| 霍城县| 新疆| 寻乌县| 安多县| 莱芜市| 于都县| 黑山县| 莱西市| 德安县| 墨竹工卡县| 建德市| 偏关县| 黔东| 邵阳市| 黔西| 鄂州市| 绍兴市| 新乡县| 杭州市| 子洲县| 吉安市| 通江县| 伊金霍洛旗| 锡林浩特市| 麻阳| 隆安县| 通榆县| 中方县| 天祝| 商河县|