1. 程式人生 > >容量、欠擬合、過擬合和正則化

容量、欠擬合、過擬合和正則化

適合 期望 ner 一定的 數據集 需要 影響 會計 所有

1、訓練誤差和泛化誤差

機器學習的主要挑戰是我們的模型要在未觀測數據上表現良好,而不僅僅是在訓練數據上表現良好。在未觀測數據上表現良好稱為泛化(generalization)。
通常情況下,我們在訓練數據上訓練模型時會計算一些被稱為訓練誤差(training error)的誤差度量,目標是降低訓練誤差。由於模型要投入到實際使用,所以我們希望泛化誤差(generalization,或者被稱為測試誤差)也盡可能的小。泛化誤差被定義為新輸入的誤差期望。
如果訓練數據和測試數據是同分布的,我們將這個共享的潛在分布稱為數據生成分布,並且數據集中的樣本是相互獨立的話,那麽我們就可以在數學上研究訓練誤差和測試誤差之間的關系。

我們能觀察到訓練誤差和測試誤差之間的直接聯系是,隨機模型訓練誤差的期望和該模型測試誤差的期望是一樣的。假設我們有概率分布 \(p(x,y)\),從中重復采樣生成訓練集和測試集。對於某個固定的 \(ω\),訓練集誤差的期望恰好和測試集誤差的期望一樣,這是因為這兩個期望的計算都使用了相同的數據集生成過程。這兩種情況的唯一區別是數據集的名字不同。
當然,當我們使用機器學習算法時,我們不會提前固定參數,然後采樣得到兩個數據集。我們采樣得到訓練集,然後挑選參數去降低訓練集誤差,然後采樣得到測試集。在這個過程中,測試誤差期望會大於或等於訓練誤差期望。我們可以從以下兩個方面優化機器學習算法的效果:

  1. 降低訓練誤差
  2. 縮小訓練誤差和泛化誤差的差距

這兩個方面對應著機器學習的兩個主要挑戰:欠擬合(underfitting)和過擬合(overfitting)。

2、欠擬合、過擬合和容量

欠擬合是指模型不能在訓練集上獲得足夠小的誤差(訓練誤差太大),過擬合是指訓練誤差和泛化誤差的差距太大。舉個例子,假如我們從二次函數中隨機取一些點,然後使用線性函數,二次函數和9階多項式去擬合這些點,如下圖:
技術分享圖片

我們可以看到線性函數會導致欠擬合,9階函數會導致過擬合(9階函數雖然完全擬合了這些點,但它只適用於我們取的這些點,如果在同一個二次函數上取一個新點,那麽訓練誤差和泛化誤差之間的差距會非常大),2次函數在欠擬合和過擬合之間達到了平衡。

通過控制模型的容量(capacity),我們可以控制模型是否偏向於欠擬合或者過擬合。所謂模型的容量是指其擬合各種函數的能力(可以表示多少種曲線)。容量低的模型可能很難擬合訓練集,比如上例中的用線性函數去擬合二次函數。容量高的模型可能會導致過擬合,因為記住了不適用於訓練集和測試集的特征(訓練使用的特征太多)。
我們可以通過選擇假設空間(hypothesis space)來控制模型的容量。所謂假設空間,就是學習算法可以選擇為解決方案的函數集。例如,線性回歸將所有關於其輸入的線性函數作為假設空間。廣義線性回歸的假設空間除了線性函數外,還包括多項式函數,這就增加了模型的容量。模型的容量規定了機器學習算法可以從假設空間選擇哪些函數族來擬合數據,這被稱為模型的表示容量(representational capacity)。而事實上,學習算法一般情況下並不能找到最優的函數,而是找到一個可以大大降低訓練誤差的函數,這意味著學習算法的有效容量(e?ective capacity)可能小於表示容量。
當機器學習算法的容量符合任務的復雜度和訓練數據的數據量時,算法一般會達到最佳效果,容量不足不能夠解決復雜任務(欠擬合),容量高能夠解決復雜任務,但容量過高時,就會發生過擬合,就像上面的例子一樣。
模型容量與訓練誤差和泛化誤差有一定的關系。通常,當模型容量上升時,訓練誤差會降低,直至降低至最小可能誤差(最小誤差存在的話),而泛化誤差是關於模型容量的一個U型函數,如下圖
技術分享圖片

有一點需要註意,我們並不要求訓練出的模型在所有的輸入數據上表現良好,而只需要在滿足特定分布的數據上表現良好就行,這被稱為機器學習的沒有免費午餐定理

3、正則化

到現在為止,我們通過改變學習算法可選的函數來改變模型的容量進而改變機器學習算法。比如在線性回歸中,我們可以增加或減少多項式的次數來改變模型的容量。但算法的效果不僅受影響於假設空間的函數數量,也取決於這些函數的具體形式。在線性函數中,對於輸入和輸出確實接近線性的問題,使用線性函數是很合理的,但如果輸入和輸出實際滿足非線性函數\(y=sin(x)\),那麽我們用線性函數x取擬合sin(x)的效果不會好。因此我們可以使用兩種方法來控制算法的性能:

  1. 可以使用的函數種類
  2. 函數數量

例如,我們可以加入權重衰減(weight decay)來修改線性回歸的訓練標準。帶權重衰減的線性回歸最小化均方誤差和正則項的和\(J(ω)\),其偏好於平方\(L^2\)範數較小的權重。具體如下:
技術分享圖片

其中\(λ\)是提前挑選好的值,用來表示我們偏好範數較小權重的程度。當\(λ=0\)時,我們沒有任何偏好。越大的\(λ\)偏好範數越小的權重。最小化 \(J(ω)\) 可以看作是擬合訓練數據和偏好小權重範數之間的權衡。這會使得解決方案的斜率較小,或是將權重放在較少的特征上。我們可以訓練具有不同 \(λ\) 值的高次多項式回歸模型,來舉例說明如何通過權重衰減控制模型欠擬合或過擬合的趨勢。
技術分享圖片

圖5.2就是第2節的第一個圖。
更一般地,正則化一個學習函數\(f(x;θ)\),我們可以給代價函數添加被稱為正則化項(regularizer)的懲罰。在上面的權重衰減例子中,正則化項\(Ω(ω)=ω^Tω\)
在我們權重衰減的示例中,通過在最小化的目標中額外增加一項,我們明確地表示了偏好權重較小的線性函數。有很多其他方法隱式或顯式地表示對不同解的偏好。總而言之,這些不同的方法都被稱為正則化(regularization)。正則化是指我們修改學習算法,使其降低泛化誤差而非訓練誤差
沒有免費午餐定理已經清楚地闡述了沒有最優的學習算法,特別地,沒有最優的正則化形式。反之,我們必須挑選一個非常適合於我們所要解決的任務的正則形式。

容量、欠擬合、過擬合和正則化