1. 程式人生 > >泛化能力、訓練集、測試集、K折交叉驗證、假設空間、欠擬合與過擬合、正則化(L1正則化、L2正則化)、超引數

泛化能力、訓練集、測試集、K折交叉驗證、假設空間、欠擬合與過擬合、正則化(L1正則化、L2正則化)、超引數

泛化能力(generalization):

機器學習模型。在先前未觀測到的輸入資料上表現良好的能力叫做泛化能力(generalization)。

訓練集(training set)與訓練錯誤(training error):

訓練機器學習模型使用的資料集稱為訓練集(training set),使用這些資料產生的誤差稱為訓練錯誤(training error)。

訓練集(training set)又可以分成兩部分:

一部分用來學習引數,稱為訓練資料集

一部分用於選擇超引數,稱為驗證資料集(validation set)

K折交叉驗證(K-fold Cross-Validation):

K折交叉驗證先將資料集分割成大小相同的K組資料集,然後先用2-K組資料集作為訓練資料集進行訓練,再用第1組資料集進行驗證;然後用第二組資料集作為驗證資料,剩下的作為訓練資料。直到遍歷完所有資料集,將K組驗證錯誤率取平均值,平均驗證錯誤率就當做泛化錯誤率。

K最常用的取值為10。

測試集(testing set)與測試錯誤(test error):

測試集(testing set)是未知的資料,我們使用機器學習模型用測試集來進行某種預測。

當然,預測不一定是準確的,在測試資料上的誤差稱為測試錯誤(test error)或泛化錯誤(generalization error)。

為什麼利用訓練集生成的模型可以用來預測測試集的資料?

原因是訓練集和測試集的資料擁有某種關聯性。

假設訓練集和測試集的資料都是由某個概率分佈生成,我們稱之為資料生成過程(data generating process)。

我們假設資料之間是相互獨立的(即資料獨立同分布假設),而資料都是由某個概率分佈函式生成,因此在訓練資料(已知)上表現很好的演算法,在測試資料(未知)上依然能夠表現得很好。

決定機器學習演算法效果是否好的因素:

使訓練錯誤率儘可能低;

使訓練錯誤率與測試錯誤率的差距儘可能小。

模型的容量(capacity,或稱能力):

模型的容量是指其擬合各種函式的能力,通俗來說就是說一個模型擁有多少種函式可以候選。容量低的模型可能很難擬合訓練集。容量高的模型可能會過擬合,因為記住了不適用於測試集的訓練集性質。

假設空間(hypothesis space):

假設空間通俗來說就是控制演算法可以使用的函式的數量。

如我們用線性迴歸去擬合數據,那麼線性迴歸包含的所有直線就是我們的假設空間。我們可以用一次函式去擬合數據,也可以用二次函式去擬合數據,顯然二次函式中也包含了一次函式(x2的係數為0時),因此使用二次函式去擬合函式時,假設空間就更加大了,擬合數據的能力就更強。

欠擬合(Underfitting)與過擬合(Overfitting):

上圖中左邊為欠擬合狀態,右邊為過擬合狀態,中間為很好地擬合的狀態。

當機器學習演算法在訓練資料上錯誤率較高時,我們就說這是欠擬合現象;

當機器學習演算法的測試錯誤率與訓練錯誤率差距較大時,我們就說這是過擬合現象。

簡單的函式更加容易泛化,而複雜的函式往往在訓練資料集上表現優異,但對於測試資料集效果很差。

如:

在圖的左端,訓練誤差和泛化誤差都非常高。這是欠擬合(underfitting)。當我們增加容量時,訓練誤差減小,但是訓練誤差和泛化誤差之間的間距卻不斷擴大。最終,這個間距的大小超過了訓練誤差的下降,我們進入到了過擬合(overfitting),其中容量過大,超過了最佳容量(optimal capacity)。

選擇模型的原則:

如果兩個假設空間都能很好地擬合數據,那麼我們就選擇“最簡單”的那個。

正則化(Regularization):

正則化(Regularization)是指我們想要降低泛化錯誤率但不降低訓練錯誤率而修改機器學習演算法的一系列方法。

通常我們是在損失函式loss中加入一項正則化項,也稱為加入一項引數懲罰。

L1正則化:

在原來的損失函式基礎上加上權重引數的絕對值:

Ein是未包含正則化項的訓練樣本誤差,λ 是正則化引數,可調。

用一張圖來說明如何在 L1 正則化下,對 Ein 進行最小化的優化:

Ein 優化演算法不變,L1 正則化限定了 w 的有效區域是一個正方形,且滿足 |w| < C。空間中的點 w 沿著 -∇Ein 的方向移動。但是,w 不能離開紅色正方形區域,最多隻能位於正方形邊緣位置。

