機器學習中的正則化

2021-09-29 09:04:23 字數 3474 閱讀 5719

簡單來說,正則化是一種為了減小測試誤差的行為(有時候會增加訓練誤差)。我們在構造機器學習模型時,最終目的是讓模型在面對新資料的時候,可以有很好的表現。當你用比較複雜的模型比如神經網路,去擬合資料時,很容易出現過擬合現象(訓練集表現很好,測試集表現較差),這會導致模型的泛化能力下降,這時候,我們就需要使用正則化,降低模型的複雜度。

假設 x

xx 是乙個向量,則向量的p範數定義為:

∥ x∥

p=(∑

i∣xi

∣p)1

p\|x\|_=\left(\sum_\left|x_\right|^\right)^}

∥x∥p​=

(i∑​

∣xi​

∣p)p

1​在目標函式後面新增乙個係數的「懲罰項」是正則化的常用方式,為了防止係數過大從而讓模型變得複雜。在加了正則化項之後的目標函式為:jˉ(

w,b)

=j(w

,b)+

λ2mω

(w

)\bar(w, b)=j(w, b)+\frac \omega(w)

jˉ(w,b

)=j(

w,b)

+2mλ

​ω(w

)式中, λ2m

\frac

2mλ​

是乙個常數, m

mm 為樣本個數, λ

\lambda

λ 是乙個超引數,用於控制正則化程度。

l1 正則化時,對應懲罰項為 l1 範數 :ω(w

)=∥w

∥1=∑

i∣wi

∣\omega(w)=\|w\|_=\sum_\left|w_\right|

ω(w)=∥

w∥1​

=i∑​

∣wi​

∣l2 正則化時,對應懲罰項為 l2 範數:ω(w

)=∥w

∥22=

∑iwi

2\omega(w)=\|w\|_^=\sum_ w_^

ω(w)=∥

w∥22

​=i∑

​wi2

​從上式可以看出, l1 正則化通過讓原目標函式加上了所有特徵係數絕對值的和來實現正則化,而l2正則化通過讓原目標函式加上了所有特徵係數的平方和來實現正則化。

兩者都是通過加上乙個和項來限制引數大小,卻有不同的效果:l1 正則化更適用於特徵選擇,而l2正則化更適用於防止模型過擬合

讓我們從梯度下降的角度入手,**兩者的區別。

為了方便敘述,假設資料只有兩個特徵即 w1,

w2

w_, w_

w1​,w2

​ ,考慮l1 正則化的目標函式:jˉ=

j+λ2

m(∣w

1∣+∣

w2∣)

\bar=j+\frac\left(\left|w_\right|+\left|w_\right|\right)

jˉ=j+2

mλ​(

∣w1​

∣+∣w

2​∣)

在每次更新w1w_

w1​ 時:w1:

=w1−

αdw1

=w1−

αλ2m

sign⁡(

w1)−

∂j∂w

1\begin:=w_-\alpha d w_} \\ -\frac \operatorname\left(w_\right)-\frac}}\end

w1​:=w

1​−α

dw1​

=w1​

−2mα

λ​si

gn(w

1​)−

∂w1​

∂j​​

若w 1w_

w1​為正數,則每次更新會減去乙個常數;若為負數,則每次更新會加上乙個常數,所以很容易產生特徵的係數為 0 的情況,特徵係數為 0 表示該特徵不會對結果有任何影響,因此l1正則化會讓特徵變得稀疏,起到特徵選擇的作用

現考慮l2 正則化的目標函式:jˉ=

j+λ2

m(w1

2+w2

2)

\bar=j+\frac\left(w_^+w_^\right)

jˉ=j+2

mλ​(

w12​

+w22

​)在每次更新w1w_

w1​時:

w 1:

=w1−

αdw1

=(1−

αλm)

w1−∂

j∂w1

\begin:=w_-\alpha d w_} \\ \right) w_-\frac}}\end

w1​:=w

1​−α

dw1​

=(1−

mαλ​

)w1​

−∂w1

​∂j​

​從上式可以看出每次更新時,會對特徵係數進行乙個比例的縮放而不是像l1正則化減去乙個固定值,這會讓係數趨向變小而不會變為 0,因此l2 正則化會讓模型變得更簡單,防止過擬合,而不會起到特徵選擇的作用。

以上就是l1、l2 正則化的作用以及區別。

更大數量的訓練集是提公升機器學習模型泛化能力最好的方法。做乙個不可能的假設,如果你的訓練集包含了所有的你需要測試的資料,那麼該模型的泛化能力將是100%(開個玩笑)。在實際專案中,獲取訓練資料的成本會很高,這時候就需要我們自己來「創造」資料。希望在以後,gan可以成功的應用到訓練集增強領域。

dropout 是一種計算方便但功能強大的正則化方法,適用於最近很火的神經網路。基本步驟是在每一次的迭代中,隨機刪除一部分節點,只訓練剩下的節點。每次迭代都會隨機刪除,每次迭代刪除的節點也都不一樣,相當於每次迭代訓練的都是不一樣的網路,通過這樣的方式降低節點之間的關聯性以及模型的複雜度,從而達到正則化的效果。這點上有點類似 bagging,但是遠比 bagging 來的簡單。

說dropout簡單是因為你只需要設定乙個超引數 keep_prob,這個引數的意義是每層節點隨機保留的比例,比如將 keep_prob 設定為 0.7,那麼就會隨機30%的節點消失,消失這個動作其實很簡單,只是將這一層的引數矩陣與根據 keep_prob 生成的 矩陣做 逐點乘積,當然前向傳播與反向傳播都需要做以上的操作。

dropout的缺點在於,需要將訓練集分為不同子集輸入每一次的迭代,這就需要較大的訓練集,所以在訓練集較小的情況下,dropout的效果可能並不好。我們上面也說過,增大資料集是最好的正則化方式,所以在增大資料集的情況下,使用 dropout 需要使用的計算代價可能會比他帶來正則化效果更高,這需要我們在實際使用場景中做取捨。

提前終止可能是最簡單的正則化方式,他適用於模型的表達能力很強的時候。這種情況下,一般訓練誤差會隨著訓練次數的增多逐漸下降,而測試誤差則會先下降而後再次上公升。我們需要做的就是在測試誤差最低的點停止訓練即可。

機器學習中的正則化

正則化 regularization 是機器學習中進行模型選擇的典型方法。正則化是模型損失函式結構風險最小化策略的實現,是在經驗風險上加乙個正則化項 regularized item 或罰項 penalty term 正則化項一般是模型複雜度的單調遞增函式,模型越複雜,正則化值就越大。比如,正則化項...

機器學習正則化

設p 1的實 數,p norm 定義為 x i 1 n xi p 1 p 1.1 這裡寫描述 如果方陣a是非奇異的,那麼a的conditio nnumber定義為 a a a 1 condition number是乙個矩陣穩定性或者敏感度的度量。矩陣的condition number在1附近,那麼它...

機器學習 正則化

為了增加模型的泛化能力,避免模型出現過擬合的現象,我們經常會加入正則化處理 當模型偏差較低,但是方差很大,尤其在輸入的維數較高時,很容易出現過擬合現象,當加入正則項,模型損失了一部分偏差,卻大大降低了模型的方差 l1和l2正則是我們經常用到的方法。l1正則 這種方法的結果會讓引數向量中許多元素趨於0...