機器學習基石13-Hazard of Overfitting

注:
文章中所有的圖片均來自臺灣大學林軒田《機器學習基石》課程。
筆記原作者:紅色石頭
微信公眾號:AI有道

上節課主要介紹了非線性分類模型,通過非線性變換,將非線性模型映射到另一個空間,轉換為線性模型,再來進行分類,分析了非線性變換可能會使計算復雜度增加。本節課介紹這種模型復雜度增加帶來機器學習中一個很重要的問題:過擬合(overfitting)。

一、What is Overfitting

首先,我們通過一個例子來介紹什么bad generalization。假設平面上有5個點,目標函數\(f(x)\)是2階多項式,如果hypothesis是二階多項式加上一些小的noise的話,那么這5個點很靠近這個hypothesis, \(E_{in}\)很小。如果hypothesis是4階多項式,那么這5點會完全落在hypothesis上,\(E_{in}=0\) 。雖然4階hypothesis的\(E_{in}\)比2階hypothesis的要好很多,但是它的\(E_{out}\)很大。因為根據VC Bound理論,階數越大,即VC Dimension越大,就會讓模型復雜度更高, \(E_{out}\)更大。我們把這種\(E_{in}\)很小, \(E_{out}\)很大的情況稱之為bad generation,即泛化能力差。
1010007-20190501093044677-191126079.png
回過頭來看一下VC曲線:
1010007-20190501093130854-841617834.png
hypothesis的階數越高,表示VC Dimension越大。隨著VC Dimension增大, \(E_{in}\)是一直減小的,而\(E_{out}\)先減小后增大。在\(d^*\)位置,\(E_{out}\)取得最小值。在\(d^*_{VC}\)右側,隨著VC Dimension越來越大,\(E_{in}\)越來越小,接近于0, \(E_{out}\)越來越大。即當VC Dimension很大的時候,這種對訓練樣本擬合過分好的情況稱之為過擬合(overfitting)。另一方面,在\(d^*_{VC}\)左側,隨著VC Dimension越來越小,\(E_{in}\)\(E_{out}\)都越來越大,這種情況稱之為欠擬合(underfitting),即模型對訓練樣本的擬合度太
差,VC Dimension太小了。
1010007-20190501093538265-1121653529.png
bad generation和overfitting的關系可以理解為:overfitting是VC Dimension過大的一個過程,bad generation是overfitting的結果。

一個好的fit, \(E_{in}\)\(E_{out}\)都比較小,盡管\(E_{in}\)沒有足夠接近零;而對overfitting來說,\(E_{in}\approx 0\),但是\(E_{out}\)很大。那么,overfitting的原因有哪些呢?
舉個開車的例子,把發生車禍比作成overfitting,那么造成車禍的原因包括:

  • 車速太快(VC Dimension 太大)
  • 道路崎嶇(noise)
  • 對路況的了解程度(訓練樣本數量\(N\)不夠)

也就是說,VC Dimension、noise、\(N\)這三個因素是影響過擬合現象的關鍵。
1010007-20190501094008640-2086992223.png

二、The Role of Noise and Data Size

為了盡可能詳細地解釋overfitting,我們進行這樣一個實驗,試驗中的數據集不是很大。首先,在二維平面上,一個模型的分布由目標函數\(f(x)\)\(x\)的10階多項式)加上一些noise構成,下圖中,離散的圓圈是數據集,目標函數是藍色的曲線。數據沒有完全落在曲線上,是因為加入了noise。
1010007-20190501094247094-1814717215.png
然后,同樣在二維平面上,另一個模型的分布由目標函數\(f(x)\)\(x\)的50階多項式)構成,沒有加入noise。下圖中,離散的圓圈是數據集,目標函數是藍色的曲線。可以看出由于沒有noise,數據集完全落在曲線上。
1010007-20190501100237396-1605638372.png
現在,有兩個學習模型,一個是2階多項式,另一個是10階多項式,分別對上面兩個問題進行建模。首先,對于第一個目標函數是10階多項式包含noise的問題,這兩個學習模型的效果如下圖所示:
1010007-20190501100342683-377624419.png
由上圖可知,2階多項式的學習模型\(E_{in}=0.050\)\(E_{out}=0.127\);10階多項式的學習模型\(E_{in}=0.034\)\(E_{out}=9.00\) 。雖然10階模型的\(E_{in}\)比2階的\(E_{in}\)小,但是其\(E_{out}\)要比2階的大得多,而2階的\(E_{in}\)\(E_{out}\)相差不大,很明顯用10階的模型發生了過擬合。
然后,對于第二個目標函數是50階多項式沒有noise的問題,這兩個學習模型的效果如下圖所示:
1010007-20190501100652446-1380718715.png
可以看到,用10階的模型仍然發生了明顯的過擬合。

