正則化防止過擬合

2021-10-09 20:29:18 字數 2085 閱讀 5313

在之前的線性回歸就有提到正則化,下面就來更具體地介紹正則化。

1. 正則化的作用

當訓練資料比較少時,或模型訓練過度時,常常會導致過擬合。正則化主要作用就是通過減小模型的複雜度來防止過擬合,提高泛化能力。

為了更好的了解過擬合以及為後面做鋪墊,還是先看乙個吳恩達機器學習系列課程中乙個線性回歸來**房價的例子吧

size表示房子的大小,price表示**的房子**。

圖一用一次函式來擬合資料,很明顯效果不太好,事實上隨著size的增大,price應該趨於平緩,此時模型並沒有很好的擬合資料出現了欠擬合。

圖二用更為複雜的二次函式來擬合資料,得到了較好的效果。

圖三更為極端,採用了乙個四次多項式擬合資料,得到一條穿過每乙個樣本的扭曲曲線,但卻會大大的降低模型的泛化能力,即過擬合。

很明顯,若使用乙個較為高階的函式去擬合資料集可以獲得乙個幾乎能擬合全部樣本的假設函式,但可能會出現大量引數變數、模型更加的複雜問題,資料將不能完全的約束它,或者變相的說現在的資料量過少了,這樣的模型過擬合,面對新的資料時效果不好(泛化能力比較弱)。

2.過擬合解決辦法

1.減少選取的特徵變數,人工的確定哪些特徵更為重要,保留這些特徵。如:線性回歸中可以利用熱力圖來判斷。

2.增大樣本量(可以這麼說特徵變數和樣本量之間的數量關係類似於成反比的關係)

3.正則化處理。通過減小引數或稀疏化引數來降低模型的複雜度(一般我們認為引數越小、越少就越簡單,也就是奧卡姆剃刀法則),從而防止過擬合。

3. l2正則化(權重衰減)

為了把下面右邊的曲線變成左邊的曲線,我們想到可不可以簡化

θ3,θ4,將其變小,函式退化成二次函式。在lose函式後加上1000θ3

2,1000θ4

2,當最小化函式時,由於θ3和θ4係數較大,只能自身變得很小,從而達到我們的目的。

這又引出了乙個問題,有時我們並不知道哪些引數需要變小,所以我們就加上了乙個含有所有引數的懲罰項,去縮小所有引數,事實證明,這讓模型更加的簡單,曲線更加的平滑。

l2正則化就是在原來的代價函式後面加乙個正則項:

c0表示原來的代價函式,後面的一項表示每個引數的平方和除以樣本數n,λ是乙個大於0的超引數(過大容易欠擬合,過小容易過擬合),1/2是為了求導的方便。

【注意:正則化項一般不包括引數b】

通過對lose函式的求導可知正則化對引數b沒有影響,進行w的更新:

與不用正則化相比,更新時多了1−ηλ/n,那麼w減少的更多,權重衰減。當然,由於w進行多次的迭代更新,w最終可能增大,也可能減小。自此,通過l2正則化,我們得到更小的引數w,使得模型更簡單,大大的減少了過擬合的情況。

4. l1正則化

還有一種叫做l1正則化:

此時的正則項是所有引數w的絕對值除於樣本數,乘上λ,同樣進行求導:

比原始的更新規則多出了η * λ * sgn(w)/n這一項。當w為正時,更新後的w變小。當w為負時,更新後的w變大——因此它的效果就是讓w往0靠,使一些w盡可能為0,也就相當於稀疏化引數。稀疏化能夠自動的進行特徵選擇,去掉一些沒太大用處的特徵,將這些特徵權重設為0。

總結首次接觸到正則化時,只知道要在lose函式後面加乙個正則項,至於為什麼要這樣一直不是很清楚,我覺得在討論正則項前應該先引入引數的簡化及作用。

正則化能夠較好的處理過擬合問題,相比於減少選取的特徵變數,正則化保留了所有的特徵,有些特徵雖然作用小但仍有一定的用處;當然有時為了提公升效果兩種方法一起使用。

l1正則化是通過稀疏化引數來降低複雜度,l2正則化通過減小引數的大小來降低複雜度。

過擬合 欠擬合 正則化

產生原因 緩解方法 合適的資料分布 合理的模型複雜性 合理的組合應該是 複雜的資料分布 簡單的模型 或者 簡單的資料分布 複雜的模型 神經網路中的過擬合 原理 或者說思考 從貝葉斯的角度來說,代價函式可以表示為p y w,x 的形式,而正則項則是對引數w做了乙個先驗分布的假設,使得代價函式變成p y...

正則化方法 防止過擬合,提高泛化能力

在訓練資料不夠多時,或者overtraining時,常常會導致overfitting 過擬合 其直觀的表現如下圖所示,隨著訓練過程的進行,模型複雜度增加,在training data上的error漸漸減小,但是在驗證集上的error卻反而漸漸增大 因為訓練出來的網路過擬合了訓練集,對訓練集外的資料卻...

為什麼正則化可以防止過擬合?

為什麼正則化有利於預防過擬合呢?為什麼它可以減少方差問題?我們通過兩個例子來直觀體會一下。左圖是高偏差,右圖是高方差,中間是just right,這幾張圖我們在前面課程中看到過。直觀上理解就是如果正則化引數設定得足夠大,權重矩陣被設定為接近於0的值,直觀理解就是把多隱藏單元的權重設為0,於是基本上消...