L2正則化:

在原來的損失函式基礎上加上權重引數的平方和:

Ein是未包含正則化項的訓練樣本誤差,λ 是正則化引數,可調。

為什麼我們要加入這個正則化項?

正則化的目的是限制引數過多或者過大,避免模型過於複雜產生過擬合現象。但是,我們如果直接去將一些高階項的權重w調整為0的話,想要求得合適的解很難(很難直接求得需要多少階以上的項的w定為0),這種問題屬於NP-hard 問題,求解非常困難。

因此,我們尋找更寬鬆的限定條件:

上式是對 wj的平方和做數值上界限定,即所有w的平方和不超過引數 C。

這時候,我們的目標就轉換為:最小化訓練樣本誤差 Ein,但是要遵循 w 平方和小於 C 的條件。

用一張圖來說明如何在限定條件下,對 Ein 進行最小化的優化:

如圖,藍色橢圓區域是最小化 Ein 區域,紅色圓圈是 w 的限定條件區域。

在沒有限定條件的情況下,一般使用梯度下降演算法,在藍色橢圓區域內會一直沿著 w 梯度的反方向前進,直到找到全域性最優值 wlin。例如空間中有一點 w(圖中紫色點),此時 w 會沿著 -∇Ein 的方向移動,如圖中藍色箭頭所示。但是,由於存在限定條件,w 不能離開紅色圓形區域,最多隻能位於圓上邊緣位置,沿著切線方向。w 的方向如圖中紅色箭頭所示。

w 沿著圓的切線方向運動,如上圖綠色箭頭所示。運動方向與 w 的方向(紅色箭頭方向)垂直。運動過程中,根據向量知識,只要 -∇Ein 與執行方向有夾角,不垂直,則表明 -∇Ein 仍會在 w 切線方向上產生分量,那麼 w 就會繼續運動,尋找下一步最優解。

只有當 -∇Ein 與 w 的切線方向垂直時,-∇Ein在 w 的切線方向才沒有分量,這時候 w 才會停止更新,到達最接近 wlin 的位置,且同時滿足限定條件。

-∇Ein 與 w 的切線方向垂直,即 -∇Ein 與 w 的方向平行。如上圖所示,藍色箭頭和紅色箭頭互相平行。

根據平行關係可得:

我們也可以寫成

注意這時的拉姆塔和上一個式子相比實際上加了一個符號。

根據最優化演算法的思想:梯度為 0 的時候,函式取得最優值。

已知 ∇Ein 是 Ein 的梯度,觀察上式,λw可以看成是 1/2λw*w 的梯度:

這樣的話,我們就可以構造一個新的損失函式:

顯然右邊的第二項就是正則化項。

L1 與 L2 正則化的比較:

以二維情況討論,上圖左邊是 L2 正則化,右邊是 L1 正則化。從另一個方面來看,滿足正則化條件,實際上是求解藍色區域與黃色區域的交點,即同時滿足限定條件和 Ein 最小化。

對於 L2 來說,限定區域是圓,這樣,得到的解 w1 或 w2 為 0 的概率很小,很大概率是非零的。

對於 L1 來說,限定區域是正方形方形的凸點會更接近 Ein 最優解對應的 wlin 位置,而凸點處必有 w1 或 w2 為 0。因此,L1得到的解 w1 或 w2 為零的概率就很大了。所以,L1 正則化的解具有稀疏性

擴充套件到高維,同樣的道理,L2 的限定區域是平滑的,與中心點等距;而 L1 的限定區域是包含凸點的,尖銳的。這些凸點更接近 Ein 的最優解位置,而在這些凸點上,很多 wj 為 0。

正則化引數 λ:

正則化引數 λ起到了調節正則化項的作用。

如圖所示,以 L2 正則化為例,若 λ 很小,對應上文中的 C 值就很大。這時候,圓形區域很大,能夠讓 w 更接近 Ein 最優解的位置。若 λ 近似為 0,相當於圓形區域覆蓋了最優解位置,這時候,正則化失效,容易造成過擬合。相反,若 λ 很大,對應上文中的 C 值就很小。這時候,圓形區域很小,w 離 Ein 最優解的位置較遠。w 被限制在一個很小的區域內變化,w 普遍較小且接近 0,起到了正則化的效果。但是,λ 過大容易造成欠擬合。

超引數(Hyperparameters):

超引數可以設定來控制演算法行為。超引數的值不是通過學習演算法本身學習出來的。

比如,線上性迴歸中,引數w和b是依然模型訓練後自主更新的,而學習速率(learning rate)則是我們手動設定的。我們可以根據模型的training error來手動調整學習速率,但學習速率不能雖然模型的訓練自動更新。