正則化到底是怎麼消除過擬合的?這次終於有人講明白了

正則化到底是怎麼消除過擬合的?這次終於有人講明白了

1、過擬合怎麼產生的?

模型訓練之初,你壓根不知道哪些特徵會有用,於是你找了很多特徵,以此來儘可能精確地去擬合訓練數據。

這樣的結果往往就是,你用上了一些其實不重要的特徵,雖然加上這些特徵,會在訓練集中表現很好,甚至拿到滿分,但是我們的目標並不是讓模型在訓練集上取得滿分,而是在正兒八經的測試集,這種大考中,取得優秀的表現。

十有八九,我們第一次訓練出來的模型,會出現過擬合,也就是說,在測試集表現的沒有在訓練集上好,甚至差不少。

這是為什麼?

分析發現,我們在模型中使用的某些特徵,本身就不具備普適性。但你通過訓練集,還是學習到它了,因為你的模型,想法設法地擬合了所有的樣本點,自然而然地就會出來很多特徵參數,如下圖,第三幅圖的模型複雜程度遠大於第一幅。

正則化到底是怎麼消除過擬合的?這次終於有人講明白了

在這種不具備普遍性的情況下學習到它,自然會影響你測試集的效果,自然就做不出泛化能力強的模型,就產生了過擬合。

當然了,並不是只要參數一多就會過擬合,還要看你的樣本量。

2 、消除過擬合的通俗理解

先不用管L1, L2正則到底是幹啥的,它們之間有何區別等這樣的問題。

按照邏輯,遇到過擬合這個問題,直接解決過擬合就行。

我們不妨先想想,如果想消除幾個原來模型中的特徵,你會怎麼去做?比如我們學到了一個模型:

y = tanh(w1x1 + w2x2 + w3x3 + w4x4)

如果想變弱或消除特徵x3, 其實很簡單的。直接添加一項 -w3*常數就會達到效果,對嗎?yeah, 這樣不就變弱特徵x3的作用了嗎。

其實還是不難理解的。

3 、相比L2,L1正則更可能使模型變稀疏?

關於這個問題的回答,近日,我查閱到了幾篇講的比較好的博客,非常通俗地解釋了這個問題。

https://blog.csdn.net/weixin_39750084/article/details/83661413

https://www.zhihu.com/question/37096933

L1就是對模型中每個特徵取絕對值,L2取平方。

首先,為解釋問題做鋪墊。

假如,我們的模型Loss函數與某個特徵w 的關係如下:

正則化到底是怎麼消除過擬合的?這次終於有人講明白了

如果施加 L1,則新的函數為:Loss()+C|w|,要想消除這個特徵的作用,只需要令 w = 0,使它取得極小值即可。

且可以證明:添加L1正則後 ,只要滿足:

係數 C 大於原函數在 0 點處的導數的絕對值,

w = 0 就會變成一個極小值點。

證明過程如下,如上圖所示,要想在0點處取得極小值,根據高數基本知識:

1) w小於0時,d(Loss)/d(w) - C 小於0

2) 且,w大於0時,d(Loss)/d(w) + C 大於0

上面兩個式子同時滿足,可以簡寫為:| d(Loss)/d(w) | < C, 得證。

正則化到底是怎麼消除過擬合的?這次終於有人講明白了

如果施加 L2, 則新的函數為:Loss()+Cw^2 ,求導可得:d(Loss)/d(w) + 2Cw,要想在w = 0點處取得極小值,必須得滿足:

d(Loss)/d(w) = 0

言外之意,如果原函數在0點處的導數不為 0,那麼施加 L2 正則後導數依然不為 0,也就不會在0點處取得極小值。

這種概率很明顯小於L1正則在0點處取得極小值的概率值,由此可得,L1更容易使得原來的特徵變弱或消除,換句話說就是更容易變稀疏。

講完了,讀者朋友們,你們看明白了嗎?

最後老規矩 福利:

有想要python、Java 、web前端、大數據、人工智能的寶寶,可以轉發加關注、然後私信小編“學習”無償帶走哦!

正則化到底是怎麼消除過擬合的?這次終於有人講明白了



分享到:


相關文章: