過擬合與欠擬合


過擬合與欠擬合

目錄

一、    過擬合(overfitting)與欠擬合(underfitting    2

1.    過擬合    3

2.    欠擬合(高偏差)    3

3.    偏差(Bias    3

4.    方差(Variance    3

二、    防止過擬合和欠擬合的方法    4

1.    如何防止過擬合    4

獲取更多數據    4

使用合適的模型(減少特征變量)    6

限制權值Weight-decay,也叫正則化(regularization    6

貝葉斯方法    6

結合多種模型    6

2.    如何防止欠擬合    7

三、    L0,L1,L2正則化,也叫L0,L1,L2范數    7

1.    正則化    10

2.    L0正則化    11

3.    L1正則化    11

4.    L2正則化    11

5.    11

四、    如何利用貝葉斯方法防止過擬合    11

 

 

 

 

 

 

 

 

 

 

  1. 過擬合(overfitting)與欠擬合(underfitting

首先要確定的兩個概念是Underfit(欠擬合)Overfit(過擬合),也被稱為high biashigh viarance。在表征線性回歸模型的下面三張圖中,左圖使用一條直線來做預測模型,很明顯無論如何調整起始點和斜率,該直線都不可能很好的擬合給定的五個訓練樣本,更不要說給出的新數據;右圖使用了高階的多項式,過於完美的擬合了訓練樣本,當給出新數據時,很可能會產生較大誤差;而中間的模型則剛剛好,既較完美的擬合訓練數據,又不過於復雜,基本上描繪清晰了在預測房屋價格時SizePrize的關系。

對於邏輯回歸,同樣存在此問題,如下圖:

機器學習中的泛化:

在機器學習中,我們描述從訓練數據學習目標函數的學習過程成為歸納性的學習。

泛化是指,機器學習模型學到的概念在遇到新的數據時表現的好壞(預測准確度等)。

擬合:擬合是指你逼近目標函數的遠近程度。

 

  1. 過擬合

模型過度擬合,在訓練集(training set)上表現好,但是在測試集上效果差,也就是說在已知的數據集合中非常好,但是在添加一些新的數據進來訓練效果就會差很多,造成這樣的原因是考慮影響因素太多,超出自變量的維度過於多了。

  1. 欠擬合(高偏差)

模型擬合不夠,在訓練集(training set)上表現效果差,沒有充分的利用數據,預測的准確度低。

  1. 偏差(Bias

首先error=bias+variance

Bias反映的是模型在樣本上的輸出與真實值之間的誤差,即模型本身的精確度。

  1. 方差(Variance

Variance反映的是模型每一次輸出結果與模型輸出期望之間的誤差,即模型的穩定性

如上圖所示:偏差值的是模型的輸出值與紅色中心的距離;而方差指的是模型的每一個輸出結果與期望之間的距離。

就像我們射箭,低偏差指的是我們瞄准的點與紅色中心的距離很近,而高偏差指的是我們瞄准的點與紅色中心的距離很遠。低方差是指當我們瞄准一個點后,射出的箭中靶子的位置與我們瞄准的點的位置距離比較近;高方差是指當我們瞄准一個點后,射出的箭中靶子的位置與我們瞄准的點的位置距離比較遠。

 

低偏差低方差時,是我們所追求的效果,此時預測值正中靶心(最接近真實值),且比較集中(方差小)

低偏差高方差時,預測值基本落在真實值周圍,但很分散,此時方差較大,說明模型的穩定性不夠好。

高偏差低方差時,預測值與真實值有較大距離,但此時值很集中,方差小;模型的穩定性較好,但預測准確率不高,處於"一如既往地預測不准"的狀態。

高偏差高方差時,是我們最不想看到的結果,此時模型不僅預測不准確,而且還不穩定,每次預測的值都差別比較大。

過擬合表現為:在訓練集上表現很好,但是在測試集上效果很差。

欠擬合表現為:在訓練集上表現就不太好。

  1. 防止過擬合和欠擬合的方法
  1. 如何防止過擬合

綜述:一般來說防止過擬合的方法有:

獲取更多數據減少特征變量限制權值(正則化)貝葉斯方法結合多種模型

以深度學習中的神經網絡為例,防止過擬合的方法如下:

獲取更多數據

這是解決過擬合最有效的方法,只要給足夠多的數據,讓模型[訓練到]盡可能多的[例外情況],它就會不斷修正自己,從而得到更好的結果。

如何獲取更多的數據,可以有以下幾個方法:

從數據源頭獲取更多數據:這個是最容易想到的,例如物體分類,我就再多拍幾張照片就好了;但是在很多情況下,大幅增加數據本身就不容易;另外,我們不清楚獲取多少數據才算夠用能使模型表現較好。

根據當前數據集估計數據分布參數,使用該分布產生更多數據:這個一般不用,因為估計分布參數的過程也會帶入抽樣誤差。

數據增強(Data Augmentation:通過一定規則擴充數據。如在物體分類問題里,物體在圖像中的位置、姿態、尺度,整體圖片明暗度等都不會影響分類結果。我們就可以通過圖像平移、翻轉、縮放、切割等手段將數據庫成倍擴充。

使用合適的模型(減少特征變量)

前面說了,過擬合主要使有兩個原因造成的:數據太少+模型太復雜。所以我們可以通過使用合適復雜度的模型來防止過擬合問題,讓其足夠擬合真正的規則,同時又不至於擬合太多抽樣誤差。

減少網絡的層數、神經元的個數等均可以限制網絡的擬合能力;

Early stopping早停止

對於每個神經元而言,其激活函數在不同區間的性能使不同的:

當網絡權值較小時,神經元的激活函數工作在線性區,此時神經元的擬合能力較弱(類似線性神經網絡)。

有了上述共識之后,我們就剋解釋為什么限制訓練時間(early stopping)有用:因為我們在初始化網絡的時候一般都是初始化為較小的權值。訓練時間越長,部分網絡權值可能越大,如果我們在合適的時間停止訓練,就可以將網絡的能力限制在一定范圍內。

限制權值Weight-decay,也叫正則化(regularization

下面第三部分會詳細介紹L0,L1,L2正則化即L0,L1,L2范數。

貝葉斯方法

下面第四部分詳細介紹如何利用貝葉斯方法防止過擬合。

結合多種模型

簡而言之,訓練多個模型,以每個模型的平均輸出作為結果。

Bagging

簡單理解,就是分段函數的概念:用不同的模型擬合不同部分的訓練集。以隨機森林(Rand Forests)為例,就是訓練了一堆不關聯的決策樹。但由於訓練神經網絡本身需要耗費較多自由,所以一般不單獨使用神經網絡做Bagging

Boosting

既然訓練復雜神經網絡比較慢,那我們就可以只使用簡單的神經網絡(層數、神經元數限制等),通過訓練一系列簡單的神經網絡,加權平均其輸出。

Dropout

這是一個很高效的方法

在訓練時,每次隨機(如50%概率)忽略隱藏層的某些節點;這樣我們相當於隨機從2^H個模型中采樣選擇模型.

 

  1. 如何防止欠擬合

引入新的特征添加多項式特征減少正則化參數

  1. L0,L1,L2正則化,也叫L0,L1,L2范數

在機器學習的概念中,我們經常聽到L0,L1,L2正則化,下面我們對這幾種正則化做簡單介紹

數學基礎:

范數,用||x||表示范數

向量范數是衡量某個向量空間中向量的大小或長度;矩陣范數表征矩陣引起變化的大小。一種非嚴密的解釋就是,對應向量范數,向量空間中向量都是有大小的,這個大小如何度量,就是用范數來度量的,不同的范數都可以來度量這個大小,就好比米和厘米都可以來度量長度一樣;對於矩陣范數,學過線性代數,我們知道,通過運算AX=B,可以將向量X變化為B,矩陣范數就是來度量這個變化大小的。

這里簡單的介紹以下幾種向量范數的定義和含義。

L-P范數

L-P范數不是一個范數,而是一組范數,其定義如下:

根據P的變化,范數也有着不同的變化,一個經典的有關P范數的變化圖如下:

上圖表示了p從無窮到0變化時,三維空間中到原點的距離(范數)為1的點構成的圖形的變化情況。以常見的L-2范數(p=2)為例,此時的范數也即歐氏距離,空間中到原點的歐氏距離為1的點構成了一個球面。

 

L0范數

p=0時,也就是L0范數,由上面可知,L0范數並不是一個真正的范數,它主要是被用來度量向量中非零元素的個數。用上面L-P定義可以得到的L0的定義為:

這里就有點問題了,我們知道非零元素的零次方為1,但零的零次方,非零數開零次方都是什么鬼,很不好說明L0的意義,所以在通常情況下,大家都用的是:

表示向量x中非零元素的個數。

對於L0范數,其優化問題為:

即能令Ax=b成立的維度最少數量的x,即尋找一個向量,能夠使Ax=b,並且x中所包含的特征比較少。在實際應用中,由於L0范數本身不容易有一個好的數學表示形式,給出上面問題的形式化表示是一個很難的問題,故被人認為是一個NP難問題。所以在實際情況中,L0的最優問題會被放寬到L1L2下的最優化。

 

L1范數

L1范數是我們經常見到的一種范數,它的定義如下:

表示向量中非零元素的絕對值之和。(一個向量中非零元素的絕對值之和,例如向量[1,-1,2],它的L1范數是|1||+||-1||+||2||=4||。

L1范數有很多的名字,例如我們熟悉的曼哈頓距離、最小絕對誤差等。使用L1范數可以度量兩個向量間的差異,如絕對誤差和(Sum of Absolute Difference):

對於L1范數,它的優化問題如下:

由於L1范數的天然性質,對L1優化的解是一個稀疏解,因此L1范數也被叫做稀疏規則算子。通過L1可以實現特征的稀疏,去掉一些沒有信息的特征,例如在對用戶的電影愛好做分類的時候,用戶有100個特征,可能只有十幾個特征是對分類有用的,大部分特征如身高體重等可能都是無用的,利用L1范數就可以過濾掉。

 

L2范數

L2范數是我們最常用的范數了,我們用的最多的度量距離歐氏距離就是一種L2范數,它的定義如下:

表示向量元素的平方和再開方。

像L1范數一樣,L2范數也可以度量兩個向量間的差異,如平方差和(Sum of Squared Difference):

對於L2范數,它的優化問題如下:

L2范數通常會被用來做優化目標函數的正則化項,防止模型為了迎合訓練集而過於復雜造成過擬合的情況,從而提高模型的泛化能力。

范數

當P= 時,也就是范數,它主要被用來度量向量元素的最大值。用上面的定義可以得到的定義為:

與L0一樣,在通常情況下,大家都用的是:

來表示

  1.     正則化

L0正則化的值是模型參數中非零參數的個數。

L1正則化表示各個參數絕對值之和。

L2正則化標識各個參數的平方的和的開方值。

先討論幾個問題:

  1. 實現參數的稀疏有什么好處嗎?

一個好處是可以簡化模型,避免過擬合。因為一個模型中真正重要的參數可能並不多,如果考慮所有的參數起作用,那么可以對訓練數據可以預測的很好,但是對測試數據效果可能很差。另一個好處是參數變少可以使整個模型獲得更好的可解釋性。

  1. 參數越小值代表模型越簡單嗎?

是的。為什么參數越小,說明模型越簡單呢?這是因為越復雜的模型,越是會嘗試對所有的樣本進行擬合,甚至包括一些異常樣本點,這就容易造成在較小的區間里預測值產生較大的波動,這種較大的波動也反映了在這個區間里的導數很大,而只有較大的參數值才能產生較大的導數。因此復雜的模型,其參數值會比較大。

  1. L0正則化

根據上面的討論,稀疏的參數可以防止過擬合,因此用L0范數(非零參數的個數)來做正則化項是可以防止過擬合的。從直觀上看,利用非零參數的個數,可以很好的來選擇特征,實現特征稀疏的效果,具體操作時選擇參數非零的特征即可。但因為L0正則化很難求解,是個NP難問題,因此一般采用L1正則化。L1正則化是L0正則化的最優凸近似,比L0容易求解,並且也可以實現稀疏的效果。

  1. L1正則化

 

  1. L2正則化

 

  1.  
    1. 如何利用貝葉斯方法防止過擬合


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM