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前端、大數據、人工智能的寶寶,可以轉發加關注、然後私信小編“學習”無償帶走哦!
閱讀更多 編程丸子醬 的文章