回覆列表
-
1 # 機器之心Pro
-
2 # IT老友
回答分7部分,內容和個人新文章大體相同。
提示:涉及數學中的求導。
1. 正則化的目的?
透過降低複雜模型的複雜度來防止過擬合。
2. 什麼是過擬合?
過擬合:為了得到一致假設而使假設變得過度嚴格。
通俗的說,就是把訓練樣本的某些特性當成模型的共性。
3.為什麼降低模型的複雜度可以防止過擬合?
上圖最右邊就是模型過於複雜了,導致分割線過於遷就訓練樣本的特性。
顯然,分割線越平滑,模型越簡單,越不容易過擬合。
4.如何降低模型的複雜度?
機器學習是透過損失函式來修正權重,以便尋找最優權重。
現在,給損失函式加上約束條件,即不僅損失要最小,模型複雜度也最小。
L1和L2正則化就是根據約束條件不同而命名的。
5.什麼是L1正則化?
L1正則化,即原損失函式 + 所有權重的平均絕對值 * λ ,其中λ >0
根據損失更新ω,需要先對ω求導:
則權重ω的更新規則為:
比原始的更新規則多出了η * λ * sgn(ω)/n。
可見每次更新,ω都是往0靠,即使權重ω儘可能為0。
某權重為0,意味著對應的特徵和模型無關,即稀疏性。
決定模型的特徵越少,顯然模型越簡單。
6.什麼是正則化?
L2正則化,即原損失函式 + 所有權重平方和的平均值 * λ / 2 , λ>0
下圖C、C0含義和L1正則化相同
同樣,根據損失更新ω,需要先對ω求導:
λ / 2是為了這裡消去求導產生的2。
則權重ω的更新規則為:
原始的更新規則ω係數為1,現在為 1−ηλ/n 。
因為η、λ、n都>0,所以 1−ηλ/n<1 ,相當於每次移除權重的 x%。
7. L1和L2正則化對比
本質區別: 兩者衡量模型複雜度的函式不同。
L1 正則化可以理解為每次從權重中減去一個常數。
L2 正則化可以理解為每次移除權重的 x%。
本質都是為了降低模型的複雜度,防止過擬合。
訓練機器學習模型的要點之一是避免過擬合。如果發生過擬合,模型的精確度會下降。這是由於模型過度嘗試捕獲訓練資料集的噪聲。本文介紹了兩種常用的正則化方法,透過視覺化解釋幫助你理解正則化的作用和兩種方法的區別。
噪聲,是指那些不能代表資料真實特性的資料點,它們的生成是隨機的。學習和捕捉這些資料點讓你的模型複雜度增大,有過擬合的風險。
避免過擬合的方式之一是使用交叉驗證(cross validation),這有利於估計測試集中的錯誤,同時有利於確定對模型最有效的引數。本文將重點介紹一種方法,它有助於避免過擬合併提高模型的可解釋性。
正則化正則化是一種迴歸的形式,它將係數估計(coefficient estimate)朝零的方向進行約束、調整或縮小。也就是說,正則化可以在學習過程中降低模型複雜度和不穩定程度,從而避免過擬合的危險。
一個簡單的線性迴歸關係如下式。其中 Y 代表學習關係,β 代表對不同變數或預測因子 X 的係數估計。
Y ≈ β0 + β1X1 + β2X2 + …+ βpXp
擬合過程涉及損失函式,稱為殘差平方和(RSS)。係數選擇要使得它們能最小化損失函式。
這個式子可以根據你的訓練資料調整係數。但如果訓練資料中存在噪聲,則估計的係數就不能很好地泛化到未來資料中。這正是正則化要解決的問題,它能將學習後的引數估計朝零縮小調整。
嶺迴歸
上圖展示了嶺迴歸(Ridge Regression)。這一方法透過新增收縮量調整殘差平方和。現在,係數要朝最小化上述函式的方向進行調整和估計。其中,λ 是調整因子,它決定了我們要如何對模型的複雜度進行「懲罰」。模型複雜度是由係數的增大來表現的。我們如果想最小化上述函式,這些係數就應該變小。這也就是嶺迴歸避免係數過大的方法。同時,注意我們縮小了每個變數和響應之間的估計關聯,除了截距 β0 之外——這是因為,截距是當 xi1 = xi2 = …= xip = 0 時對平均值的度量。
當 λ=0 時,懲罰項沒有作用,嶺迴歸所產生的引數估計將與最小二乘法相同。但是當 λ→∞ 時,懲罰項的收縮作用就增大了,導致嶺迴歸下的係數估計會接近於零。可以看出,選擇一個恰當的 λ 值至關重要。為此,交叉驗證派上用場了。由這種方法產生的係數估計也被稱為 L2 範數(L2 norm)。
標準的最小二乘法產生的係數是隨尺度等變的(scale equivariant)。即,如果我們將每個輸入乘以 c,那麼相應的係數需要乘以因子 1/c。因此,無論預測因子如何縮放,預測因子和係數的乘積(X{β})保持不變。但是,嶺迴歸當中卻不是如此。因此,我們需要在使用嶺迴歸之前,對預測因子進行標準化,即將預測因子轉換到相同的尺度。用到的公式如下:
Lasso 迴歸
Lasso 是另一個變體,其中需要最小化上述函式。很明顯,這種變體只有在懲罰高係數時才有別於嶺迴歸。它使用 |β_j|(模數)代替 β 的平方作為懲罰項。在統計學中,這被稱為 L1 範數。
讓我們換個角度看看上述方法。嶺迴歸可以被認為是求解一個方程,其中係數的平方和小於等於 s。而 Lasso 可以看作係數的模數之和小於等於 s 的方程。其中,s 是一個隨收縮因子 λ 變化的常數。這些方程也被稱為約束函式。
假定在給定的問題中有 2 個引數。那麼根據上述公式,嶺迴歸的表示式為 β1² + β2² ≤ s。這意味著,在由 β1² + β2² ≤ s 給出的圓的所有點當中,嶺迴歸係數有著最小的 RSS(損失函式)。
同樣地,對 Lasso 而言,方程變為 |β1|+|β2|≤ s。這意味著在由 |β1|+|β2|≤ s 給出的菱形當中,Lasso 係數有著最小的 RSS(損失函式)。
下圖描述了這些方程。
上圖的綠色區域代表約束函式域:左側代表 Lasso,右側代表嶺迴歸。其中紅色橢圓是 RSS 的等值線,即橢圓上的點有著相同的 RSS 值。對於一個非常大的 s 值,綠色區域將會包含橢圓的中心,使得兩種迴歸方法的係數估計等於最小二乘估計。但是,上圖的結果並不是這樣。在上圖中,Lasso 和嶺迴歸係數估計是由橢圓和約束函式域的第一個交點給出的。因為嶺迴歸的約束函式域沒有尖角,所以這個交點一般不會產生在一個座標軸上,也就是說嶺迴歸的係數估計全都是非零的。然而,Lasso 約束函式域在每個軸上都有尖角,因此橢圓經常和約束函式域相交。發生這種情況時,其中一個係數就會等於 0。在高維度時(引數遠大於 2),許多係數估計值可能同時為 0。
這說明了嶺迴歸的一個明顯缺點:模型的可解釋性。它將把不重要的預測因子的係數縮小到趨近於 0,但永不達到 0。也就是說,最終的模型會包含所有的預測因子。但是,在 Lasso 中,如果將調整因子 λ 調整得足夠大,L1 範數懲罰可以迫使一些係數估計值完全等於 0。因此,Lasso 可以進行變數選擇,產生稀疏模型。
正則化有何效果?
標準的最小二乘模型常常產生方差。即對於與訓練集不同的資料集,模型可能不能很好地泛化。正則化能在不顯著增大偏差的的同時,顯著減小模型的方差。因此,正則化技術中使用的調整因子 λ,能控制對方差和偏差的影響。當 λ 的值開始上升時,它減小了係數的值,從而降低了方差。直到上升到某個值之前,λ 的增大很有利,因為它只是減少方差(避免過擬合),而不會丟失資料的任何重要特性。但是在某個特定值之後,模型就會失去重要的性質,導致偏差上升產生欠擬合。因此,要仔細選擇 λ 的值。
這就是你開始使用正則化之前所要掌握的全部基礎,正則化技術能夠幫助你提高迴歸模型的準確性。實現這些演算法的一個很流行的庫是 Scikit-Learn,它可以僅僅用 Python 中的幾行程式碼執行你的模型。