標籤:

[視頻講解]史上最全面的正則化技術總結與分析--part1

摘要

正則化是一種有效的防止過擬合、提高模型泛化能力方法,在機器學習和深度學習演算法中應用非常廣泛,本文從機器學習正則化著手,首先闡述了正則化技術的一般作用和概念,然後針對L1和L2範數正則從4個方面深入理解,最後對常用的典型演算法應用進行了分析和總結,後續文章將分析深度學習中的正則化技術。注意:本文有對應的視頻講解,如果對文中哪裡不理解的可以觀看對應的視頻。

百度網盤地址:鏈接:pan.baidu.com/s/1bplk5e 密碼:myd3

一、正則化作用及其常見術語

正則化技術廣泛應用在機器學習和深度學習演算法中,其本質作用是防止過擬合、提高模型泛化能力。過擬合簡單理解就是訓練的演算法模型太過複雜了,過分考慮了當前樣本結構。其是防止過擬合的其中一種技術手段。在早期的機器學習領域一般只是將範數懲罰叫做正則化技術,而在深度學習領域認為:能夠顯著減少方差,而不過度增加偏差的策略都可以認為是正則化技術,故推廣的正則化技術還有:擴增樣本集、早停止、Dropout、集成學習、多任務學習、對抗訓練、參數共享等(具體見「花書」)。對於機器學習領域正則化技術可以從以下幾個不同角度進行理解:

(1) 正則化等價於結構風險最小化,其是通過在經驗風險項後加上表示模型複雜度的正則化項或懲罰項,達到選擇經驗風險和模型複雜度都較小的模型目的

經驗風險:機器學習中的風險是指模型與真實解之間的誤差的積累,經驗風險是指使用訓練出來的模型進行預測或者分類,存在多大的誤差,可以簡單理解為訓練誤差,經驗風險最小化即為訓練誤差最小。

結構風險:結構風險定義為經驗風險與置信風險(置信是指可信程度)的和,置信風險越大,模型推廣能力越差。可以簡單認為結構風險是經驗風險後面多加了一項表示模型複雜度的函數項,從而可以同時控制模型訓練誤差和測試誤差,結構風險最小化即為在保證模型分類精度(經驗風險)的同時,降低模型複雜度,提高泛化能力。

\Rleft( f 
ight) = frac{1}{n}sumlimits_{i = 1}^n {Lleft( {y_i ,fleft( {x_i } 
ight)} 
ight)} + lambda Omega left( f 
ight)

其中, [ Rleft( f 
ight) ] 表示結構風險, [ Lleft( {y_i ,fleft( {x_i } 
ight)} 
ight) ] 表示第i個樣本的經驗風險, [ Omega left( f 
ight) ] 是表徵模型複雜度的正則項, [ lambda ] 是正則化參數。根據奧卡姆剃刀定律,「如無必要,勿增實體」,即認為相對簡單的模型泛化能力更好。而模型泛化能力強、泛化誤差小,即表示模型推廣能力強,通俗理解就是在訓練集中訓練得到的優秀模型能夠很好的適用於實際測試數據,而不僅僅是減少訓練誤差或者測試誤差。泛化誤差定義如下:

 \E = Bias^2 left( X 
ight) + Varleft( X 
ight) + Noise

其中, [ E ] 表示泛化誤差, [ Bias ] 代表偏差, [ Var ] 代表方差, [ Noise ] 代表雜訊。

圖1 泛化誤差與偏差和方差的關係

從上圖可以看出,隨著訓練程度加深,模型複雜度會增加,偏差減少,方差增大,而泛化誤差呈現U型變化,對於一個「好的系統」通常要求誤差小,正則化的作用即為適當的控制模型複雜度,從而使得泛化誤差曲線取最小值。

(2) 正則化等價於帶約束的目標函數中的約束項

以平方誤差損失函數和L2範數為例,優化問題的數學模型如下:

[ \Jleft( 	heta 
ight) = sumlimits_{i = 1}^n {left( {y_i - 	heta ^T x_i } 
ight)^2 } ]

 \s.t.egin{array}{*{20}c} {} & {left| 	heta 
ight|} \ end{array}_2^2 le C

