世界快資訊:大白話5分鐘帶你走進人工智能-第十四節過擬合解決手段L1和L2正則

2022-12-30 18:27:28 來源:51CTO博客

第十四節過擬合解決手段L1和L2正則

第十三節中,我們講解了過擬合的情形,也就是過度的去擬合訓練集上的結果了,反倒讓你的模型太復雜。為了去解決這種現象,我們提出用L1,L2正則去解決這種問題。


(相關資料圖)

怎么把正則應用進去?我們重新審視目標函數,以前我們可以理解目標函數和損失函數是一個東西。而有正則的含義之后,目標函數就不再是損失函數了,而是損失函數加懲罰項。而這個懲罰項聽起來好像是一個Optionally,一個可選項,但并不是,通常一定要加懲罰項,否則你訓練出來模型極有可能是過擬合的。所以通常懲罰項是一定要加的,以前總講線性回歸一定要回歸,一定要把損失函數降到最低,到今天你應該深刻地烙印在腦子里,它要降到最低的不光是損失函數,而是目標函數

首先我們回憶機器學習的流程,先建立一個目標函數(在線性回歸里面怎么建立的目標函數? 最大似然),然后找到使目標函數最小的一組W,就是我們要求的W。這一節以后我們目標函數變一變之前咱們說的線性回歸的目標函數是:

其實這并不是完整版的目標函數,我們實際優化的也不光是它,而是變成了兩項,損失項加上λ的正則項,

這個λ跟剛才學習率λ是兩個不同的超參數。我們損失項的意義是要讓訓練集上的誤差盡量小,而正則項的意義是讓模型盡量簡單,防止過擬合目標函數其實就是損失函數和正則項線性相加,之前講的目標函數只講了損失項,損失項指的是什么?指的是我們的損失函數,雖然到目前為止我們只講了一個MSE損失函數,但實際上你應該舉一反三,雖然你不知道其它損失函數長什么樣,但你知道會有各種各樣的損失函數,只要這個損失函數降到最低了,我們這會兒運算出來的模型,就是我這個算法得到的最終結果。接下來介紹什么叫正則項,我剛才說的防止它一味的去追求損失函數最低而導致模型變復雜了,我們看目標函數的這么一個形式,

,雖然這么花里胡哨,但最終還是要把它交給SGD的算法去最優化。我機器還是傻乎乎的,你讓我最優化損失函數,我就最優化損失函數,你不想讓我光追求最優化損失函數,那你交給我點其他的東西,我也會一起幫你優化。我們最終是想讓損失函數相對較小的時候,模型也相對簡單,所以我們就看著Ω(θ)它應該具有一個什么樣的特征?模型越復雜的時候Ω(θ)會越大,模型也簡單的時候Ω(θ)就越小。舉個例子來理解相對概念,比如當損失項函數的最小值是0.18,結果當0.18的那組θ帶到模型評估的函數Ω(θ)里面,發現Ω(θ)值是20,此時是不是模型太復雜了? 當你損失函數上升了一點,上升到0.19的時候,θ雖然它已經不是最優解了,但此時發現這組θ帶入到Ω(θ)里面,20直接降到了5,此時機器會選擇哪種模型?第一組θ還是第二組θ?應該是第二組θ,因為它達到了一個在損失函數盡量小的同時,你要讓我的模型盡量的簡單。

λ是干嘛的?λ是評估你到底多看重模型的簡單性的。假如剛才這個例子,λ設成0.0000001,對它來說你雖然從20減到了5,但是你乘的系數很少,你的簡單在它眼里看起來它并不在乎,比如你在公司你自我陶醉一般的做了很多工作,老板可能并不在乎。這就是說你這個模型到底有多看重模型復雜程度的懲罰的。為什么管它叫懲罰項,正則項也叫懲罰項,它是一個懲罰系數,你追求到了損失函數是0.18,但是你把這個模型搞復雜了,我就要懲罰你一下,給你加上一個懲罰項Ω(θ)為20,假如你損失函數是0.19了,你的懲罰性Ω(θ)就變小了,總體的效果會變好,也就是說正則項實際上是達到了一個為了追求損失函數最小而把模型搞復雜了去懲罰的這種情況。 這種情況發生了,我就要懲罰你,我讓你損失函數不再是最優的了,就不會最后出現模型給你選出來一個損失函數是最低的,但是復雜度一下上升了好多的這種情況。

