機器學習筆記——模型選擇與正則化

Mr.Shelby發表於2020-10-17

一、模型選擇

1.方差與偏差

  • 我們設定 h ( x ) h(x) h(x)為近似值, y ( x ) y(x) y(x)為真實值。我們有如下式子:
    在這裡插入圖片描述
  • 近似值的bias我們設定為所有樣本近似值與真實值之間差值的期望。近似值的var我們設定為所有樣本近似值與近似值的期望之間差距的期望的平方(有點繞…,其實去掉平方的標準差更好理解)。
  • 我們可以看到bias與近似值 h ( x ) h(x) h(x)、真實值 y ( x ) y(x) y(x)相關。而variance只與近似值 h ( x ) h(x) h(x)相關。

2.過擬合與欠擬合

  • 當特徵過多或者變數階數過高導致的模型很複雜時,很容易出現過擬合的情況。

  • 我對過擬合的理解如下:越複雜的模型其學習模仿能力越強,而模型學習模仿的物件只能是訓練集。但訓練集只是用來近似模擬真實資料分佈,並不能代表一般性,甚至不好的訓練集與真實分佈相差很遠。因此複雜的模型只是模仿訓練集很像,如果訓練集的代表性不強的話得到的模型就會與真實分佈相差甚遠,也就是出現了過擬合的現象。

  • 線性迴歸中出現的過擬合現象:
    在這裡插入圖片描述

  • 邏輯迴歸中出現的過擬合現象:
    在這裡插入圖片描述

  • 對上面三張圖進一步分析,其實一大群藍色圓圈中的紅叉很可能是資料收集有誤,並不一定代表反例,而過擬合情況就把這兩個異常點過於看重導致分類邊界不具備一般性。

  • 其實過擬合是不可以避免的,因為剛開始我們是不知道該選擇多複雜的模型的。針對小資料集我們一開始就故意過擬合,然後再去診斷修正。即便是很大的資料集一開始也是要從小資料集開始。過擬合代表著充分利用了訓練集資料,把訓練集資料中每一細枝末節都學習到了。

3.模型選擇的平衡

  • 過擬合現象發生時,我們會發現訓練誤差會非常小,那麼如果我們有多個模型得到了多組訓練誤差,訓練誤差的大小比較能作為我們模型選擇的依據嗎?
  • 顯然是不可以的。我們將訓練集隨機分成兩部分,訓練集training set)用於最優化引數,驗證集validation set)用於模型選擇。
  • 如下圖所示我們將初始訓練集分為了兩部分。藍色代表訓練集,綠色代表驗證集。需要注意的是劃分的時候訓練集與驗證集需要保證同分布,可以使用分層取樣的方法。
    在這裡插入圖片描述
  • 分析以下兩張圖,一張是4階多項式模型,一張是30階多項式模型。可以看出30階多項式模型更加完美的貼合於訓練集(藍色資料點),在圖的左半部分明顯波動離譜與驗證集之間存在較大誤差也就是發生了過擬合現象。
    在這裡插入圖片描述
    在這裡插入圖片描述
  • 以下展示的是訓練誤差與驗證誤差隨著多項式階數變化的曲線圖:
    在這裡插入圖片描述
  • 可以看出:只要學習率 η \eta η選擇的適當(即可以快速正確收斂)訓練誤差總會越來越小的。但驗證誤差可能會先降低後升高。上圖僅僅代表的是變化趨勢,實際獲得的圖不會這麼平滑簡單。
  • 訓練誤差小對我們來說沒有用處。而驗證誤差則可以代表一部分該模型適應新資料的能力,因此我們要選擇的是驗證誤差最小的模型。
  • 模型越複雜其bias越低但variance越高。而最終我們想要的泛化誤差由三部分組成:bias、variance、noise。在noise不可調控的情況下我們想要使得bias與variance的總和最小,因此需要尋得二者之間的平衡(trade-off)。

4.欠、過擬合解決方法

  • 針對欠擬合我們需要做的就是提高模型的複雜程度。具體包含兩個方面:1.增加更多的特徵維度,但這條對於一般問題來說增加資料比較難以實現。2.提高多項式的階數。
  • 針對過擬合併不是說模型一定不合適,而是相對於我們掌握貧乏的資料來說模型過於複雜。最好的解決方法就是收集並增加資料,不會影響bias,不用修改模型就可以解決問題,因為資料集越大訓練集的特徵就會越接近於真實。
  • 除此之外就是降低模型的複雜度。可以通過減少部分特徵或者正則化來實現。正則化在小幅度增加bias的前提下大幅度降低variance,也會降低總體的泛化誤差。
  • 總結來說機器學習資料為王。我們機器學習的目的其實就是利用有限的資料通過學習一定模型儘可能地去模擬逼近真實規律。所以我們掌握地資料大概率就是最大可能,因此更多使用正則化地方法處理過擬合。