針對上述帶約束條件的優化問題,採用拉格朗日乘積運算元法可以轉化為無約束優化問題,即

 \Jleft( 	heta 
ight) = sumlimits_{i = 1}^n {left( {y_i - w^T x_i } 
ight)^2 } + lambda left( {left| 	heta 
ight|_2^2 - C} 
ight)

由於參數C為常數,可以忽略,故上述公式和標準的正則化公式完全一致。

(3) 從貝葉斯角度考慮,正則項等價於引入參數的模型先驗概率,可以簡單理解為對最大似然估計引入先驗概率,從而轉化為最大後驗估計,其中的先驗概率即對於正則項這部分內容後面詳細講解。

二、機器學習正則化技術基本概念

正則化也可以稱為規則化、權重衰減技術,不同的領域叫法不一樣,數學上常稱為範數,例如L1和L2範數,統計學領域叫做懲罰項、罰因子,以信號降噪為例:

 \x(i)^* = arg mathop {min }limits_{x(i)} { F(x(i)) = frac{1}{2}||y(i) - x(i)||_2^2 + lambda R(x(i))}

其中, [ x(i) ] 既可以是原始信號,也可以是小波或者傅立葉變換等的係數, [ R(x(i)) ] 是罰函數(範數罰), [ lambda ] 是正則項(懲罰項), [ y(i) ] 是感測器採集到的含噪信號, [ I = { 0,...,N - 1} ] , [ N ] 為信號點數, [ x(i)^* ] 為降噪後輸出,上述公式中的正則化技術作用和機器學習中的完全一樣。

下面給出範數的數學公式,方便後面分析:

(1) P範數:

\ Lp = (sumlimits_{i = 1}^n {left| {x_i } 
ight|^p } )^{{	extstyle{1 over p}}}

(2) L0範數:0範數表示向量中非零元素的個數(即為其稀疏度)

(3) L1範數:即向量元素絕對值之和, [ p ] 範數取1則為1範數

\ left| x 
ight|_1 = sumlimits_{i = 1}^n {left| {x_i } 
ight|}

(4) L2範數:即向量元素絕對值的平方和再開方,也稱為歐幾里得距離, [ p ] 範數取2則為2範數

 \left| x 
ight|_2 = sqrt {sumlimits_{i = 1}^n {left| {x_i } 
ight|^2 } }

(5) [ infty ] 範數: 即所有向量元素絕對值中的最大值, [ p ] 範數取 [ infty ] 則為 [ infty ] 範數

\ left| x 
ight|_infty = mathop {max }limits_i left| {x_i } 
ight|

(6) [ - infty ] 範數:即所有向量元素絕對值中的最小值, , [ p ] 範數取- [ infty ] 則為- [ infty ] 範數

\ left| x 
ight|_{ - infty } = mathop {min }limits_i left| {x_i } 
ight|

假設向量長度為2維,則有下列圖形:

圖2 向量長度為2情況下的範數圖形

假設向量長度為3維,則有下列圖形:

圖3 向量長度為3情況下的範數圖形

從上述各圖可以看出:q(p)越小,曲線越貼近坐標軸,q(p)越大,曲線越遠離坐標軸,並且稜角越明顯,當q(p)取0時候,是完全和坐標軸貼合,當q(p)取 [ infty ] 時候,呈現正方體形狀。同時也可以看出,採用不同的範數作為正則項,會得到完全不同的演算法模型結果,故而對於不同要求的模型,應該採用不同的範數作為正則項。

三、機器學習正則化技術的深度理解

為了更好的理解正則化技術原理,下面從4個方面進行深度分析,希望對大家理解有幫助。

3.1 簡單數值假設分析法

此處以L2範數講解,下面的各圖形來自吳恩達的機器學習課程。

圖4 不同參數下的曲線擬合結果

首先需要明確:左邊的曲線擬合是欠擬合,中間的曲線擬合是剛好合適,右邊的曲線擬合是過擬合。對於右邊的擬合曲線,有

\ h_	heta left( x 
ight) = 	heta _0 + 	heta _1 x_1 + 	heta _2 x_2^2 + 	heta _3 x_3^3 + 	heta _4 x_4^4