上面兩個問題中,10階模型都發生了過擬合,反而2階的模型卻表現得相對不錯。這好像違背了我們的第一感覺,比如對于目標函數是10階多項式,加上noise的模型,按道理來說應該是10階的模型更能接近于目標函數,因為它們階數相同。但是,事實卻是2階模型泛化能力更強。這種現象產生的原因,從哲學上來說,就是“以退為進”。有時候,簡單的學習模型反而能表現的更好。

下面從learning curve來分析一下具體的原因,learning curve描述的是\(E_{in}\)\(E_{out}\)隨著數據量\(N\)的變化趨勢。下圖中左邊是2階學習模型的learning curve,右邊是10階學習模型的learning curve。
1010007-20190501100926042-1950235562.png
在learning curve中,橫軸是樣本數量\(N\),縱軸是Error。\(E_{in}\)\(E_{out}\)可表示為:\[E_{in}=noiselevel *(1-\frac{d+1}{N})\] \[E_{out}=noiselevel *(1+\frac{d+1}{N})\] 其中\(d\)為模型階次,左圖中\(d=2\),右圖中\(d=10\)
本節的實驗問題中,數據量\(N\)不大,即對應于上圖中的灰色區域。左圖的灰色區域中,因為\(d=2\)\(E_{in}\)\(E_{out}\)相對來說比較接近;右圖中的灰色區域中,\(d=10\),根據\(E_{in}\)\(E_{out}\)的表達式, \(E_{in}\)很小,而\(E_{out}\)很大。這就解釋了之前2階多項式模型的\(E_{in}\)更接近\(E_{out}\),泛化能力更好。

值得一提的是,如果數據量\(N\)很大的時候,上面兩圖中\(E_{in}\)\(E_{out}\)都比較接近,但是對于高階模型,z域中的特征很多的時候,需要的樣本數量\(N\)很大,且容易發生維度災難。

另一個例子中,目標函數是50階多項式,且沒有加入noise(noiselevel很小)。這種情況下,我們發現仍然是2階的模型擬合的效果更好一些,明明沒有noise,為什么是這樣的結果呢?
實際上,我們忽略了一個問題:這種情況真的沒有noise嗎?其實,當模型很復雜的時候,即50階多項式的目標函數,無論是2階模型還是10階模型,都不能學習的很好,這種復雜度本身就會引入一種‘noise’。所以,這種高階無noise的問題,也可以類似于10階多項式的目標函數加上noise的情況,只是二者的noise有些許不同,下面一部分將會詳細解釋。

三、Deterministic Noise

下面我們介紹一個更細節的實驗來說明 什么時候要小心overfit會發生。假設我們產生的數據分布由兩部分組成:第一部分是目標函數\(f(x)\)\(Q_f\)階多項式;第二部分是噪聲\(\epsilon\),服從Gaussian分布。接下來我們分析的是noise強度不同對overfitting有什么樣的影響。總共的數據量是\(N\)
1010007-20190501102039834-45844612.png
那么下面我們分析不同的\((N,\sigma^2)\)\((N,Q_f)\)對overfit的影響。overfit可以量化為\(E_{out}-E_{in}\)。結果如下:
1010007-20190501102221900-227970053.png

上圖中,紅色越深,代表overfit程度越高,藍色越深,代表overfit程度越低。先看左邊的圖,左圖中階數固定為20,橫坐標代表樣本數量\(N\),縱坐標代表噪聲水平\(\sigma^2\)。紅色區域集中在\(N\)很小或者\(\sigma^2\)很大的時候,也就是說\(N\)越大,\(\sigma^2\) 越小,越不容易發生overfit。右邊圖中,橫坐標代表樣本數量\(N\),縱坐標代表目標函數階數\(Q_f\)。紅色區域集中在\(N\)很小或者\(Q_f\)很大的時候,也就是說\(N\)越大,\(Q_f\) 越小,越不容易發生overfit。上面兩圖基本相似。

從上面的分析,我們發現\(\sigma^2\)對overfit是有很大的影響的,我們把這種noise稱之為stochastic noise。同樣地, \(Q_f\)即模型復雜度也對overfit有很大影響,而且二者影響是相似的,所以我們把這種稱之為deterministic noise。之所以把它稱為noise,是因為模型高復雜度帶來的影響。

總結一下,有四個因素會導致發生overfitting:

  • data size \(N\) \(\downarrow\)
  • stochastic noise \(\sigma^2\) \(\uparrow\)
  • deterministic noise \(Q_f\) \(\uparrow\)
  • excessive power \(\uparrow\)

