天天看點

什麼是過拟合?

各位小夥伴們大家好,很高興能夠和大家繼續讨論機器學習方面的問題,今天想和大家讨論下關于機器學習中的監督學習中的過拟合的問題,以及解決過拟合的一些方法。

在正式進入正題前,我想用幾個我們生活中常見的幾個簡單的例子來讓大家更好地了解下過拟合的概念。其實簡單的說,過拟合的現象其實就是機器學習過于自信已經到了自付的階段了。至于什麼是自負。我們大概都能想到在自己的小圈子裡表現非凡,但是在現實這個大環境中屢屢遭受碰壁。是以我想把自負比作過拟合)(自負=過拟合)。

那麼這個時候就可能産生疑問。那麼機器學習過于自負是一種什麼樣的表現呢?

現在在下圖有一張圖,圖上的紅點可以看作為一堆資料,這個時候我們一定想到用一條線來把這些資料串起來,整合起來,所有人都希望資料可以分步在這條線周圍,這個時候這條線和資料的總誤差可能為10.但是這個時候,機器就跟我們的學生一樣,總想考第一名,總想拿一百分,這個時候機器就希望獲得盡可能少的誤差,來完成對着一批資料的使命。但是機器這樣想後卻得到了圖中的那根紅線,彎彎曲曲,并且經過了所有的點,這樣的誤差就會盡可能的小。但是誤差少真的會好麼?

什麼是過拟合?
什麼是過拟合?

看起來我們的模型還是太天真了,就跟我們的家長們總以為隻要孩子考試得到了滿分這個孩子就一定會得到最好的結果。當這個孩子踏出社會後他的很多方面會共同決定他的發展。機器學習模型也類似。當我們把這個模型應用到具體的情況中的時候,他的自負就表現出來了。這個時候假設你的公司給了你一批新的資料,你對模型說,模型,你給我跑出來。這個時候原來的那根筆直的直線因為資料都分布在他的周圍,誤差很小。但是在之前誤差一直很小的模型曲線反而這次獲得了較大的誤差,表現反而很糟糕。這個時候,曲線就再也驕傲不起來了,因為他并無法很好的符合除了測試資料之外的訓練資料。這個現象就是我們所說的過拟合。

那麼在分類問題中,過拟合的分割曲線可能會是下圖這樣,當我們在加上一些資料之後,我們可以很明顯的發現有一些原本不屬于這個分類的資料在這個分類,對于這個現象其實就是過拟合的現象在作怪了。那麼既然過拟合的問題我們會時不時的遇到,那麼我們應該怎麼樣去解決過拟合的問題呢?

什麼是過拟合?

方法1:增加資料量

大多數的過拟合的問題是因為他們的資料量太少了,如果我們有成千上萬的資料量進行訓練。我們那根彎彎曲曲的曲線也會被糾正的不是那麼扭曲,會逐漸被拉直,這樣模型誤差就會進一步減少

方法2:運用正規化

正規化這個問題适用于大多數的機器學習以及大多數的神經網絡,其實他們的方法都大同小異,我們現在進行簡化正規化的公式為Y=WX(實際的公式比這個複雜得多)。W為機器學習所需要學習到的各種參數。在實際過程中因為訓練資料的參差不齊,W的變化往往會非常大,為了避免這個現象,現在我們在計算誤內插補點上進行一些手腳,對于誤差我們是這樣計算的cost=(wx-realy)2+abs(w)。預測值減去真實值的平方加上w的絕對值。既然W會越大,我們就用這個公式讓cost也變得更大,這樣讓cost作為一個懲罰機制,在加上一個abs(w),這樣的正規化就叫做L1正規化。Cost=(wx-realy)2+(w)2這樣的現象就叫做L2正規化。其他的L系列的方法也都是類似的方法。通過這樣的方法我們就可以使曲線沒有那麼的扭曲,變得更加的筆直,更加的符合真實的需求。

還有一種常用于神經網絡的一種正規化方法:Dropout regularization。

在訓練的時候,我們随機忽略掉一些神經元和神經連接配接,使得這個神經網絡變得不完整。不完整的神經網絡經過訓練到達第二次後,這個時候我們再選擇忽略掉一點。讓其再變為又一個不完整的神經網絡。注意每次忽略掉的前提資料必須是随機不完整。其實想想有了這樣的随機忽略drop的方法,我們其實就可以猜測出每一次的訓練都不會太過于依賴那些特定的神經元就跟L1,L2這樣的正規化的方法一樣,每一次的訓練都過于依賴參數W。L1,L2會懲罰這些W,而drop的方法會随即丢失這些w.這個方法可以從根本上讓神經網絡無法過于依賴W。進而有效的緩解過拟合的問題。

好了,這個就是這篇文章所包含的什麼是過拟合以及如何解決過拟合方法的一些問題。