從上式可以看出,由於 [ 	heta _3 ] [ 	heta _4 ] 對應了高階,導致擬合曲線是4階曲線,出現了過擬合。正則化的目的為適當縮減 [ 	heta _3 ] [ 	heta _4 ] 的值,例如都為0.0001,則上述曲線本質上等價於

\ h_	heta left( x 
ight) = 	heta _0 + 	heta _1 x_1 + 	heta _2 x_2^2

也就是變成了中間的剛好合適的擬合曲線。對 [ 	heta _3 ] [ 	heta _4 ] 增加L2正則項後的代價函數表達式為:

\ Jleft( 	heta 
ight) = mathop {min }limits_	heta frac{1}{n}sumlimits_{i = 1}^n {left( {left( {h_	heta left( {x^i } 
ight) - y^i } 
ight)^2 + 1000	heta _3^2 + + 1000	heta _4^2 } 
ight)}

從上式可以看出, [ 	heta _3^2 ] [ 	heta _4^2 ] 均大於0,其乘上了1000,要是 [ Jleft( 	heta 
ight) ] 最小,則會迫使模型學習到的 [ 	heta _3 ] [ 	heta _4 ] 會非常小,因為只有在 [ 	heta _3 ] [ 	heta _4 ] 會非常小的情況下整個代價函數值才會取的較小指。在實際開發中,是對所有參數進行正則化,為了使代價函數儘可能的小,所有的參數 [ 	heta ] 的值(不包括 [ 	heta _0 ] )都會在一定程度上減小,但是減少程度會不一樣,從而實現了權重衰減、簡化模型複雜度的作用。

3.2 圖形分析法

此處採用L1和L2範數講解,

(1) L2範數正則

\ Jleft( eta 
ight) = sumlimits_{i = 1}^n {left( {y_i - eta ^T x_i } 
ight)^2 } + lambda left| eta 
ight|_2^2

圖5 L2範數與代價函數的尋優圖示

藍色的圓形空間表示L2範數空間,設為 [ eta _1^2 + eta _2^2 = r^2 ] ,可以看出,當r從0逐漸增大時候,該圓形也逐漸增大,紅色的線表示原始代價函數解空間即 [ sumlimits_{i = 1}^n {left( {y_i - eta ^T x_i } 
ight)^2 } ] ,此處為了方便繪圖,設參數只有2維。紅色圓環上的任何一點都表示一個可行解即代表一組 [ eta _1 ,eta _2 ] ,其中任何一個紅色圓環上面的 [ eta _1 ,eta _2 ] 對應的代價函數值一樣(可以簡單理解為等值線), [ hat eta ] 代表最佳解空間。

由於初中數學知識可知,當正則項 [ eta _1^2 + eta _2^2 = r^2 ] 和原代價函數項 [ sumlimits_{i = 1}^n {left( {y_i - eta ^T x_i } 
ight)^2 } ] 這兩個空間有交集時候,即代表了一個 [ Jleft( eta 
ight) ] 的解,當不存在正則項時候, [ lambda ] 為0, [ Jleft( eta 
ight) ] 的解即為 [ sumlimits_{i = 1}^n {left( {y_i - eta ^T x_i } 
ight)^2 } ] 的解,表示沒有解空間沒有受到任何約束,通過樣本集訓練,不容易直接收斂到最優值 [ hat eta ] ,出現過擬合,然而在增加了正則項後,隨著不斷增加r取值,原始解空間會被不斷壓縮,如果選擇的 [ lambda ] 合適,則可以將最優點壓縮到 [ hat eta ] 處,從而得到合適的模型。上面就是L2範數正則可以避免過擬合的圖示。

(2) L1範數正則

\ Jleft( eta 
ight) = sumlimits_{i = 1}^n {left( {y_i - eta ^T x_i } 
ight)^2 } + lambda sumlimits_{j = 1}^d {left| {eta _j } 
ight|}

圖6 L1範數與代價函數的尋優圖示

同上述L2分析一致,L1範數對應的解空間圖形為菱形,作用和L2一致。