我們剛才解釋了如果目標函數\(f(x)\)的復雜度很高的時候,那么跟有noise也沒有什么兩樣。因為目標函數很復雜,那么再好的hypothesis都會跟它有一些差距,我們把這種差距稱之為deterministic noise。deterministic noise與stochastic noise不同,但是效果一樣。其實deterministic noise類似于一個偽隨機數發生器,它不會產生真正的隨機數,而只產生偽隨機數。它的值與hypothesis有關,且固定點\(x\)的deterministic noise值是固定的。
1010007-20190501103007288-1282321574.png

四、Dealing with Overfitting

現在我們知道了什么是overfitting,和overfitting產生的原因,那么如何避免overfitting呢?避免overfitting的方法主要包括:

  • start from simple model (\(Q_f\))
  • data cleaning/pruning (noise)
  • data hinting (\(N\))
  • regularization
  • validation

這幾種方法類比于之前舉的開車的例子,對應如下:
1010007-20190501103241496-236767932.png
regularization和validation我們之后的課程再介紹,本節課主要介紹簡單的data cleaning/pruning和data hinting兩種方法。

data cleaning/pruning就是對訓練數據集里label明顯錯誤的樣本進行修正(data cleaning),或者對錯誤的樣本看成是noise,進行剔除(data pruning)。data cleaning/pruning關鍵在于如何準確尋找label錯誤的點或者是noise的點,而且如果這些點相比訓練樣本\(N\)很小的話,這種處理效果不太明顯。
1010007-20190501103436526-954713487.png

data hinting是針對\(N\)不夠大的情況,如果沒有辦法獲得更多的訓練集,那么data hinting就可以對已知的樣本進行簡單的處理、變換,從而獲得更多的樣本。舉個例子,數字分類問題,可以對已知的數字圖片進行輕微的平移或者旋轉,從而讓\(N\)豐富起來,達到擴大訓練集的目的。這種額外獲得的例子稱之為virtual examples。但是要注意一點的就是,新獲取的virtual examples可能不再是iid某個distribution。所以新構建的virtual examples要盡量合理,且是獨立同分布。
1010007-20190501103450210-1589179672.png

五、總結

本節課主要介紹了overfitting的概念,即當\(E_{in}\)很小,\(E_{out}\) 很大的時候,會出現overfitting。詳細介紹了overfitting發生的四個常見原因data size \(N\)、stochastic noise、deterministic noise和excessive power。解決overfitting的方法有很多,本節課主要介紹了data cleaning/pruning和data hinting兩種簡單的方法,之后的課程將會詳細介紹regularization和validation兩種更重要的方法。

轉載于:https://www.cnblogs.com/SweetZxl/p/10799182.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393902.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393902.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

容器為何物,為什么它對OpenStack很重要?

本文講的是容器為何物,為什么它對OpenStack很重要,【編者的話】本文主要介紹了容器的發展、容器技術、容器類型、Docker、Open Container Initiative、微服務以及OpenStack中容器的應用。 容器現在正經歷著一次重生,部分原因是由于云計算的發…

oracle執行計劃的rows不對,Oracle執行計劃——all_rows和first_rows(n)優化器模式

Oracle執行計劃——all_rows和first_rows(n)優化器模式0. 環境創建[sql]SQL> create usertest identified by test2 default tablespace users3 temporary tablespace temp4 quota unlimited on users;User created.SQL> grant createsession, resource, alter session t…

從 MVC 到前后端分離

轉載自:https://my.oschina.net/huangyong/blog/521891 從MVC到前后端分離 1.理解 MVC MVC是一種經典的設計模式,全名為Model-View-Controller,即模型-視圖-控制器。其中,模型是用于封裝數據的載體,例如,在…

leetcode93. 復原IP地址(回溯)