怎么樣評估這個模型復不復雜?我們回憶下參數型模型的本質是什么?是不是就那一組W,所以也只能從這一組W上來評估,沒別的東西了。所以我們現在來探索評判模型的復雜度的Ω(θ)到底是什么?其實它非常簡單,對于線性模型如何評估復雜程度,通常通過L0范數L1范數和L2范數,范數的值越大,該模型越復雜。

咱們講一下什么叫L0范數,L1范數和L2范數?L0范數,所有參數W中非零元素的個數。比如100個維度里邊有80個沒有用,它是怎么判定沒用的?是不是直接把W調成0了? 那W里邊的零越多,這個模型就越簡單,所以非零元素的個數越多,代表模型越復雜,因此L0范數可以作為我剛才Ω(θ)的一個候選人。假如Ω(θ)是L0的話,你有一個W是0.1,你直接給它減成0了,發現損失函數就上升了一點點,但是你就直接少考慮了一個維度,所以能一定程度上阻止你的過擬合,因為這個維度,我徹底不考慮了,這個是L0范數的作用,但是L0范數不可導,不能求導有什么麻煩?梯度下降沒法工作。你要想做梯度下降,老得求負梯度,你一求負梯度就發現這個家伙求不了。梯度下降這個東西你用不上了,所以通常我們不用L0范數作為Ω(θ)項。

因此Ω(θ)我們改為用L1范數,L1范數是所有參數的絕對值之和(也稱L0的最佳凸近似)

,這個話理解成它是L0的方便計算的替代品,它能達到跟L0差不多的效果,讓大多數沒什么用的這些W變為零,但是它又可導,能交給梯度下降來做。 假如損失函數是MSE,加上L1正則后|,你再去優化交給SGD的東西,就不再是原來的MSE函數了,而是MSE+0.1*Σ|W讓它一起去做優化,優化出來的結果會是什么樣的? 優化出來的結果會有相當一部分的W變為了0。所以通常分類任務也好,回歸任務也好,我們說特征太多,這些特征好麻煩,我也不知道哪個有用,哪個沒用,你就可以,你直接給他加一個L1范數跑一下,哪些W是零了,那些特征就直接去掉。能夠篩選掉那些W為0的特征,一定是沒有它也不會引起損失函數巨大上升的那些特征。比如我剛才舉那個例子,張三家關沒關窗戶,對于下雨的影響,它一定本身不大。 你加了一把L1正則訓練出來模型之后,就會發現張三家關沒關窗戶這一列的屬性的權重變為了零,如果加了L1正則它還不是零,說明從數據集上來看,這一列就是對下雨影響很大。但是可能發生嗎這種事?明顯不可能,說明什么?說明你收集的數據絕對不夠多。或者你收集的數據不是全部的數據,是張三給你的數據,他一收集就老要打開窗戶看下雨,經常會有這種荒唐的事發生。比如你發現你怎么跑模型? 這個模型效果都不好,很可能是你收集上的這些數據本身就已經被篩選過了。比如你拿你用戶數據的時候,你發現有一列的值只有安卓手機能提供給你,iPhone提供不了,所以你的數據就是一個有偏斜的數據,經過一次預篩選了,像我剛才講的故事,張三一看下雨他就把窗戶打開了,因果反制,所以你收集的數據只收集到了他們家開窗戶的時候的數據,數據本身是有問題的。因此我們加上L1正則后,發現一些明顯跟你的最終結果不應該有關系的數據還有了關系,那說明這個數據本身有問題。這也是一個檢驗數據的一種方式。所以通常L1范數是用來做特征選擇的。

