- Python 深度學習
- 呂云翔 劉卓然 關捷雄等編著
- 1084字
- 2021-04-14 11:54:18
3.1 模型評估與模型參數選擇
如何評估一些訓練好的模型并從中選擇最優的模型參數?對于給定輸入x,若某個模型的輸出偏離真實目標值y,則說明模型存在誤差;
偏離y的程度可以用關于
和y某個函數L(y,
)表示,作為誤差的度量標準,這樣的函數L(y,
)稱為損失函數。
在某個損失函數度量下,訓練集上的平均誤差被稱為訓練誤差,測試集上的誤差被稱為泛化誤差。由于我們訓練得到一個模型最終的目的是在未知數據上得到盡可能準確的結果,因此泛化誤差是衡量一個模型泛化能力的重要標準。
之所以不能把訓練誤差作為模型參數選擇的標準,是因為訓練集可能存在兩方面問題:一是訓練集樣本太少,缺乏代表性;二是訓練集中本身存在錯誤的樣本,即噪聲。
如果片面追求訓練誤差的最小化,會導致模型參數復雜度增加,使模型過擬合(Overfitting),如圖3.1所示。

圖3.1 擬合與過擬合
為了選擇效果最佳的模型,防止過擬合的問題,通常可以采取的方法有如下兩種。
● 使用驗證集調參。
● 對損失函數進行正則化。
3.1.1 驗證
模型不能過擬合于訓練集,否則將不能在測試集上得到最優結果;但是否能直接以測試集上的表現來選擇模型參數呢?答案是否定的。因為這樣的模型參數將會是針對某個特定測試集的,得出的評價標準將會失去其公平性,失去了與其他同類或不同類模型相比較的意義。
這就好比如要證明某位學生學習某門課程的能力比別人強(模型算法的有效性),則需要讓他與其他學生聽一樣的課、做一樣的練習(相同的訓練集),然后以這些學生沒做過的題目測試他們(測試集與訓練集不能交叉);但是如果我們直接在測試集上調參,那就相當于讓這位學生針對考試題復習,這樣與其他學生的測試比較顯然是不公平的。
因此參數的選擇(即調參)必須在一個獨立于訓練集和測試集的數據集上進行,這樣的用于模型調參的數據集被稱為開發集或驗證集。
然而很多時候我們能得到的數據量非常有限,這時我們可以不顯式地使用驗證集,而是重復使用訓練集和測試集,也就是交叉驗證。常用的交叉驗證方法有如下兩種。
● 簡單交叉驗證:在訓練集上使用不同超參數訓練,再使用測試集選出最佳的一組超參數設置。
● K-重交叉驗證(K-fold cross validation):將數據集劃分成K等份,每次使用其中一份作為測試集(剩余的為訓練集),進行K次之后,選擇最佳的模型。
3.1.2 正則化
為了避免過擬合,需要選擇參數復雜度最小的模型。這是因為如果有兩個效果相同的模型,而它們的參數復雜度不相同,那么冗余的復雜度一定是由于過擬合導致的。為了選擇復雜度較小的模型,需在優化目標中加入正則化項,以懲罰冗余的復雜度:

其中,θ為模型參數;L(y,;θ)為原來的損失函數;J(θ)是正則化項;λ用于調整正則化項的權重。正則化項通常為θ的某階向量范數。
- iOS面試一戰到底
- Reporting with Visual Studio and Crystal Reports
- CMDB分步構建指南
- JavaScript Unlocked
- Reactive Programming With Java 9
- Reactive Android Programming
- Arduino家居安全系統構建實戰
- Natural Language Processing with Java and LingPipe Cookbook
- Red Hat Enterprise Linux Troubleshooting Guide
- Python網絡爬蟲技術與應用
- HTML5+CSS3+JavaScript 從入門到項目實踐(超值版)
- Mockito Essentials
- CodeIgniter Web Application Blueprints
- Apache Solr PHP Integration
- 計算機程序的構造和解釋(JavaScript版)