正则化与L0、L1、L2范数略解
機(jī)器學(xué)習(xí)模型需要擁有很好地泛化能力來(lái)適應(yīng)訓(xùn)練集中沒有出現(xiàn)過(guò)的新樣本。在機(jī)器學(xué)習(xí)應(yīng)用時(shí),我們經(jīng)常會(huì)遇到過(guò)度擬合(over-fitting)的問(wèn)題,可能會(huì)導(dǎo)致訓(xùn)練出來(lái)的模型效果很差。接下來(lái),我們將談?wù)摰恼齽t化(regularization)技術(shù),它可以改善或者減少過(guò)度擬合問(wèn)題,以使學(xué)習(xí)算法更好實(shí)現(xiàn)。其實(shí),不只是機(jī)器學(xué)習(xí),所有反演問(wèn)題中都會(huì)遇到類似問(wèn)題。我一直再做非線性反演(具體的就不詳細(xì)說(shuō)明了),對(duì)于非線性反演中雖然較線性反演復(fù)雜,仍然逃離不了反演固有的魔咒。之前對(duì)正則化這種東西并不是很在意,一直覺得只要是目標(biāo)函數(shù)的凸性較好,一般都能反演出來(lái)比較好的模型,但是實(shí)際操作中,因?yàn)榉囱莸臇|西受影響的因素比較多,僅僅依賴于目標(biāo)函數(shù)是不能夠達(dá)到滿意的效果的,所以最近又重新關(guān)注了一下正則化、約束等問(wèn)題。查閱了很多神人寫的博客,一下子豁然開朗了很多,原來(lái)約束、正則化還有這么應(yīng)用呢。下面僅以我查閱的文獻(xiàn)、博客資料為基礎(chǔ),以盡量通俗易懂的語(yǔ)言來(lái)說(shuō)明正則化、約束的作用,為以后研究工作奠定基礎(chǔ),同時(shí)也希望對(duì)大家有所幫助。
因?yàn)槟壳皺C(jī)器學(xué)習(xí)大部分還是基于線性反演,比較通俗易懂,此處以機(jī)器學(xué)習(xí)為例來(lái)說(shuō)明問(wèn)題。
一、什么是擬合
機(jī)器學(xué)習(xí)中一個(gè)重要的話題便是模型的泛化能力,泛化能力強(qiáng)的模型才是好模型,對(duì)于訓(xùn)練好的模型,若在訓(xùn)練集表現(xiàn)差,不必說(shuō)在測(cè)試集表現(xiàn)同樣會(huì)很差,這可能是欠擬合(under fitting)導(dǎo)致;若模型在訓(xùn)練集表現(xiàn)非常好,卻在測(cè)試集上差強(qiáng)人意,則這便是過(guò)擬合(over fitting)導(dǎo)致的,過(guò)擬合與欠擬合也可以用 Bias 與 Variance 的角度來(lái)解釋,欠擬合會(huì)導(dǎo)致高 Bias ,過(guò)擬合會(huì)導(dǎo)致高 Variance ,所以模型需要在 Bias 與 Variance 之間做出一個(gè)權(quán)衡。
使用簡(jiǎn)單的模型去擬合復(fù)雜數(shù)據(jù)時(shí),會(huì)導(dǎo)致模型很難擬合數(shù)據(jù)的真實(shí)分布,這時(shí)模型便欠擬合了,或者說(shuō)有很大的 Bias,Bias 即為模型的期望輸出與其真實(shí)輸出之間的差異;有時(shí)為了得到比較精確的模型而過(guò)度擬合訓(xùn)練數(shù)據(jù),或者模型復(fù)雜度過(guò)高時(shí),可能連訓(xùn)練數(shù)據(jù)的噪音也擬合了,導(dǎo)致模型在訓(xùn)練集上效果非常好,但泛化性能卻很差,這時(shí)模型便過(guò)擬合了,或者說(shuō)有很大的 Variance,這時(shí)模型在不同訓(xùn)練集上得到的模型波動(dòng)比較大,Variance 刻畫了不同訓(xùn)練集得到的模型的輸出與這些模型期望輸出的差異。
欠擬合、過(guò)擬合的直觀理解
?
舉例:
還是來(lái)看預(yù)測(cè)房?jī)r(jià)的這個(gè)例子,我們先對(duì)該數(shù)據(jù)做線性回歸,也就是左邊第一張圖。
如果這么做,我們可以獲得擬合數(shù)據(jù)的這樣一條直線,但是,實(shí)際上這并不是一個(gè)很好的模型。我們看看這些數(shù)據(jù),很明顯,隨著房子面積增大,住房?jī)r(jià)格的變化趨于穩(wěn)定或者說(shuō)越往右越平緩。因此線性回歸并沒有很好擬合訓(xùn)練數(shù)據(jù)。
我們把此類情況稱為欠擬合(underfitting),或者叫作叫做高偏差(bias)。
這兩種說(shuō)法大致相似,都表示沒有很好地?cái)M合訓(xùn)練數(shù)據(jù)。高偏差這個(gè)詞是 machine learning 的研究初期傳下來(lái)的一個(gè)專業(yè)名詞,具體到這個(gè)問(wèn)題,意思就是說(shuō)如果用線性回歸這個(gè)算法去擬合訓(xùn)練數(shù)據(jù),那么該算法實(shí)際上會(huì)產(chǎn)生一個(gè)非常大的偏差或者說(shuō)存在一個(gè)很強(qiáng)的偏見。
第二幅圖,我們?cè)谥虚g加入一個(gè)二次項(xiàng),也就是說(shuō)對(duì)于這幅數(shù)據(jù)我們用二次函數(shù)去擬合。自然,可以擬合出一條曲線,事實(shí)也證明這個(gè)擬合效果很好。
另一個(gè)極端情況是,如果在第三幅圖中對(duì)于該數(shù)據(jù)集用一個(gè)四次多項(xiàng)式來(lái)擬合。因此在這里我們有五個(gè)參數(shù)θ0到θ4,這樣我們同樣可以擬合一條曲線,通過(guò)我們的五個(gè)訓(xùn)練樣本,我們可以得到如右圖的一條曲線。
一方面,我們似乎對(duì)訓(xùn)練數(shù)據(jù)做了一個(gè)很好的擬合,因?yàn)檫@條曲線通過(guò)了所有的訓(xùn)練實(shí)例。但是,這實(shí)際上是一條很扭曲的曲線,它不停上下波動(dòng)。因此,事實(shí)上我們并不認(rèn)為它是一個(gè)預(yù)測(cè)房?jī)r(jià)的好模型。
所以,我們把這類情況叫做過(guò)擬合(overfitting),也叫高方差(variance)。
與高偏差一樣,高方差同樣也是一個(gè)歷史上的叫法。從第一印象上來(lái)說(shuō),如果我們擬合一個(gè)高階多項(xiàng)式,那么這個(gè)函數(shù)能很好的擬合訓(xùn)練集(能擬合幾乎所有的訓(xùn)練數(shù)據(jù)),但這也就面臨函數(shù)可能太過(guò)龐大的問(wèn)題,變量太多。
同時(shí)如果我們沒有足夠的數(shù)據(jù)集(訓(xùn)練集)去約束這個(gè)變量過(guò)多的模型,那么就會(huì)發(fā)生過(guò)擬合。
過(guò)度擬合的問(wèn)題通常發(fā)生在變量(特征)過(guò)多的時(shí)候。這種情況下訓(xùn)練出的方程總是能很好的擬合訓(xùn)練數(shù)據(jù),也就是說(shuō),我們的代價(jià)函數(shù)可能非常接近于 0 或者就為 0。
但是,這樣的曲線千方百計(jì)的去擬合訓(xùn)練數(shù)據(jù),這樣會(huì)導(dǎo)致它無(wú)法泛化到新的數(shù)據(jù)樣本中,以至于無(wú)法預(yù)測(cè)新樣本價(jià)格。在這里,術(shù)語(yǔ)"泛化"指的是一個(gè)假設(shè)模型能夠應(yīng)用到新樣本的能力。新樣本數(shù)據(jù)是指沒有出現(xiàn)在訓(xùn)練集中的數(shù)據(jù)。
之前,我們看到了線性回歸情況下的過(guò)擬合。類似的情況也適用于邏輯回歸。
發(fā)生欠擬合和過(guò)擬合的解決辦法
那么,如果發(fā)生了過(guò)擬合問(wèn)題,我們應(yīng)該如何處理?
過(guò)多的變量(特征),同時(shí)只有非常少的訓(xùn)練數(shù)據(jù),會(huì)導(dǎo)致出現(xiàn)過(guò)度擬合的問(wèn)題。因此為了解決過(guò)度擬合,有以下兩個(gè)辦法
方法一:盡量減少選取變量的數(shù)量
具體而言,我們可以人工檢查每一項(xiàng)變量,并以此來(lái)確定哪些變量更為重要,然后,保留那些更為重要的特征變量。至于,哪些變量應(yīng)該舍棄,我們以后在討論,這會(huì)涉及到模型選擇算法,這種算法是可以自動(dòng)選擇采用哪些特征變量,自動(dòng)舍棄不需要的變量。這類做法非常有效,但是其缺點(diǎn)是當(dāng)你舍棄一部分特征變量時(shí),你也舍棄了問(wèn)題中的一些信息。例如,也許所有的特征變量對(duì)于預(yù)測(cè)房?jī)r(jià)都是有用的,我們實(shí)際上并不想舍棄一些信息或者說(shuō)舍棄這些特征變量。
方法二:正則化
正則化中我們將保留所有的特征變量,但是會(huì)減小特征變量的數(shù)量級(jí)(參數(shù)數(shù)值的大小θ(j))。
這個(gè)方法非常有效,當(dāng)我們有很多特征變量時(shí),其中每一個(gè)變量都能對(duì)預(yù)測(cè)產(chǎn)生一點(diǎn)影響。正如我們?cè)诜績(jī)r(jià)預(yù)測(cè)的例子中看到的那樣,我們可以有很多特征變量,其中每一個(gè)變量都是有用的,因此我們不希望把它們刪掉,這就導(dǎo)致了正則化概念的發(fā)生。
接下來(lái)我們會(huì)討論怎樣應(yīng)用正則化和什么叫做正則化均值,然后將開始討論怎樣使用正則化來(lái)使學(xué)習(xí)算法正常工作,并避免過(guò)擬合。
在前面的介紹中,我們看到了如果用一個(gè)二次函數(shù)來(lái)擬合這些數(shù)據(jù),那么它給了我們一個(gè)對(duì)數(shù)據(jù)很好的擬合。然而,如果我們用一個(gè)更高次的多項(xiàng)式去擬合,最終我們可能會(huì)得到一個(gè)曲線,它能很好地?cái)M合訓(xùn)練集,但卻并不是一個(gè)好的結(jié)果,因?yàn)樗^(guò)度擬合了數(shù)據(jù),因此,一般性并不是很好。
讓我們考慮下面的假設(shè),我們想要加上懲罰項(xiàng),從而使參數(shù) θ3?和 θ4?足夠的小。
這里我的意思就是,上圖的式子是我們的優(yōu)化目標(biāo),也就是說(shuō)我們需要盡量減少代價(jià)函數(shù)的均方誤差。
對(duì)于這個(gè)函數(shù)我們對(duì)它添加一些項(xiàng),加上 1000 乘以 θ3?的平方,再加上 1000 乘以 θ4?的平方,
1000 只是我隨便寫的某個(gè)較大的數(shù)字而已。現(xiàn)在,如果我們要最小化這個(gè)函數(shù),那么為了最小化這個(gè)新的代價(jià)函數(shù),我們要讓 θ3?和 θ4?盡可能小。因?yàn)?#xff0c;如果你在原有代價(jià)函數(shù)的基礎(chǔ)上加上 1000 乘以 θ3?這一項(xiàng) ,那么這個(gè)新的代價(jià)函數(shù)將變得很大,所以,當(dāng)我們最小化這個(gè)新的代價(jià)函數(shù)時(shí), 我們將使 θ3?的值接近于 0,同樣 θ4?的值也接近于 0,就像我們忽略了這兩個(gè)值一樣。如果我們做到這一點(diǎn)( θ3?和 θ4?接近 0 ),那么我們將得到一個(gè)近似的二次函數(shù)。
因此,我們最終恰當(dāng)?shù)財(cái)M合了數(shù)據(jù),我們所使用的正是二次函數(shù)加上一些非常小,貢獻(xiàn)很小項(xiàng)(因?yàn)檫@些項(xiàng)的 θ3、 θ4?非常接近于0)。顯然,這是一個(gè)更好的假設(shè)。
更一般地,這里給出了正規(guī)化背后的思路。這種思路就是,如果我們的參數(shù)值對(duì)應(yīng)一個(gè)較小值的話(參數(shù)值比較小),那么往往我們會(huì)得到一個(gè)形式更簡(jiǎn)單的假設(shè)。
在我們上面的例子中,我們懲罰的只是 θ3?和 θ4 ,使這兩個(gè)值均接近于零,從而我們得到了一個(gè)更簡(jiǎn)單的假設(shè),實(shí)際上這個(gè)假設(shè)大抵上是一個(gè)二次函數(shù)。
但更一般地說(shuō),如果我們像懲罰 θ3?和 θ4?這樣懲罰其它參數(shù),那么我們往往可以得到一個(gè)相對(duì)較為簡(jiǎn)單的假設(shè)。
實(shí)際上,這些參數(shù)的值越小,通常對(duì)應(yīng)于越光滑的函數(shù),也就是更加簡(jiǎn)單的函數(shù)。因此 就不易發(fā)生過(guò)擬合的問(wèn)題。
我知道,為什么越小的參數(shù)對(duì)應(yīng)于一個(gè)相對(duì)較為簡(jiǎn)單的假設(shè),對(duì)你來(lái)說(shuō)現(xiàn)在不一定完全理解,但是在上面的例子中使 θ3?和 θ4?很小,并且這樣做能給我們一個(gè)更加簡(jiǎn)單的假設(shè),這個(gè)例子至少給了我們一些直觀感受。
來(lái)讓我們看看具體的例子,對(duì)于房屋價(jià)格預(yù)測(cè)我們可能有上百種特征,與剛剛所講的多項(xiàng)式例子不同,我們并不知道 θ3?和 θ4?是高階多項(xiàng)式的項(xiàng)。所以,如果我們有一百個(gè)特征,我們并不知道如何選擇關(guān)聯(lián)度更好的參數(shù),如何縮小參數(shù)的數(shù)目等等。
因此在正則化里,我們要做的事情,就是把減小我們的代價(jià)函數(shù)(例子中是線性回歸的代價(jià)函數(shù))所有的參數(shù)值,因?yàn)槲覀儾⒉恢朗悄囊粋€(gè)或哪幾個(gè)要去縮小。
因此,我們需要修改代價(jià)函數(shù),在這后面添加一項(xiàng),就像我們?cè)诜嚼ㄌ?hào)里的這項(xiàng)。當(dāng)我們添加一個(gè)額外的正則化項(xiàng)的時(shí)候,我們收縮了每個(gè)參數(shù)。
順便說(shuō)一下,按照慣例,我們沒有去懲罰 θ0,因此 θ0?的值是大的。這就是一個(gè)約定從 1 到 n 的求和,而不是從 0 到 n 的求和。但其實(shí)在實(shí)踐中
這只會(huì)有非常小的差異,無(wú)論你是否包括這 θ0?這項(xiàng)。但是按照慣例,通常情況下我們還是只從 θ1?到 θn?進(jìn)行正則化。
下面的這項(xiàng)就是一個(gè)正則化項(xiàng)
并且 λ 在這里我們稱做正則化參數(shù)。
λ 要做的就是控制在兩個(gè)不同的目標(biāo)中的平衡關(guān)系。
第一個(gè)目標(biāo)就是我們想要訓(xùn)練,使假設(shè)更好地?cái)M合訓(xùn)練數(shù)據(jù)。我們希望假設(shè)能夠很好的適應(yīng)訓(xùn)練集。
而第二個(gè)目標(biāo)是我們想要保持參數(shù)值較小。(通過(guò)正則化項(xiàng))
而 λ 這個(gè)正則化參數(shù)需要控制的是這兩者之間的平衡,即平衡擬合訓(xùn)練的目標(biāo)和保持參數(shù)值較小的目標(biāo)。從而來(lái)保持假設(shè)的形式相對(duì)簡(jiǎn)單,來(lái)避免過(guò)度的擬合。
對(duì)于我們的房屋價(jià)格預(yù)測(cè)來(lái)說(shuō),我們之前所用的非常高的高階多項(xiàng)式來(lái)擬合,我們將會(huì)得到一個(gè)非常彎曲和復(fù)雜的曲線函數(shù),現(xiàn)在我們只需要使用正則化目標(biāo)的方法,那么你就可以得到一個(gè)更加合適的曲線,但這個(gè)曲線不是一個(gè)真正的二次函數(shù),而是更加的流暢和簡(jiǎn)單的一個(gè)曲線。這樣就得到了對(duì)于這個(gè)數(shù)據(jù)更好的假設(shè)。
再一次說(shuō)明下,這部分內(nèi)容的確有些難以明白,為什么加上參數(shù)的影響可以具有這種效果?但如果你親自實(shí)現(xiàn)了正規(guī)化,你將能夠看到這種影響的最直觀的感受。
在正則化線性回歸中,如果正則化參數(shù)值 λ 被設(shè)定為非常大,那么將會(huì)發(fā)生什么呢?
我們將會(huì)非常大地懲罰參數(shù)θ1?θ2?θ3?θ4?… 也就是說(shuō),我們最終懲罰θ1?θ2?θ3?θ4?…? 在一個(gè)非常大的程度,那么我們會(huì)使所有這些參數(shù)接近于零。
如果我們這么做,那么就是我們的假設(shè)中相當(dāng)于去掉了這些項(xiàng),并且使我們只是留下了一個(gè)簡(jiǎn)單的假設(shè),這個(gè)假設(shè)只能表明房屋價(jià)格等于 θ0?的值,那就是類似于擬合了一條水平直線,對(duì)于數(shù)據(jù)來(lái)說(shuō)這就是一個(gè)欠擬合 (underfitting)。這種情況下這一假設(shè)它是條失敗的直線,對(duì)于訓(xùn)練集來(lái)說(shuō)這只是一條平滑直線,它沒有任何趨勢(shì),它不會(huì)去趨向大部分訓(xùn)練樣本的任何值。
這句話的另??一種方式來(lái)表達(dá)就是這種假設(shè)有過(guò)于強(qiáng)烈的"偏見" 或者過(guò)高的偏差 (bais),認(rèn)為預(yù)測(cè)的價(jià)格只是等于 θ0?。對(duì)于數(shù)據(jù)來(lái)說(shuō)這只是一條水平線。
因此,為了使正則化運(yùn)作良好,我們應(yīng)當(dāng)注意一些方面,應(yīng)該去選擇一個(gè)不錯(cuò)的正則化參數(shù) λ 。當(dāng)我們以后講到多重選擇時(shí)我們將討論一種方法來(lái)自動(dòng)選擇正則化參數(shù) λ? ,為了使用正則化,接下來(lái)我們將把這些概念應(yīng)用到到線性回歸和邏輯回歸中去,那么我們就可以讓他們避免過(guò)度擬合了。
之前我們已經(jīng)介紹過(guò),嶺回歸的代價(jià)函數(shù)如下:
對(duì)于線性回歸(的求解),我們之前運(yùn)用了兩種學(xué)習(xí)算法,一種基于梯度下降,一種基于正規(guī)方程。
梯度下降,如下:
正規(guī)方程,如下:
現(xiàn)在考慮 M(即樣本量), 比 N(即特征的數(shù)量)小或等于N。
通過(guò)之前的博文,我們知道如果你只有較少的樣本,導(dǎo)致特征數(shù)量大于樣本數(shù)量,那么矩陣 XTX 將是不可逆矩陣或奇異(singluar)矩陣,或者用另一種說(shuō)法是這個(gè)矩陣是退化(degenerate)的,那么我們就沒有辦法使用正規(guī)方程來(lái)求出 θ 。
幸運(yùn)的是,正規(guī)化也為我們解決了這個(gè)問(wèn)題,具體的說(shuō)只要正則參數(shù)是嚴(yán)格大于零,實(shí)際上,可以證明如下矩陣:
將是可逆的。因此,使用正則還可以照顧任何 不可逆的問(wèn)題。
所以,你現(xiàn)在知道如何實(shí)現(xiàn)嶺回歸,利用它,你就可以避免過(guò)度擬合,即使你在一個(gè)相對(duì)較小的訓(xùn)練集里有很多特征。這應(yīng)該可以讓你在很多問(wèn)題上更好的運(yùn)用線性回歸。
在接下來(lái)的視頻中,我們將把這種正則化的想法應(yīng)用到 Logistic 回歸,這樣我們就可以讓 logistic 回歸也避免過(guò)度擬合,從而表現(xiàn)的更好。
Regularized Logistic Regression 實(shí)際上與 Regularized Linear Regression 是十分相似的。
同樣使用梯度下降:
如果在高級(jí)優(yōu)化算法中,使用正則化技術(shù)的話,那么對(duì)于這類算法我們需要自己定義costFunction。
For those methods what we needed to do was to define the function that's called the cost function.
這個(gè)我們自定義的 costFunction 的輸入為向量 θ ,返回值有兩項(xiàng),分別是代價(jià)函數(shù) jVal 以及 梯度gradient。
總之我們需要的就是這個(gè)自定義函數(shù)costFunction,針對(duì)Octave而言,我們可以將這個(gè)函數(shù)作為參數(shù)傳入到 fminunc 系統(tǒng)函數(shù)中(fminunc 用來(lái)求函數(shù)的最小值,將@costFunction作為參數(shù)代進(jìn)去,注意 @costFunction 類似于C語(yǔ)言中的函數(shù)指針),fminunc返回的是函數(shù) costFunction 在無(wú)約束條件下的最小值,即我們提供的代價(jià)函數(shù) jVal 的最小值,當(dāng)然也會(huì)返回向量 θ 的解。
上述方法顯然對(duì)正則化邏輯回歸是適用的。
參考文獻(xiàn)
https://www.cnblogs.com/jianxinzhou/p/4083921.html
總結(jié)
以上是生活随笔為你收集整理的正则化与L0、L1、L2范数略解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 英语写作中常见语法总结(二)
- 下一篇: 正则化与L0、L1、L2范数祥解