我們對比下L0和L1L0和L1都可以使參數稀疏。所謂稀疏化就是0比1多,假如你給了我200個數,我發現里邊只有三個數不為零,你接記下這三個數的大小和三個數的位置就可以存下來了,而不用真把這200個數存下來,這其實是一個稀疏向量。所以使參數稀疏化,也就讓不重要的那些維度的參數歸為0,重要的會更偏向為1。L1范數比L0范數有一個優點,它是可微可導的,功能又類似,所以只選擇L1范數,而基本沒有見過用L0范數的,L1想做的事是盡量的讓沒用的特征變成零,因此L1的意義是特征選擇,與此同時增強了模型的解釋性,模型解釋性是非常重要的一個事兒。 比如有一個業務場景,有一天銀行來找到你了,說我們想訓練一個模型,做一個客戶還款能力的預測,丟給你一堆數據,你最后確實做出來一個模型,我問你這個東西好用不好用,你心里也沒底,你去交活的時候,你說我們這400多個特征全用上了,連客戶今天穿沒穿花衣服都有,你能跟客戶交差,說你這模型真有用嗎?不能夠的,你一定要把參數的量減下來,給她去解釋,為什么這個東西在里面,你看這個模型確實讓人更放心,讓客戶也有信心,你權重是高是低還好,你最終八竿子打不著的東西都抄進來了,明顯這個模型是有問題的,是有缺陷的。所以模型的解釋性不是一個沒有意義的事兒,他一定要能解釋得通這個東西才敢上線去生產,一定不能跟你的常識都是違背的,如果你發現跟你常識違背的模型,你一定要去經過實驗來看看是不是真的有用,如果真有用了,這個東西叫知識發現,代表你發現了一個新的相關的指數,代表你有一個新的知識發現,但大部分情況下八竿子打不著的那些特征,通常一定是沒有用的,一定是哪里有錯了。你應該去考慮,所以L1有特征選擇和增強模型解釋性的功能。如果有些維度被你訓練的時候,機器給它加了很大權重,但是只能讓損失函數降低一點點,那么很有可能會產生了過擬合現象,因此我們要懲罰那些帶不來什么提高又浪費了好多資源的這種權重。舉個例子,比如你們家本來吃飯空間就有限,一哥們不干活,天天還在你們家吃飯,占用了大量的資源,但最后他也沒說沒貢獻,他每個月貢獻給你一毛錢,你覺得這個容忍你還要嗎?,你為了掙這一毛錢還不夠我給你收拾碗筷的。這個也一樣,你為了提升那一點點損失函數,還不夠你給我模型增加復雜度的帶來的過擬合風險,所以我選擇不要這個維度了。

我們再來討論下L2正則,定義是L2范數的平方。什么叫L2范數?假如有a,b,它倆的L2范數就是

。假如你有一組W,W的L2范數就是

,這個東西定義為L2范數,通常寫作

,這個就像一個運算符一樣,代表了這種運算。那么L2范數的平方是我們的L2正則,因為又一次平凡,所以就把L2范數的根號給去掉,你就會看到,它實際上是把所有的W的平方給加合起來。也就是L2正則表達式:

,什么情況下這個值會大?W普遍比較大的時候,這個情況會大,或者說W的絕對值比較大的時候,這個情況會大。 當模型把好多的權重都認為比較重要的時候,這個東西是不是會變大?而且會越重要,大的越厲害,懲罰的越厲害。因此,把L2正則加上又會發生什么?它會想做到盡量的把W給壓縮小一點,但是它不是每種W都壓縮,它會優先壓縮那些特別大的W優先,因為這些W對正則項帶來的提升是越好的,讓正則項變得越小,所以會優先壓縮那些最大的W,然后真正特別重要的W,它權重也會很大,這種東西也被壓縮了。 這是我們想要的結果嗎?明顯不是。你會發現我優化的時候不是單獨用一個正則項,在前面還加著損失項,所以它一定會壓縮那些又大又沒什么用的那些W。所謂有用沒用怎么評估?就是你W變一變損失函數根本沒發生什么改變的情況下,這種W是不是又大又沒用?他會優先的把這些又大又沒用的W給盡量壓小,防止模型去過擬合。因此L2正則。默認一定是要帶上的,很明顯不帶任何懲罰項的損失函數根本就不能用。 它光追追求訓練集上發熱損失函數最小了,因為一絲不茍地只追求最小,它無論付出多大的代價,都要最小,因此一定會過擬合。所以在實際情況中一定會帶上L2正則。因此我們的目標函數obj里面永遠是兩項,第一項是loss,第二項是L2,這個是防止過擬合的。我們總結下L2范數的作用,它是會使所有的W的絕對值都相對變小,而不會變到零,讓大家都小一些,特別重要的權重小的比較少,不太重要的權重往下減的多一點,它的作用就是抵抗過擬合。如果訓練出來的權重代表這一個特征對最終結果影響的重要性,由于我們觀察到的特征一定不是完備的,“強迫”算法用并不完備的觀察特征盡全力去擬合訓練集,一定會將一些訓練集中的巧合作為規律習得,然而這些巧合并不一定在未來預測時也會出現,因此這就是過擬合現象。我們要把這種現象去掉或者減少,就是通過正則去抵抗過擬合。

下一節中我們討論L1正則和L2正則的區別。

標簽: 損失函數 目標函數 這個東西

上一篇:焦點資訊:有關文件IO操作的錯誤(error)提示
下一篇:全球今日報丨大白話5分鐘帶你走進人工智能-第二十八節集成學習之隨機森林概念介紹(1)