需要注意:L2範數與原代價函數的交點處所得到的參數 [ eta ] 可以無限縮小,但是一定不會為0,然而L1範數與原代價函數的交點一般在坐標軸上,從而使得某些 [ eta _i ] =0,得到稀疏解(當然,並沒有絕對保證一定交於坐標軸,但是通過實驗發現,大部分都可以得到稀疏解)。同時觀察上一節的L0範數的解空間圖形發現:如果使用L0範數正則,則可以保證一定得到稀疏解,但是由於L0範數的實際求解是NP問題,難以計算,故在實際應用中一般都是採用L1範數代替L0範數得到稀疏解,可以簡單認為L1範數是L0範數的凸近似。

3.3 公式推導分析法

此處採用損失函數為誤差平方和、正則項為L1和L2範數的線性回歸為例講解。增加L2正則項後其代價函數為:

\ Jleft( 	heta 
ight) = frac{1}{{2m}}left[ {sumlimits_{i = 1}^m {left( {y^i - h_	heta left( {x^i } 
ight)} 
ight)^2 } + lambda sumlimits_{j = 1}^n {	heta _j^2 } } 
ight]

其中m為樣本個數,n為特徵個數, [ sumlimits_{i = 1}^m {left( {y_i - h_	heta left( {x^i } 
ight)} 
ight)^2 } ] 為原代價函數, [ sumlimits_{j = 1}^n {	heta _j^2 } ] 為L2範數。為了最小化代價函數,直接對各 [ 	heta _j ] 進行求導然後等於0即可求得估計值(具體推導請查閱其他文獻),可得:

\ 	heta _j : = 	heta _j left( {1 - alpha frac{lambda }{m}} 
ight) - alpha frac{1}{m}sumlimits_{i = 1}^m {left( {y^i - h_	heta left( {x^i } 
ight)} 
ight)} x_j^i

從上式可以看出: [ alpha ] 為步長, [ 0 < 1 - alpha frac{lambda }{m} < 1 ] 很明顯L2範數的作用就是對每一個 [ 	heta _j ] 進行了一定程度的縮減,但是一定不會縮減為0,從公式也可以看出L2範數的作用。

對於L1正則項後其代價函數為:

\ Jleft( 	heta 
ight) = frac{1}{{2m}}left[ {sumlimits_{i = 1}^m {left( {y^i - h_	heta left( {x^i } 
ight)} 
ight)^2 } + lambda sumlimits_{j = 1}^n {left| {	heta _j } 
ight|} } 
ight]

直接對各 [ 	heta _j ] 進行求導然後等於0即可求得估計值(具體推導請查閱其他文獻),可得:

\ 	heta _j : = 	heta _j - alpha frac{lambda }{m}{mathop{
m sgn}} (	heta _j ) - alpha frac{1}{m}sumlimits_{i = 1}^m {left( {y^i - h_	heta left( {x^i } 
ight)} 
ight)} x_j^i

\ {mathop{
m sgn}} (	heta _j ) = left{ {egin{array}{*{20}c} 1 & {	heta _j > 0} \ 0 & {	heta _j = 0} \ { - 1} & {	heta _j < 0} \ end{array}} 
ight.

從上式可以看出:當上一輪 [ 	heta _j ] 大於0時,下一次更新 [ 	heta _j ] 一定減少,當上一輪 [ 	heta _j ] 小於0時,下一次更新 [ 	heta _j ] 一定增加,也就是說每一輪訓練 [ 	heta _j ] 都是一定往0方向靠近,最終可得近似的稀疏解,同樣從公式也可以看出L1範數的作用。

同時從上述公式可以看出,在 [ left| {	heta _j } 
ight| < 1 ] 情況下,由於L2範數正則作用,每次 [ 	heta _j ] 都是減少 [ alpha frac{lambda }{m}	heta _j ] ,而L1範數正則作用下,每次 [ 	heta _j ] 都是減少 [ alpha frac{lambda }{m}{mathop{
m sgn}} (	heta _j ) ] ,很明顯參數優化速度L1快於L2。

推薦閱讀:

關注「可接受度」是人工智慧落地行業的關鍵
深度學習中雜訊標籤的影響和識別
CS231N 課程筆記合集

TAG:機器學習 |