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

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

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

怎麼把正則應用進去?咱們從新審視目標函數,之前咱們能夠理解目標函數和損失函數是一個東西。而有正則的含義以後,目標函數就再也不是損失函數了,而是損失函數加懲罰項。而這個懲罰項聽起來好像是一個Optionally,一個可選項,但並非,一般必定要加懲罰項,不然你訓練出來模型極有多是過擬合的。因此一般懲罰項是必定要加的,之前總講線性迴歸必定要回歸,必定要把損失函數降到最低,到今天你應該深入地烙印在腦子裏,它要降到最低的不光是損失函數,而是目標函數機器學習

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

                                                       J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}

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

                                                                              $\operatorname{Obj}(\theta)=L(\theta)+\lambda \Omega(\theta)$

這個λ跟剛纔學習率λ是兩個不一樣的超參數。咱們損失項的意義是要讓訓練集上的偏差儘可能小,而正則項的意義是讓模型儘可能簡單,防止過擬合目標函數其實就是損失函數和正則項線性相加,以前講的目標函數只講了損失項,損失項指的是什麼?指的是咱們的損失函數,雖然到目前爲止咱們只講了一個MSE損失函數,但實際上你應該觸類旁通,雖然你不知道其它損失函數長什麼樣,但你知道會有各類各樣的損失函數,只要這個損失函數降到最低了,咱們這會兒運算出來的模型,就是我這個算法獲得的最終結果。接下來介紹什麼叫正則項,我剛纔說的防止它一味的去追求損失函數最低而致使模型變複雜了,咱們看目標函數的這麼一個形式,$\operatorname{Obj}(\theta)=L(\theta)+\lambda \Omega(\theta)$,雖然這麼花裏胡哨,但最終仍是要把它交給SGD的算法去最優化。我機器仍是傻乎乎的,你讓我最優化損失函數,我就最優化損失函數,你不想讓我光追求最優化損失函數,那你交給我點其餘的東西,我也會一塊兒幫你優化。咱們最終是想讓損失函數相對較小的時候,模型也相對簡單,因此咱們就看着Ω(θ)它應該具備一個什麼樣的特徵?模型越複雜的時候Ω(θ)會越大,模型也簡單的時候Ω(θ)就越小。舉個例子來理解相對概念,好比當損失項函數的最小值是0.18,結果當0.18的那組θ帶到模型評估的函數Ω(θ)裏面,發現Ω(θ)值是20,此時是否是模型太複雜了? 當你損失函數上升了一點,上升到0.19的時候,θ雖然它已經不是最優解了,但此時發現這組θ帶入到Ω(θ)裏面,20直接降到了5,此時機器會選擇哪一種模型?第一組θ仍是第二組θ?應該是第二組θ,由於它達到了一個在損失函數儘可能小的同時,你要讓個人模型儘可能的簡單。優化

λ是幹嗎的?λ是評估你到底多看重模型的簡單性的。假如剛纔這個例子,λ設成0.0000001,對它來講你雖然從20減到了5,可是你乘的係數不多,你的簡單在它眼裏看起來它並不在意,好比你在公司你自我陶醉通常的作了不少工做,老闆可能並不在意。這就是說你這個模型到底有多看重模型複雜程度的懲罰的。爲何管它叫懲罰項,正則項也叫懲罰項,它是一個懲罰係數,你追求到了損失函數是0.18,可是你把這個模型搞複雜了,我就要懲罰你一下,給你加上一個懲罰項Ω(θ)爲20,假如你損失函數是0.19了,你的懲罰性Ω(θ)就變小了,整體的效果會變好,也就是說正則項其實是達到了一個爲了追求損失函數最小而把模型搞複雜了去懲罰的這種狀況。 這種狀況發生了,我就要懲罰你,我讓你損失函數再也不是最優的了,就不會最後出現模型給你選出來一個損失函數是最低的,可是複雜度一下上升了好多的這種狀況。spa

怎麼樣評估這個模型復不復雜?咱們回憶下參數型模型的本質是什麼?是否是就那一組W,因此也只能從這一組W上來評估,沒別的東西了。因此咱們如今來探索評判模型的複雜度的Ω(θ)究竟是什麼?其實它很是簡單,對於線性模型如何評估複雜程度,一般經過L0範數L1範數和L2範數,範數的值越大,該模型越複雜。code