二、正則化

1.正則化線性迴歸

  • 一個越複雜的模型通過學習過程計算出的引數 θ \theta θ可能會很大,尤其是高階的 θ \theta θ。引數過大會使 x x x對於 h θ ( x ) h_\theta(x) hθ(x)影響很大,因此我們要通過減小 θ \theta θ來平滑曲線。
    在這裡插入圖片描述
  • 如上圖所示,加入了正則化地線性迴歸,優化的目標函式由損失函式 L ( θ ) L(\theta) L(θ)變為了 J ( θ ) J(\theta) J(θ)
  • R ( θ ) R(\theta) R(θ)為對引數進行的運算,我們這裡接觸到的計算方法是二範數的平方: R ( θ ) = ∣ ∣ θ ∣ ∣ 2 2 R(\theta)={||\theta||}^2_2 R(θ)=θ22其實正則化項不只有這一種形式,還可為一範數: R ( θ ) = ∣ ∣ θ ∣ ∣ 1 R(\theta)={||\theta||}_1 R(θ)=θ1,這就是我們熟知的可用於特徵選擇的LASSO演算法。還可以為 R ( θ ) = λ 1 ∣ ∣ θ ∣ ∣ 2 2 + λ 2 ∣ ∣ θ ∣ ∣ 1 R(\theta)=\lambda_1{||\theta||}^2_2+\lambda_2||\theta||_1 R(θ)=λ1θ22+λ2θ1,這就是彈性網演算法。
  • 對於正則化引數 λ \lambda λ,取值範圍是 [ 0 , + ∞ ) [0,+\infty) [0,+)。該值越大,所有引數的值越小,模型越簡單,曲線越平滑。當 λ = + ∞ \lambda=+\infty λ=+時,會使所有的引數值趨向於0。
  • 需要注意的是仔細觀察 Σ \Sigma Σ求和從1開始,也就是說正則化的過程 θ 0 \theta_0 θ0並不參與。因為其對於 x x x沒有影響。
  • 具體到梯度下降過程中獲得下述式子。我們可以看作先把引數 θ j \theta_j θj衰減一定比例然後再進行梯度下降。這就是我們瞭解的權重衰減。機器學習包中有這個函式,傳入的引數就是正則化引數 λ \lambda λ
    在這裡插入圖片描述
  • 正則化引數 λ \lambda λ決定了引數值的大小與過擬合的矯正程度,那麼我們應該如何選擇正則化引數呢?分析如下影像可得(影像的縱座標要使用 L ( θ ) L(\theta) L(θ)計算而不是 J ( θ ) J(\theta) J(θ)): λ \lambda λ的值越大過擬合程度越低,欠擬合程度越高,也就是說訓練誤差會不斷增大。而驗證誤差在 λ ∗ \lambda^* λ處會出現拐點,我們想要找的便是這個拐點。
    在這裡插入圖片描述
  • 針對線性迴歸的另一種解法正規方程,我們也有正則化後的公式表達:
    在這裡插入圖片描述

2.正則化對數迴歸

在這裡插入圖片描述

  • 我們可以分析得到,對數迴歸的正則化原理上與線性迴歸相同,只不過他們擁有不同的損失函式而已。線性迴歸使用的是平方損失函式,而對數迴歸使用的是交叉熵損失函式。 J ( θ ) J(\theta) J(θ)的結構、梯度下降的方法都如出一轍。
  • 我們同樣可以得到如下的函式影像:
    在這裡插入圖片描述
  • 那麼問題來了,我們是否可以使用其他的 L v a l ( θ ) L_{val}(\theta) Lval(θ),也就是驗證集validation上的損失評價函式。當然是可以的,我們完全可以在這裡使用0-1損失等其他評估方式,因為在驗證集上只進行模型選擇評估,而當時我們選擇訓練集使用交叉熵損失的原因主要是方便梯度下降優化。

3.訓練集規模對誤差的影響

在這裡插入圖片描述

  • 一般情況下,當訓練集的規模增大的時候,訓練誤差也會跟著增大後趨於穩定,驗證誤差會隨之減小後趨於穩定。形象的理解是:學生做的題越多,做題時出現的錯題就會越多,但是考試時出現的錯題就會變少。因此合適的模型,增大訓練集的規模可以減小驗證誤差,解決過擬合。
    在這裡插入圖片描述
  • 但對於上圖來說,即使在訓練集資料很少的情況下,我們也能看出所選擇直線模型非常不適合該資料集的分佈,也就是出現了欠擬合的情況。即便增加訓練集的規模,也不會對模型的訓練產生好的影響。
  • 綜上出現過擬合現象時,增大訓練集規模可以收穫很好的效果。而當出現欠擬合現象時,增大訓練集規模並不會有好的收益。

