過擬合與欠擬合
目錄
一、 過擬合(overfitting)與欠擬合(underfitting) 2
❸限制權值Weight-decay,也叫正則化(regularization) 6
-
過擬合(overfitting)與欠擬合(underfitting)
首先要確定的兩個概念是Underfit(欠擬合)和Overfit(過擬合),也被稱為high bias和high viarance。在表征線性回歸模型的下面三張圖中,左圖使用一條直線來做預測模型,很明顯無論如何調整起始點和斜率,該直線都不可能很好的擬合給定的五個訓練樣本,更不要說給出的新數據;右圖使用了高階的多項式,過於完美的擬合了訓練樣本,當給出新數據時,很可能會產生較大誤差;而中間的模型則剛剛好,既較完美的擬合訓練數據,又不過於復雜,基本上描繪清晰了在預測房屋價格時Size和Prize的關系。
對於邏輯回歸,同樣存在此問題,如下圖:
機器學習中的泛化:
在機器學習中,我們描述從訓練數據學習目標函數的學習過程成為歸納性的學習。
泛化是指,機器學習模型學到的概念在遇到新的數據時表現的好壞(預測准確度等)。
擬合:擬合是指你逼近目標函數的遠近程度。
-
過擬合
模型過度擬合,在訓練集(training set)上表現好,但是在測試集上效果差,也就是說在已知的數據集合中非常好,但是在添加一些新的數據進來訓練效果就會差很多,造成這樣的原因是考慮影響因素太多,超出自變量的維度過於多了。
-
欠擬合(高偏差)
模型擬合不夠,在訓練集(training set)上表現效果差,沒有充分的利用數據,預測的准確度低。
-
偏差(Bias)
首先error=bias+variance
Bias反映的是模型在樣本上的輸出與真實值之間的誤差,即模型本身的精確度。
-
方差(Variance)
Variance反映的是模型每一次輸出結果與模型輸出期望之間的誤差,即模型的穩定性。
如上圖所示:偏差值的是模型的輸出值與紅色中心的距離;而方差指的是模型的每一個輸出結果與期望之間的距離。
就像我們射箭,低偏差指的是我們瞄准的點與紅色中心的距離很近,而高偏差指的是我們瞄准的點與紅色中心的距離很遠。低方差是指當我們瞄准一個點后,射出的箭中靶子的位置與我們瞄准的點的位置距離比較近;高方差是指當我們瞄准一個點后,射出的箭中靶子的位置與我們瞄准的點的位置距離比較遠。
❶低偏差低方差時,是我們所追求的效果,此時預測值正中靶心(最接近真實值),且比較集中(方差小)。
❷低偏差高方差時,預測值基本落在真實值周圍,但很分散,此時方差較大,說明模型的穩定性不夠好。
❸高偏差低方差時,預測值與真實值有較大距離,但此時值很集中,方差小;模型的穩定性較好,但預測准確率不高,處於"一如既往地預測不准"的狀態。
❹高偏差高方差時,是我們最不想看到的結果,此時模型不僅預測不准確,而且還不穩定,每次預測的值都差別比較大。
過擬合表現為:在訓練集上表現很好,但是在測試集上效果很差。
欠擬合表現為:在訓練集上表現就不太好。
-
防止過擬合和欠擬合的方法
-
如何防止過擬合
綜述:一般來說防止過擬合的方法有:
❶獲取更多數據❷減少特征變量❸限制權值(正則化)❹貝葉斯方法❺結合多種模型
以深度學習中的神經網絡為例,防止過擬合的方法如下:
❶獲取更多數據
這是解決過擬合最有效的方法,只要給足夠多的數據,讓模型[訓練到]盡可能多的[例外情況],它就會不斷修正自己,從而得到更好的結果。
如何獲取更多的數據,可以有以下幾個方法:
①從數據源頭獲取更多數據:這個是最容易想到的,例如物體分類,我就再多拍幾張照片就好了;但是在很多情況下,大幅增加數據本身就不容易;另外,我們不清楚獲取多少數據才算夠用能使模型表現較好。
②根據當前數據集估計數據分布參數,使用該分布產生更多數據:這個一般不用,因為估計分布參數的過程也會帶入抽樣誤差。
③數據增強(Data Augmentation):通過一定規則擴充數據。如在物體分類問題里,物體在圖像中的位置、姿態、尺度,整體圖片明暗度等都不會影響分類結果。我們就可以通過圖像平移、翻轉、縮放、切割等手段將數據庫成倍擴充。
❷使用合適的模型(減少特征變量)
前面說了,過擬合主要使有兩個原因造成的:數據太少+模型太復雜。所以我們可以通過使用合適復雜度的模型來防止過擬合問題,讓其足夠擬合真正的規則,同時又不至於擬合太多抽樣誤差。
①減少網絡的層數、神經元的個數等均可以限制網絡的擬合能力;
②Early stopping早停止
對於每個神經元而言,其激活函數在不同區間的性能使不同的:
當網絡權值較小時,神經元的激活函數工作在線性區,此時神經元的擬合能力較弱(類似線性神經網絡)。
有了上述共識之后,我們就剋解釋為什么限制訓練時間(early stopping)有用:因為我們在初始化網絡的時候一般都是初始化為較小的權值。訓練時間越長,部分網絡權值可能越大,如果我們在合適的時間停止訓練,就可以將網絡的能力限制在一定范圍內。
❸限制權值Weight-decay,也叫正則化(regularization)
下面第三部分會詳細介紹L0,L1,L2正則化即L0,L1,L2范數。
❹貝葉斯方法
下面第四部分詳細介紹如何利用貝葉斯方法防止過擬合。
❺結合多種模型
簡而言之,訓練多個模型,以每個模型的平均輸出作為結果。
①Bagging
簡單理解,就是分段函數的概念:用不同的模型擬合不同部分的訓練集。以隨機森林(Rand Forests)為例,就是訓練了一堆不關聯的決策樹。但由於訓練神經網絡本身需要耗費較多自由,所以一般不單獨使用神經網絡做Bagging。
②Boosting
既然訓練復雜神經網絡比較慢,那我們就可以只使用簡單的神經網絡(層數、神經元數限制等),通過訓練一系列簡單的神經網絡,加權平均其輸出。
③Dropout
這是一個很高效的方法
在訓練時,每次隨機(如50%概率)忽略隱藏層的某些節點;這樣我們相當於隨機從2^H個模型中采樣選擇模型.
-
如何防止欠擬合
❶引入新的特征❷添加多項式特征❸減少正則化參數❹
-
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的最優問題會被放寬到L1或L2下的最優化。 |
③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一樣,在通常情況下,大家都用的是:
來表示。
-
正則化
L0正則化的值是模型參數中非零參數的個數。
L1正則化表示各個參數絕對值之和。
L2正則化標識各個參數的平方的和的開方值。
先討論幾個問題:
-
實現參數的稀疏有什么好處嗎?
一個好處是可以簡化模型,避免過擬合。因為一個模型中真正重要的參數可能並不多,如果考慮所有的參數起作用,那么可以對訓練數據可以預測的很好,但是對測試數據效果可能很差。另一個好處是參數變少可以使整個模型獲得更好的可解釋性。
-
參數越小值代表模型越簡單嗎?
是的。為什么參數越小,說明模型越簡單呢?這是因為越復雜的模型,越是會嘗試對所有的樣本進行擬合,甚至包括一些異常樣本點,這就容易造成在較小的區間里預測值產生較大的波動,這種較大的波動也反映了在這個區間里的導數很大,而只有較大的參數值才能產生較大的導數。因此復雜的模型,其參數值會比較大。
-
L0正則化
根據上面的討論,稀疏的參數可以防止過擬合,因此用L0范數(非零參數的個數)來做正則化項是可以防止過擬合的。從直觀上看,利用非零參數的個數,可以很好的來選擇特征,實現特征稀疏的效果,具體操作時選擇參數非零的特征即可。但因為L0正則化很難求解,是個NP難問題,因此一般采用L1正則化。L1正則化是L0正則化的最優凸近似,比L0容易求解,並且也可以實現稀疏的效果。
-
L1正則化
-
L2正則化
-
-
如何利用貝葉斯方法防止過擬合
-