給定一個只包含數字的字符串,復原它并返回所有可能的 IP 地址格式。 有效的 IP 地址正好由四個整數(每個整數位于 0 到 255 之間組成),整數之間用 ‘.’ 分隔。 示例: 輸入: “25525511135” 輸出: [“255.255.11.135”, “255…

vj節點_創意編碼—如何在JavaScript中創建VJ引擎

vj節點by George Gally通過喬治加利 創意編碼—如何在JavaScript中創建VJ引擎 (Creative Coding — How to create a VJ engine in JavaScript) 了解如何將JavaScript動態注入網頁 (Learn how to dynamically inject JavaScript into webpages) For years I’ve been using th…

上傳下載

# 默寫 TCP UDP 文件夾中的代碼# 完成一個上傳和下載文件的小程序 # server端 :根據客戶端需求自定義 # client端 # 客戶端啟動之后 # 選擇 上傳操作 還是 下載操作 # 如果是上傳操作 : 輸入要上傳的文件路徑 # 基礎需求 :直接將文件上傳到默認目錄 # 進階需求 :將…

qt 串口 環形緩存_qt?linux串口?緩沖區多大

滿意答案Zc的愛丶很美2016.09.11采納率:51% 等級:9已幫助:515人一、程序設計的基礎,例如:基本的編程語言基礎,至少對數據類型、程序的結構及流程控制等最基本的內容要相當清楚!另外有不少同學…

在.NET中使用SMTP發送郵件

這是一篇轉載,可能對大家很有用啊,放首頁看看是否有參考價值。本文提到的方案仍然不能算是完全解決所有問題,最佳的dotNET下通過SMTP(帶驗證)發送郵件的機制是什么,不知道大家有什么好的看法! …

oracle堆,oracle被一堆insert和update堵死解決方案

當前位置:我的異常網 Oracle技術 oracle被一堆insert和update堵死解決方案oracle被一堆insert和update堵死解決方案www.myexceptions.net 網友分享于:2014-07-22 瀏覽:0次oracle被一堆insert和update堵死在生產環境下,幾乎每天都會發生一次…

leetcode306. 累加數(回溯)

累加數是一個字符串,組成它的數字可以形成累加序列。 一個有效的累加序列必須至少包含 3 個數。除了最開始的兩個數以外,字符串中的其他數都等于它之前兩個數相加的和。 給定一個只包含數字 ‘0’-‘9’ 的字符串,編寫一個算法來判斷給定輸…

使用Typescript和React的最佳實踐

by Christopher Diggins克里斯托弗迪金斯(Christopher Diggins) 使用Typescript和React的最佳實踐 (Best practices for using Typescript with React) There are numerous tools and tutorials to help developers start writing simple React applications with TypeScript.…

LeetCode || Copy List with Random Pointer

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 思路1:最傻瓜的方法是首先遍歷一次建立next關系的新list。然后第二次遍歷處理random關系…

oracle存儲過程多分支怎樣寫,如何從存儲過程返回多行? (Oracle PL / SQL)

如何從存儲過程返回多行? (Oracle PL / SQL)我想用一個參數創建一個存儲過程,該存儲過程將根據參數返回不同的記錄集。 這是怎么做的? 我可以從普通SQL中調用它嗎?5個解決方案65 votes這是如何構建一個函數,該函數返回…

京東布局消費物聯網 聚合產業鏈共建生態

據Gartner發布的數據顯示,到2020年,全球聯網設備數量將達260億臺,物聯網市場規模將達1.9萬億美元。如今,互聯網已經從人與人的連接發展到人與物、物與物的連接,物聯網時代帶來。 5月9日,京東聚合三大運營商…

xshell監聽端口_監聽端口修改_笨辦法學Linux 遠程訪問 (原理、實踐、記錄與排錯)-視頻課程_Linux視頻-51CTO學院...

聰明人下笨功夫。本課程所倡導“笨辦法”的核心是:● 深入理解原理● 精讀man幫助、官方文檔…● 做所有的實驗,盡量不要復制粘貼!● 詳細記錄實驗過程● 使用思維導圖等輔助工具● 享受排錯的過程,在尋求幫助之前先嘗試自己解決本…

leetcode632. 最小區間(堆+多指針)

你有 k 個升序排列的整數數組。找到一個最小區間&#xff0c;使得 k 個列表中的每個列表至少有一個數包含在其中。 我們定義如果 b-a < d-c 或者在 b-a d-c 時 a < c&#xff0c;則區間 [a,b] 比 [c,d] 小。 示例 1: 輸入:[[4,10,15,24,26], [0,9,12,20], [5,18,22,3…

【SLAM】安裝 g2o_viewer

2017年2月8日&#xff0c;那是一個陰天。為了完成高翔博士的《一起做RGB-D SLAM》教程&#xff0c;我在 Ubuntu 14.04 安裝 g2o。遇到困難&#xff0c;怎奈我眼瞎&#xff0c;找錯了方向&#xff0c;浪費時間&#xff0c;沒有成功安裝。 問題如下&#xff08;跳到最后一個問題描…

CSS動畫快速介紹

Interested in learning CSS? Get my CSS Handbook 有興趣學習CSS嗎&#xff1f; 獲取我的CSS手冊 介紹 (Introduction) An animation is applied to an element using the animation property.使用animation屬性將動畫應用于元素。 .container { animation: spin 10s linear…

2_sat

要求字典序的情況的話&#xff0c;爆搜 不要求的話 1:建圖&#xff0c;有向邊A--->B的意義為選擇A則必須選擇B&#xff0c;一般一個點的兩種取值情況會拆點。 2:縮點。 3:建反向圖&#xff0c;跑拓撲排序&#xff08;有說不用建再跑&#xff0c;但我不懂為什么&#xff09;。…

[Spark][Python]Spark 訪問 mysql , 生成 dataframe 的例子:

[Spark][Python]Spark 訪問 mysql , 生成 dataframe 的例子&#xff1a; mydf001sqlContext.read.format("jdbc").option("url","jdbc:mysql://localhost/loudacre")\ .option("dbtable","accounts").option("user&quo…