4.模型效能評估

  • 對於我們掌握的帶標註的資料,訓練集我們用來優化引數,驗證集我們用來選擇模型,但在訓練集與驗證集上的誤差都不可以代表在新的測試資料上的效能。
  • 因此我們將帶標註的資料分為三類,除了已知的訓練集與驗證集以外,我們再單獨分出一類測試集(Testing Set),不用於學習調參只用於模擬訓練出的模型處理新資料的能力。
  • 但這三部分的劃分一直都是個難題。不同劃分比例,涉及到模型訓練的好壞、模型選擇的優劣、以及測試集能否很好代表處理新資料能力等等問題。我們常見的分類標準為6:2:2或者7:1.5:1.5。我們的原則是在驗證集與訓練集保證基本功能的基礎上,儘可能擴大訓練集。
  • 有一條原則就是訓練集一定不可以參與到模型調參中。但驗證集可以偶爾參與。存在一種方法:訓練集訓練出多個模型,驗證集篩選出一個最優的模型,然後針對該模型用訓練集+驗證集再次引數優化。
  • 除此之外我們還可以使用交叉驗證的方法。
    在這裡插入圖片描述

三.範數與正則化

1.總體描述

  • 正則化不僅可以解決過擬合的問題,還可以約束我們的模型的特性。這樣就可以將人對這個模型的先驗知識融入到模型的學習當中,強行地讓學習到的模型具有人想要的特性,例如稀疏、低秩、平滑等等。
  • 正則化後的目標函式中,損失函式的選擇決定了這是一種什麼模型。如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression了。
  • 規則化項可以是模型引數向量的範數,在論文中常見的都聚集在:零範數、一範數、二範數、跡範數、Frobenius範數和核範數等等。

2.L0與L1範數

  • L0範數是指向量中非0的元素的個數。如果我們用L0範數來正則化一個引數矩陣W的話,就是希望W的大部分元素都是0,換句話說,讓引數W是稀疏的。
  • L1範數是指向量中各個元素絕對值之和。L1範數又名“稀疏規則運算元”,同樣可以使得引數W變稀疏。
  • 既然L0範數與L1範數都可以讓引數變稀疏。那麼到底什麼是變稀疏?變稀疏又有什麼樣的好處呢?
  • 引數的稀疏化可以實現特徵選擇。一般來說,xi的大部分特徵都是和最終的輸出yi沒有關係或者不提供任何資訊的,在最小化目標函式的時候考慮xi這些額外的特徵,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的資訊反而會被考慮,從而干擾了對正確yi的預測。也就是說因為多考慮訓練了無用的特徵導致訓練模型過擬合。
  • 稀疏正則化化運算元的引入就是為了完成特徵自動選擇的光榮使命,它會學習地去掉這些沒有資訊的特徵,也就是把這些特徵對應的權重置為0。
  • 那既然L0與L1均可以實現引數稀疏化而特徵選擇,那為什麼在實際正則化時我們使用L1而不是L0呢?一是因為L0範數很難優化求解(NP難問題),二是L1範數是L0範數的最優凸近似,而且它比L0範數要容易優化求解

3.L2範數

  • L2範數是指向量各元素的平方和然後求平方根。在迴歸裡面,有人把有它的迴歸叫嶺迴歸(Ridge Regression),有人也叫它權值衰減(weight decay)。
  • L2範數的使用具體有兩大好處:在學習理論角度來說,L2範數可以防止過擬合,提升模型的泛化能力。在數值計算角度來說,L2範數有助於處理 condition number不好的情況下矩陣求逆很困難的問題。
  • 在不加L2範數正則項時,我們可以通過正規方程發求得參數列達式如下。如果當我們的樣本X的數目比每個樣本的維度還要小的時候,矩陣XTX將會不是滿秩的,也就是XTX會變得不可逆,所以w*就沒辦法直接計算出來了。
    在這裡插入圖片描述
  • 但如果加上L2正則項,就變成了下面這種情況,就可以直接求逆了。
    在這裡插入圖片描述

4.核範數

  • 核範數||W||*是指矩陣奇異值的和,*核範數是用來約束Low-Rank(低秩)。rank(w)的凸近似就是核範數||W||**。那麼什麼是低秩呢?
  • 從物理意義上講,矩陣的秩度量的就是矩陣的行列之間的相關性。如果矩陣的各行或列是線性無關的,矩陣就是滿秩的,也就是秩等於行數。如果矩陣表達的是結構性資訊,例如影像、使用者-推薦表等等,那麼這個矩陣各行之間存在這一定的相關性,那這個矩陣一般就是低秩的。
  • 如果X是一個m行n列的數值矩陣,rank(X)是X的秩,假如rank (X)遠小於m和n,則我們稱X是低秩矩陣。低秩矩陣每行或每列都可以用其他的行或列線性表出,可見它包含大量的冗餘資訊。利用這種冗餘資訊,可以對缺失資料進行恢復,也可以對資料進行特徵提取。

相關文章