我們講一下什麼叫L0範數,L1範數和L2範數?L0範數,全部參數W中非零元素的個數。好比100個維度裏邊有80個沒有用,它是怎麼斷定沒用的?是否是直接把W調成0了? 那W裏邊的零越多,這個模型就越簡單,因此非零元素的個數越多,表明模型越複雜,所以L0範數能夠做爲我剛纔Ω(θ)的一個候選人。假如Ω(θ)是L0的話,你有一個W是0.1,你直接給它減成0了,發現損失函數就上升了一點點,可是你就直接少考慮了一個維度,因此能必定程度上阻止你的過擬合,由於這個維度,我完全不考慮了,這個是L0範數的做用,可是L0範數不可導,不能求導有什麼麻煩?梯度降低無法工做。你要想作梯度降低,老得求負梯度,你一求負梯度就發現這個傢伙求不了。梯度降低這個東西你用不上了,因此一般咱們不用L0範數做爲Ω(θ)項。blog

         所以Ω(θ)咱們改成用L1範數,L1範數是全部參數的絕對值之和(也稱L0的最佳凸近似)$\|w\|_{1}=\sum_{i=1}^{m}\left|w_{i}\right|$,這個話理解成它是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範數就是$\sqrt{a^{2}+b^{2}}$。假如你有一組W,W的L2範數就是 $\sqrt{\sum_{i=1}^{n} w_{i}^{2}}$,這個東西定義爲L2範數,一般寫做$\|w\|$,這個就像一個運算符同樣,表明了這種運算。那麼L2範數的平方是咱們的L2正則,由於又一次平凡,因此就把L2範數的根號給去掉,你就會看到,它其實是把全部的W的平方給加合起來。也就是L2正則表達式:$\|w\|_{2}^{2}=\sum_{i=1}^{m} w_{i}^{2}$,什麼狀況下這個值會大? W廣泛比較大的時候,這個狀況會大,或者說W的絕對值比較大的時候,這個狀況會大。 當模型把好多的權重都認爲比較重要的時候,這個東西是否是會變大?並且會越重要,大的越厲害,懲罰的越厲害。所以,把L2正則加上又會發生什麼?它會想作到儘可能的把W給壓縮小一點,可是它不是每種W都壓縮,它會優先壓縮那些特別大的W優先,由於這些W對正則項帶來的提高是越好的,讓正則項變得越小,因此會優先壓縮那些最大的W,而後真正特別重要的W,它權重也會很大,這種東西也被壓縮了。 這是咱們想要的結果嗎?明顯不是。你會發現我優化的時候不是單獨用一個正則項,在前面還加着損失項,因此它必定會壓縮那些又大又沒什麼用的那些W。所謂有用沒用怎麼評估?就是你W變一變損失函數根本沒發生什麼改變的狀況下,這種W是否是又大又沒用?他會優先的把這些又大又沒用的W給儘可能壓小,防止模型去過擬合。所以L2正則。默認必定是要帶上的,很明顯不帶任何懲罰項的損失函數根本就不能用。 它光追追求訓練集上發熱損失函數最小了,由於一絲不苟地只追求最小,它不管付出多大的代價,都要最小,所以必定會過擬合。因此在實際狀況中必定會帶上L2正則。所以咱們的目標函數obj裏面永遠是兩項,第一項是loss,第二項是L2,這個是防止過擬合的。咱們總結下L2範數的做用,它是會使全部的W的絕對值都相對變小,而不會變到零,讓你們都小一些,特別重要的權重小的比較少,不過重要的權重往下減的多一點,它的做用就是抵抗過擬合。若是訓練出來的權重表明這一個特徵對最終結果影響的重要性,因爲咱們觀察到的特徵必定不是完備的,「強迫」算法用並不完備的觀察特徵盡全力去擬合訓練集,必定會將一些訓練集中的巧合做爲規律習得,然而這些巧合並不必定在將來預測時也會出現,所以這就是過擬合現象。咱們要把這種現象去掉或者減小,就是經過正則去抵抗過擬合。

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

相關文章
相關標籤/搜索