機器學習中使用「正則化來防止過擬合」到底是一個什麼原理?為什麼正則化項就可以防止過擬合?

還請各位不吝賜教


Orangeprince 的回答非常學院派,也非常系統。 過擬合表現在訓練數據上的誤差非常小,而在測試數據上誤差反而增大。其原因一般是模型過於複雜,過分得去擬合數據的雜訊和outliers. 正則化則是對模型參數添加先驗,使得模型複雜度較小,對於雜訊以及outliers的輸入擾動相對較小。 以正則化項和損失函數都是l_2 norm 為例,下面貼一張上課用的slide.

我們相當於是給模型參數w 添加了一個協方差為1/alpha 的零均值高斯分布先驗。 對於alpha =0,也就是不添加正則化約束,則相當於參數的高斯先驗分布有著無窮大的協方差,那麼這個先驗約束則會非常弱,模型為了擬合所有的訓練數據,w可以變得任意大不穩定。alpha越大,表明先驗的高斯協方差越小,模型約穩定, 相對的variance也越小。 也正如其他答題者所說, 加入正則化是 在bias和variance之間做一個tradeoff.


既然看到了問題,還是抽個時間來寫寫。要回答這個問題,首先要弄清什麼是過擬合,什麼會過擬合。

過擬合是一種現象。當我們提高在訓練數據上的表現時,在測試數據上反而下降,這就被稱為過擬合,或過配。

過擬合發生的本質原因,是由於監督學習問題的不適定:在高中數學我們知道,從n個(線性無關)方程可以解n個變數,解n+1個變數就會解不出。在監督學習中,往往數據(對應了方程)遠遠少於模型空間(對應了變數)。因此過擬合現象的發生,可以分解成以下三點:

  1. 有限的訓練數據不能完全反映出一個模型的好壞,然而我們卻不得不在這有限的數據上挑選模型,因此我們完全有可能挑選到在訓練數據上表現很好而在測試數據上表現很差的模型,因為我們完全無法知道模型在測試數據上的表現。

  2. 如果模型空間很大,也就是有很多很多模型可以給我們挑選,那麼挑到對的模型的機會就會很小。
  3. 與此同時,如果我們要在訓練數據上表現良好,最為直接的方法就是要在足夠大的模型空間中挑選模型,否則如果模型空間很小,就不存在能夠擬合數據很好的模型。

由上3點可見,要擬合訓練數據,就要足夠大的模型空間;用了足夠大的模型空間,挑選到測試性能好的模型的概率就會下降。因此,就會出現訓練數據擬合越好,測試性能越差的過擬合現象。

過擬合現象有多種解釋,

  • 經典的是bias-variance decomposition,但個人認為這種解釋更加傾向於直觀理解;

  • PAC-learning 泛化界解釋,這種解釋是最透徹,最fundamental的;

  • Bayes先驗解釋,這種解釋把正則變成先驗,在我看來等於沒解釋。

另外值得一提的是,不少人會用「模型複雜度」替代上面我講的「模型空間」。這其實是一回事,但「模型複雜度」往往容易給人一個誤解,認為是一個模型本身長得複雜。例如5次多項式就要比2次多項式複雜,這是錯的。因此我更願意用「模型空間」,強調「複雜度」是候選模型的「數量」,而不是模型本事的「長相」。

最後回答為什麼正則化能夠避免過擬合:因為正則化就是控制模型空間的一種辦法。


很簡單,小數據集只能用來擬合簡單的模型,複雜的模型必須用大數據集來擬合。

Regularization的作用,簡而言之就是在用小數據集擬合模型的過程中,強行加入人為偏轉,強烈地prefer簡單的模型,從而控制擬合出來的模型的複雜度,避免overfitting。如果樣本數跟參數數量相比很多的話,regularization一般來說是多餘的。

數據集的大小取決於樣本數 n 與參數維數 d 的比較,前者相對較大就叫「大數據集」,反之就叫「小數據集」,跟兩者的絕對數量多少無關。在nonparametric模型里,參數維數 d 應該被理解為用於逼近population distribution所使用的working model的參數維數。


媽的直接從word貼過來圖片都沒了,知乎發圖片太麻煩了

由於有人說我抄襲,我直接把課程的網站放這裡,我確實是抄襲的:

https://www.coursera.org/learn/machine-learning/?source=phoenixCdp2016AbTest?siteID=Gr6prw2kaB0-YT06BCP_.HYx.BqznFbkaAamp;amp;utm_content=10amp;amp;utm_medium=partnersamp;amp;utm_source=linkshareamp;amp;utm_campaign=Gr6prw2kaB0

網易雲也有免費視頻:

深度學習工程師微專業 - 一線人工智慧大師吳恩達親研-網易雲課堂 - 網易雲課堂mooc.study.163.com圖標

The Problem of Overfitting

1.What is Overfitting

看預測房價的這個例子,我們先對該數據做線性回歸,也就是左邊第一張圖。

如果這麼做,我們可以獲得擬合數據的這樣一條直線,但是,實際上這並不是一個很好的模型。我們看看這些數據,很明顯,隨著房子面積增大,住房價格的變化趨於穩定或者說越往右越平緩。因此線性回歸併沒有很好擬合訓練數據。

我們把此類情況稱為欠擬合(underfitting),或者叫作叫做高偏差(bias)。

這兩種說法大致相似,都表示沒有很好地擬合訓練數據。高偏差這個詞是 machine learning 的研究初期傳下來的一個專業名詞,具體到這個問題,意思就是說如果用線性回歸這個演算法去擬合訓練數據,那麼該演算法實際上會產生一個非常大的偏差或者說存在一個很強的偏見。

第二幅圖,我們在中間加入一個二次項,也就是說對於這幅數據我們用二次函數去擬合。自然,可以擬合出一條曲線,事實也證明這個擬合效果很好。

另一個極端情況是,如果在第三幅圖中對於該數據集用一個四次多項式來擬合。因此在這裡我們有五個參數θ0到θ4,這樣我們同樣可以擬合一條曲線,通過我們的五個訓練樣本,我們可以得到如右圖的一條曲線。

一方面,我們似乎對訓練數據做了一個很好的擬合,因為這條曲線通過了所有的訓練實例。但是,這實際上是一條很扭曲的曲線,它不停上下波動。因此,事實上我們並不認為它是一個預測房價的好模型。

所以,我們把這類情況叫做過擬合(overfitting),也叫高方差(variance)。

與高偏差一樣,高方差同樣也是一個歷史上的叫法。從第一印象上來說,如果我們擬合一個高階多項式,那麼這個函數能很好的擬合訓練集(能擬合幾乎所有的訓練數據),但這也就面臨函數可能太過龐大的問題,變數太多。

同時如果我們沒有足夠的數據集(訓練集)去約束這個變數過多的模型,那麼就會發生過擬合。

2. The reason of Overfitting

過度擬合的問題通常發生在變數(特徵)過多的時候。這種情況下訓練出的方程總是能很好的擬合訓練數據,也就是說,我們的代價函數可能非常接近於 0 或者就為 0。

但是,這樣的曲線千方百計的去擬合訓練數據,這樣會導致它無法泛化到新的數據樣本中,以至於無法預測新樣本價格。在這裡,術語"泛化"指的是一個假設模型能夠應用到新樣本的能力。新樣本數據是指沒有出現在訓練集中的數據。

之前,我們看到了線性回歸情況下的過擬合。類似的情況也適用於邏輯回歸。

3. handle Overfitting

過多的變數(特徵),同時只有非常少的訓練數據,會導致出現過度擬合的問題。因此為了解決過度擬合,有以下兩個辦法。

方法一:盡量減少選取變數的數量

具體而言,我們可以人工檢查每一項變數,並以此來確定哪些變數更為重要,然後,保留那些更為重要的特徵變數。至於,哪些變數應該捨棄,我們以後在討論,這會涉及到模型選擇演算法,這種演算法是可以自動選擇採用哪些特徵變數,自動捨棄不需要的變數。這類做法非常有效,但是其缺點是當你捨棄一部分特徵變數時,你也捨棄了問題中的一些信息。例如,也許所有的特徵變數對於預測房價都是有用的,我們實際上並不想捨棄一些信息或者說捨棄這些特徵變數。

方法二:正則化

正則化中我們將保留所有的特徵變數,但是會減小特徵變數的數量級(參數數值的大小θ(j))。

這個方法非常有效,當我們有很多特徵變數時,其中每一個變數都能對預測產生一點影響。正如我們在房價預測的例子中看到的那樣,我們可以有很多特徵變數,其中每一個變數都是有用的,因此我們不希望把它們刪掉,這就導致了正則化概念的發生。

接下來我們會討論怎樣應用正則化和什麼叫做正則化均值,然後將開始討論怎樣使用正則化來使學習演算法正常工作,並避免過擬合。

2. Cost Function

1. penalize

在前面的介紹中,我們看到了如果用一個二次函數來擬合這些數據,那麼它給了我們一個對數據很好的擬合。然而,如果我們用一個更高次的多項式去擬合,最終我們可能會得到一個曲線,它能很好地擬合訓練集,但卻並不是一個好的結果,因為它過度擬合了數據,因此,一般性並不是很好。

讓我們考慮下面的假設,我們想要加上懲罰項,從而使參數 θ3 和 θ4 足夠的小。

這裡我的意思就是,上圖的式子是我們的優化目標,也就是說我們需要盡量減少代價函數的均方誤差。

對於這個函數我們對它添加一些項,加上 1000 乘以 θ3 的平方,再加上 1000 乘以 θ4 的平方,

1000 只是我隨便寫的某個較大的數字而已。現在,如果我們要最小化這個函數,那麼為了最小化這個新的代價函數,我們要讓 θ3 和 θ4 儘可能小。因為,如果你在原有代價函數的基礎上加上 1000 乘以 θ3 這一項 ,那麼這個新的代價函數將變得很大,所以,當我們最小化這個新的代價函數時, 我們將使 θ3 的值接近於 0,同樣 θ4 的值也接近於 0,就像我們忽略了這兩個值一樣。如果我們做到這一點( θ3 和 θ4 接近 0 ),那麼我們將得到一個近似的二次函數。

因此,我們最終恰當地擬合了數據,我們所使用的正是二次函數加上一些非常小,貢獻很小項(因為這些項的 θ3、 θ4 非常接近於0)。顯然,這是一個更好的假設。

2. regularization

更一般地,這裡給出了正規化背後的思路。這種思路就是,如果我們的參數值對應一個較小值的話(參數值比較小),那麼往往我們會得到一個形式更簡單的假設。

在我們上面的例子中,我們懲罰的只是 θ3 和 θ4 ,使這兩個值均接近於零,從而我們得到了一個更簡單的假設,實際上這個假設大抵上是一個二次函數。

但更一般地說,如果我們像懲罰 θ3 和 θ4 這樣懲罰其它參數,那麼我們往往可以得到一個相對較為簡單的假設。

實際上,這些參數的值越小,通常對應于越光滑的函數,也就是更加簡單的函數。因此 就不易發生過擬合的問題。

我知道,為什麼越小的參數對應於一個相對較為簡單的假設,對你來說現在不一定完全理解,但是在上面的例子中使 θ3 和 θ4 很小,並且這樣做能給我們一個更加簡單的假設,這個例子至少給了我們一些直觀感受。

來讓我們看看具體的例子,對於房屋價格預測我們可能有上百種特徵,與剛剛所講的多項式例子不同,我們並不知道 θ3 和 θ4 是高階多項式的項。所以,如果我們有一百個特徵,我們並不知道如何選擇關聯度更好的參數,如何縮小參數的數目等等。

因此在正則化里,我們要做的事情,就是把減小我們的代價函數(例子中是線性回歸的代價函數)所有的參數值,因為我們並不知道是哪一個或哪幾個要去縮小。

因此,我們需要修改代價函數,在這後面添加一項,就像我們在方括弧里的這項。當我們添加一個額外的正則化項的時候,我們收縮了每個參數。

順便說一下,按照慣例,我們沒有去懲罰 θ0,因此 θ0 的值是大的。這就是一個約定從 1 到 n 的求和,而不是從

0 到 n 的求和。但其實在實踐中 這隻會有非常小的差異,無論你是否包括這 θ0 這項。但是按照慣例,通常情況下我們還是只從 θ1 到 θn 進行正則化。

下面的這項就是一個正則化項

並且 λ 在這裡我們稱做正則化參數。

λ 要做的就是控制在兩個不同的目標中的平衡關係。

第一個目標就是我們想要訓練,使假設更好地擬合訓練數據。我們希望假設能夠很好的適應訓練集。

而第二個目標是我們想要保持參數值較小。(通過正則化項)

而 λ 這個正則化參數需要控制的是這兩者之間的平衡,即平衡擬合訓練的目標和保持參數值較小的目標。從而來保持假設的形式相對簡單,來避免過度的擬合。

對於我們的房屋價格預測來說,我們之前所用的非常高的高階多項式來擬合,我們將會得到一個非常彎曲和複雜的曲線函數,現在我們只需要使用正則化目標的方法,那麼你就可以得到一個更加合適的曲線,但這個曲線不是一個真正的二次函數,而是更加的流暢和簡單的一個曲線。這樣就得到了對於這個數據更好的假設。

再一次說明下,這部分內容的確有些難以明白,為什麼加上參數的影響可以具有這種效果?但如果你親自實現了正規化,你將能夠看到這種影響的最直觀的感受。

3. regularization

在正則化線性回歸中,如果正則化參數值 λ 被設定為非常大,那麼將會發生什麼呢?

我們將會非常大地懲罰參數θ1 θ2 θ3 θ4 …

也就是說,我們最終懲罰θ1 θ2 θ3 θ4 …

在一個非常大的程度,那麼我們會使所有這些參數接近於零。

如果我們這麼做,那麼就是我們的假設中相當於去掉了這些項,並且使我們只是留下了一個簡單的假設,這個假設只能表明房屋價格等於 θ0 的值,那就是類似於擬合了一條水平直線,對於數據來說這就是一個欠擬合 (underfitting)。這種情況下這一假設它是條失敗的直線,對於訓練集來說這只是一條平滑直線,它沒有任何趨勢,它不會去趨向大部分訓練樣本的任何值。

這句話的另一種方式來表達就是這種假設有過於強烈的"偏見" 或者過高的偏差 (bais),認為預測的價格只是等於 θ0 。對於數據來說這只是一條水平線。

因此,為了使正則化運作良好,我們應當注意一些方面,應該去選擇一個不錯的正則化參數 λ 。當我們以後講到多重選擇時我們將討論一種方法來自動選擇正則化參數 λ ,為了使用正則化,接下來我們將把這些概念應用到到線性回歸和邏輯回歸中去,那麼我們就可以讓他們避免過度擬合了。

3. Regularized Linear Regression

之前我們已經介紹過,嶺回歸的代價函數如下:

對於線性回歸(的求解),我們之前運用了兩種學習演算法,一種基於梯度下降,一種基於正規方程。

1.gradient descent

2.normal equation

4. non-invertibility

不可逆過程

現在考慮 M(即樣本量), 比 N(即特徵的數量)小或等於N。

通過之前的博文,我們知道如果你只有較少的樣本,導致特徵數量大於樣本數量,那麼矩陣 XTX 將是不可逆矩陣或奇異(singluar)矩陣,或者用另一種說法是這個矩陣是退化(degenerate)的,那麼我們就沒有辦法使用正規方程來求出 θ 。

幸運的是,正規化也為我們解決了這個問題,具體的說只要正則參數是嚴格大於零,實際上,可以證明如下矩陣:

將是可逆的。因此,使用正則還可以照顧任何 XTX 不可逆的問題。 所以,你現在知道如何實現嶺回歸,利用它,你就可以避免過度擬合,即使你在一個相對較小的訓練集里有很多特徵。這應該可以讓你在很多問題上更好的運用線性回歸。

在接下來的視頻中,我們將把這種正則化的想法應用到 Logistic 回歸,這樣我們就可以讓 logistic 回歸也避免過度擬合,從而表現的更好。

4. Regularized Logistic Regression

Regularized

Logistic Regression 實際上與 Regularized Linear Regression 是十分相似的。

同樣使用梯度下降:

如果在高級優化演算法中,使用正則化技術的話,那麼對於這類演算法我們需要自己定義costFunction。

For those methods what we needed to do was to define the

function that"s called the cost function.

這個我們自定義的 costFunction 的輸入為向量 θ ,返回值有兩項,分別是代價函數 jVal 以及 梯度gradient。

總之我們需要的就是這個自定義函數costFunction,針對Octave而言,我們可以將這個函數作為參數傳入到 fminunc 系統函數中(fminunc 用來求函數的最小值,將@costFunction作為參數代進去,注意 @costFunction 類似於C語言中的函數指針),fminunc返回的是函數 costFunction 在無約束條件下的最小值,即我們提供的代價函數 jVal 的最小值,當然也會返迴向量 θ 的解。

上述方法顯然對正則化邏輯回歸是適用的。


最簡單的解釋就是加了先驗。在數據少的時候,先驗知識可以防止過擬合。

舉2個例子:

1. 拋硬幣,推斷正面朝上的概率。如果只能拋5次,很可能5次全正面朝上,這樣你就得出錯誤的結論:正面朝上的概率是1--------過擬合!如果你在模型里加正面朝上概率是0.5的先驗,結果就不會那麼離譜。這其實就是正則。

2. 最小二乘回歸問題:加2範數正則等價於加了高斯分布的先驗,加1範數正則相當於加拉普拉斯分布先驗。

----------------------

ling wei

求解釋這兩個「等價」

拿Lasso(1範數正則)舉例

w^star = argmin_w | y - X w |_2^2 + lambda |w |_1.

其實就是如下概率模型的最大後驗。

y = X w + epsilon,

epsilon sim N(0, sigma^2),

w_i sim DoubleExponential(lambda)

如果不對w加拉普拉斯分布的先驗,最大後驗得到的是

w^star = argmin_w | y - X w |_2^2

其實正則項就是對w的先驗分布


數學原理我不細說,google能得到一大坨解釋,以及其他各位牛人也都回答了,奧坎姆剃刀這類概念我也不說,相信題主早就知道。我想你就差一個俗氣的解釋,那麼我來幾個俗氣的解釋。

解釋之前,先說明這樣做的目的:如果一個模型我們只打算對現有數據用一次就不再用了,那麼正則化沒必要了,因為我們沒打算在將來他還有用,正則化的目的是為了讓模型的生命更長久,把它扔到現實的數據海洋中活得好,活得久。

俗氣的解釋1:

讓模型參數不要在優化的方向上縱慾過度。《紅樓夢》里,賈瑞喜歡王熙鳳得了相思病,病榻中得到一枚風月寶鑒,可以進入和心目中的女神XXOO,它腦子裡的模型目標函數就是「最大化的爽」,所以他就反覆去擬合這個目標,多次XXOO,於是人掛掉了,如果給他加一個正則化,讓它爽,又要控制爽的頻率,那麼他可以爽得更久。

俗氣的解釋2:

假如馬化騰心中的商業模型優化目標是讓騰訊發展得更好,他的模型只有一個特徵,就是張小龍,根據他的目標以及已有樣本,它應該給張小龍賦予更大的權重,就可以一直讓模型的表現朝這個目標前進,但是,突然有一天馬化騰意識到:這樣下去不行啊,他的權重大得沒邊的話,根本不可持續啊,他要是走了,他要是取代我了。於是馬化騰就需要在優化這個目標的時候給這個唯一的特徵加一個正則化參數,讓權重不要過大,從而使得整個模型能夠既朝著設定目標走,又不至於無法持續。

俗氣的解釋3:

我們這群技術男在公司里,如果模型目標是提高自身能力並最終能夠在公司有一席之地,理想的優化方法是提高各種牛逼演算法,各種高大上的計算平台的熟悉程度,盡量少開無謂的會議,少接領導扯淡的需求,但是如果只是這些的話,很可能在這個公司呆不太久,因為太關注自己的特徵權重了,那麼如果這個公司其實非常適合提升自己的能力,那麼要能在這裡呆久點,就得適當限制自己這些特徵的權重絕對值,不要那麼絕對堅持用到牛逼演算法,偶爾也處理處理領導的扯淡需求,平衡一下,你的模型才能泛化得更廣。

最後,我還是正本清源一下,正經再簡單解釋一下正則化,以下內容來自PRML前三章,具體頁數記不清了。

上圖中的模型是線性回歸,有兩個特徵,要優化的參數分別是w1和w2,左圖的正則化是l2,右圖是l1。藍色線就是優化過程中遇到的等高線,一圈代表一個目標函數值,圓心就是樣本觀測值(假設一個樣本),半徑就是誤差值,受限條件就是紅色邊界(就是正則化那部分),二者相交處,才是最優參數。可見右邊的最優參數只可能在坐標軸上,所以就會出現0權重參數,使得模型稀疏。這個圖告訴我們,如果你太絕對相信那個目標了,沉迷其中,那些還沒遇到的樣本一來,你拔不出來就掛掉了。

最後, regularize這個詞更多的意思是「使系統化」,「使體系化」,也就是說不要走極端,要建立和諧社會,科學發展觀。

==================================

再補充一個角度:

正則化其實就是對模型的參數設定一個先驗,這是貝葉斯學派的觀點,不過我覺得也可以一種理解。

L1正則是laplace先驗,l2是高斯先驗,分別由參數sigma確定。

求不要追究sigma是不是也有先驗,那一路追究下去可以天荒地老。


看一下Ng Andrew的Regularization這一節,就應該基本清楚了。

URL:Coursera.org


過擬合的時候,擬合函數的係數往往非常大,而正則化是通過約束參數的範數使其不要太大,所以可以在一定程度上減少過擬合情況。

2013.12.3 補充:

說說為什麼過擬合的時候係數會很大。

如下圖所示,過擬合,就是擬合函數需要顧忌每一個點,最終形成的擬合函數波動很大。在某些很小的區間里,函數值的變化很劇烈。這就意味著函數在某些小區間里的導數值(絕對值)非常大,由於自變數值可大可小,所以只有係數足夠大,才能保證導數值很大。


這個問題要說清楚還是需要花點功夫的,因為模糊的解釋其實更讓人云里霧裡的。我對其他答主的答案做一些補充和說明,希望可以將這個問題說的更清楚一點。

1.傳統的機器學習中的bias-variance trade-off的解釋

考慮二值分類問題。

Xin R^k是特徵集合,Yin left{ 0 ,1 
ight} PX	imes Y上的概率分布,記H是所有的X
ightarrow Y的可測函數的集合。

R^ast =arginf R(h)hin H是所有分類器中分類性能最好的一個。

R(h)=int_{X	imes Y}1_{ h(x
e y) } dxdy稱分類器h泛化誤差

這裡做一點解釋,P是真實的數據生成機制,可測函數只是一個技術性條件非數學系的可以無視,泛化誤差代表分類器的預測能力,泛化誤差越小越好。

我們希望找到一個分類函數使得泛化誤差最小。

L=left{ f:X
ightarrow Y
ight} 中所有的線性函數。

l^ast 是所有線性分類函數里泛化誤差最小的

對於任意線性分類函數f它的泛化誤差有如下分解

R(f)-R(R^ast )=R(f)-R(l^ast )+R(l^ast )-R(R^ast )

第一部分稱模型的variance,反映的是演算法性能的優劣,在線性模型里就是反應最小二乘估計量或者極大似然估計量的好壞。

第二部分稱模型的bias,反映的是模型本身的優劣,即線性模型本身作為分類函數的好壞。

這樣就很清楚了,若擴大我們搜索的分類函數的範圍,bias這一部分會減小,但一般說來我們搜索到l^ast 可能性會下降,這樣就增大了variance。所以在搜索範圍上我們需要做一種權衡,這種權衡就是bias-variance trade-off。正則化使我們減少搜索範圍,這樣variance的部分會減小,bias的部分又不會增大太快。這就是為什麼正則化有可能會改善我們泛化誤差。這是一個非常一般的框架。

2.Stein『s Pheonomenon

這是高維統計學裡最重要的發現之一。當維數大於等於3時

x_{i} sim N(	heta ,sigma ^2I_{d} )dgeq 3則用均值估計	heta 居然不是最好的估計量。

E(ar{x} -	heta )^2geq E(	heta _{ JS} -	heta )^2 對於	heta 取任何值都成立。

換句話說用Stein估計量去估計均值會比極大似然估計量要好。這個估計量看起來很複雜,大家先不用管他。Stein估計量有一種Shrinkage(數據收縮)的現象。這種Shrinkage導致的結果就是估計量的方差減小。雖然這個估計量是有偏的,但是由於方差減小可以補償估計量的偏差。所以導致這個估計量比極大似然估計量要好。

3.Bayesian解釋

X_ {i} sim N(	heta ,sigma ^2I_{d} )	heta sim N(0,	au ^2I_{ d} )

則貝葉斯估計是

hat{	heta } =(1-frac{sigma ^2}{sigma ^2+	au ^2} )ar{X}

注意到這裡也出現了Shrinkage的現象。正則化可以解釋為給了一個先驗概率,在有先驗概率的時候估計當然應該考慮到先驗概率,在這裡自然就是在先驗概率均值0和觀察均值ar{X} 之間取平均。換一種角度看就是向估計量向原點壓縮了。這種收縮導致了在Bayesian的框架下,Bayes估計量比極大思然估計量要好。這正是正則化從Bayes的角度看為什麼會改善泛化誤差。

最後我想說的是Stein Pheonomenon是理解這一切的核心。短短的一個回答里不可能把這個現象說的很透徹,但如果用一句話總結一下的話,正則化導致估計量的Shrinkage,Shrinkage導致variance減小,如果variance的減小可以補償bias則正則化可以改善泛化誤差。


正則化,也叫Regulization,機器學習中經常涉及的名詞概念,高大上唬人很給力,但是大多數人並不清楚這是幹嘛的。因為在大多數的機器學習應用中,正則化這個概念有點兒雞肋,我們也經常忽略它,不過對於那些進階的機器學習玩兒家,這個概念還是蠻重要的,不然人家笑你不專業。

好啦廢話不多說,進入正題。我也是看了一些技術貼現學現賣才了解正則化是咋回事,在學習了解的過程中,發現正則化這個概念一般來源於對於模型的Underfitting和Overfitting的討論。我們在機器學習中,根本目的是預測,已知若干個輸入屬性x1,x2,x3…,然後輸出一個決策屬性y。(當然輸出的決策屬性也可以是多個,這不重要,對於Machine Learning來說,一個和多個output不太matter。)我們進行機器學習(數據訓練模型)的根本目的是找到那些輸入屬性對應的Parameters,然後就可以利用這些Parameters進行預測分析了。

一般來說,我們拿來的數據的屬性不太多,所以我們打開SPSS把這些屬性全扔進去回歸就好了,得到那些Parameters,簡單粗暴。那為什麼我們分析數據所用到的屬性不太多呢?屬性不多主要有兩種情況:

第一種情況:做過科研的小夥伴大概了解,收數據是最耗時耗力的了,所以想多收點兒數據的屬性上來本身就很難,所以基本上手上就那麼些個數據,所以也不多想,就這些數據做就好了。(這種情況呢,從學術的角度上,屬於投機行為,暫且就不說了哈哈,我們還是走常規路線,聊點正經的…)

第二種情況:我們對於事物基本上有一個預判,大概知道哪些屬性會對某個事物的預測有影響。例如我們想預測房價水平,我們會考慮,城市級別,人口因素,房子的朝向等等屬性,我們不太會選擇屬性例如該城市的高考入學比例這種屬性。

所以呢,我們要聊聊的就是第二種情況,模型的預判。對於模型預判的問題,通常要考慮兩個主要的具體問題:第一,我們選什麼形式的模型: 線性?非線性?一次還是高次?還是指數形式?第二,我們選擇哪些參數回歸:選擇人口因素?還是選擇高考入學比例? 我相信這兩個問題肯定有一些小夥伴注意到過(不一定解決過,但至少曾經注意到)。

所以,正常來講,建立模型要兩步,1)對模型進行預判,設定一些基本假設。2)訓練數據獲得參數。我們往往只關注第二步,忽略第一步,而用於解決第一步問題的概念,就是今天的主題,正則化。

現在插播一段基於學術研究方法的一些題外話,有助於對正則化進行深入理解:一般在進行學術研究的方法上,有兩個基本的套路,所謂社會科學的解決問題的套路以及搞計算機那幫人的機器學習套路。社會科學解決問題的套路是基於已有的理論,去選擇合適的模型基本假設,解決模型的預判問題。已有的理論就是例如某某人提到過這樣的東西。比如研究房價問題,什麼影響房價,我們會說,哎我選擇這個屬性,是因為任志強說的有影響,我就這樣選了…(提到這裡,想拍磚的先忍住)。
而機器學習選擇模型的方式,則不基於任何人的理論,不對客觀事物的預測分析做過多的人為假設,讓計算機自己去選擇合適的模型,也叫Data-Driven的解決問題思路。

所以,這就是為什麼在機器學習的領域,我們經常會聽到正則化這個概念,因為正則化就是機器用客觀的指標,自動地,沒有人為主觀偏見干擾地去選擇基本模型形式的過程。當然,絕對的沒有人為主觀假設也是不可能的,但是我們可以盡量少地對模型進行假設,讓大部分的模型的形式,讓計算機來決定,而不是我們主觀地確定。

現在再來看,Overfitting和Underfitting的事兒,具體咋回事兒,對Machine Learning有一定了解的小夥伴基本上都知道,不太廢話,先上張經典圖,回顧一下。

對於這張圖,我們基本上說,左邊是Underfitting,中間是Just okay,右邊是Overfitting。模型的參數越少,形式越單調,則我們對於模型的主觀假設就越少,我們就沒怎麼對於這個模型中加入主觀的偏見;而模型的參數越多,形式越複雜,例如右邊,加入了高次項好幾個,則我們對於模型的主觀假設就越多(我們不僅覺得和x有關係,還和x平方有關係,還和x三次方有關係…你知道這麼多,你咋不上天呢…),我們對於客觀事物的主觀偏見也就越多,這就是為什麼有時候我們也管Overfitting叫Bias。

Okay,不想有主觀太多約束,那麼模型就簡單點,但是簡單的模型描述能力差,對歷史數據的擬合能力不強,你看左邊那些點都不在曲線上。我們可以把左邊的模型寫成如下形式:

即已有的線性模型加一個隨機項,來表達叉子數據點,那個隨機項就是當前模型不能解釋的部分,模型越簡單,這個隨機項的方差就越大,所以通常也把Unerfitting的現象叫做Variance。

Underfitting影響了模型對歷史數據的解釋能力,而Overfitting則增加了對未知數據預測失效的風險,我們要在這兩個問題上進行一個Balance來選擇合適的模型,不能太複雜也不能太簡單,模型的形式和複雜度要正合適,如何讓它合適,就是用正則化來進行有效的模型調整。

接下來,就要講如何用正則化來調整模型的形式,讓其形式和複雜度剛剛好能Balance Overfitting as well as Underfitting。凡是Balance這個問題,歸根結底要轉化為一個優化問題中去解決。所以呢,我們還是想到進行機器學習訓練中的那個Cost Function的優化問題了。

現在先引入我們要解決的問題:目的是做預測,我們假如總共有100個屬性,然後這些屬性都可能有高次項(假設到x的3次方),然後這些屬性是一個線性組合過程來預測最終的y。(從絕對理性的角度,這些假設也不能強加,但是人類認知世界的過程本身就無法達到絕對理性的,就像柏拉圖的「洞穴之喻」)。那麼這個模型就可以寫成如下形式:

所有要估計的參數總共有300個(暫時不考慮零次項,有經驗的小夥伴都懂的)。所以最終哪些項起作用我們不清楚,我們不能人為主觀地認為所有的二次項都沒作用刪掉,強制把參數減掉為200個,所以我們只能假設所有的項目都有所用,讓這個模型包括全部300個參數。但是如果考慮所有參數的話,這個模型就會變得超級複雜,稍微有一點干擾就不能準確預測後面的數據(專業術語說,Robustness很差)。所以我們需要對這些模型參數加上一個基於模型複雜度的懲罰項,模型越複雜,整個模型的訓練Cost Function就越大,然後去優化考慮參數懲罰項的Cost Function。例如一種修正後的Cost Function可以表達如下面形式:

這樣,在優化參數的時候,我們考慮到參數的懲罰項,因為每一個參數值在優化變大的過程中,都表示對於其對應的屬性項的主觀偏見的增加,從而增加了整個模型的預測風險。對於懲罰項前面參數λ的選擇,會影響Balance兩個目標的過程,λ越大則說明,越需要規避主觀偏見,從而模型傾向於變得簡單,更少的參數(實際上是更多參數趨向於取值為接近零的值)。

常見的正則化方式除了上面給出來的例子,還有很多,具體內容詳見WikiPedia給出的解釋:Regularization (mathematics)。

By: 微信訂閱號,數據分析技術大課堂 (頭像二維碼)


一般的監督學習,大概可以抽象成這樣的優化問題:

min loss( y - f(x) ) + Omega ( f )

f()是你要學習的model,y是監督的target. 為了更直觀的解釋,上面的regulazed的形式也可以寫成下面constrained的形式:

min loss(y - f(x)) s.t. Omega(f) &< lambda

如果是最簡單的線性回歸模型,那麼就是:

min || y - wX ||^2 s.t. ||w|| &< lambda, 這裡面 ||w|| 越大,也就說明w向量離遠點越遠,模型的複雜程度越高,方法的bias越大,variance越小,也就會造成我們常說的過擬合。而一些非線性映射,或者KNN演算法,則有著更高的模型複雜度。相反,lambda越小,方法的bias也越小,能夠更好地擬合訓練數據,但是方法的variance更大, 輸出變數於輸出變數期望的差異也更大。

從概率的角度來說,對模型的正則化項其實就是對w給出一個先驗的分布。如果正則化項和損失函數都是l_2 norm,其實就給了w一個期望是0,協方差矩陣是 delta I的先驗分布。之後計算w,就是在給定w的先驗、x和y的情況下,用最大似然估計最大化w的後驗概率,求出w的最優解。lambda越大,表示w的先驗分布的協方差越小,也就是w越穩定。其他的正則話項也可以對應其他的先驗分布,比如l_1的正則話項對應Laplace先驗。


某些正則化(不是全部,注意,不是全部)可以防止overfitting,為什麼?可以從兩種角度來解釋。從貝葉斯學派,認為是加了先驗知識(比如,L2對應高斯分布),參考PRML;如果是頻率學派,那麼可以從模型的stability角度來分析,stable models do not overfit,參考某神書。


正則化在某種意義上來講引入了參數的先驗分布,減少參數的選擇空間,放到廣義線性模型中,就是對一些基函數作了取捨(參數不至於過大,那麼對應的基函數對最終結果的貢獻也就很小,通俗來講就是不完全依賴數據集,有了自我的一些判斷與選擇)-------&>避免了過擬合。

這與最優控制的目標函數很相似:誤差+控制量的約束。學科交叉之美啊


試著從不同的角度來解答題主的問題。 (? ??_??)?

假設要擬合一個線性的模型 m{y}=m{X}m{eta}

其中m{y}m{eta} 是列向量,m{X} 是矩陣,矩陣的每一行對應一個輸入實例。把平方誤差和(residual sum of squares, RSS)作為損失函數:

RSS(m{eta}) = sum_{i=1}^{N}(y_i-m{x_i^T}m{eta})^2

寫成矩陣形式就是

RSS(m{eta}) = m{(y-Xeta)^T(y-Xeta)}

RSS(m{eta})m{eta} 求偏導,並令偏導為0,

frac{partial{RSS(m{eta})}}{partial{m{eta}}}=m{X^T(y-Xeta)}=0

可以得出最小化損失RSS(m{eta})的解:

m{eta}=m{(X^TX)^{-1}X^Ty}

然後再對損失添加正則化項(為了簡化推導就用嶺回歸吧,添加m{eta} 的平方項),下面我就直接寫成向量形式啦:

RSS(m{eta}, lambda)=m{(y-Xeta)^T(y-Xeta)} + lambdam{eta^Teta}

同樣,再對m{eta} 求偏導,並令偏導為0

frac{partial{RSS(m{eta}, lambda)}}{partial{m{eta}}}=m{-X^T(y-Xeta)+lambdaeta}=0

得出解為:

m{eta^{bridge}} = (m{X^TX} + lambdam{I})^{-1}m{X^Ty}

然後,對m{X} 進行奇異值分解(SVD):

m{X=UDV^T}

再拿訓練得到的m{eta^{bridge}} 再擬合一下訓練數據,再套用一下奇異值分解:

egin{split}m{X}m{eta^{bridge}} = m{X}(m{X^TX} + lambdam{I})^{-1}m{X^Ty}\  = m{UD}(m{D^2}+lambdam{I})^{-1}m{DU^Ty}\  = sum_{j=1}^{p}m{u_j}frac{d^2_j}{d^2_j+lambda}m{u_j^Ty}end{split}

對比一下沒有正則化項的情況:

egin{split}m{X}m{eta} = m{X}(m{X^TX})^{-1}m{X^Ty}\  = m{UU^Ty}\  = sum_{j=1}^{p}m{u_j}m{u_j^Ty}end{split}

發現什麼了嗎,正則化之後,m{Xeta^{bridge}}m{Xeta} 之間相差了一個係數frac{d_j^2}{d_j^2+lambda}

因為lambda geq 0 ,所以frac{d_j^2}{d_j^2+lambda} leq 1

這意味著加入正則化項的嶺回歸擬合的結果被縮小了frac{d_j^2}{d_j^2+lambda} 倍。那麼,這個d_j^2 的意義是什麼呢?

再對輸入作進一步假設來簡化問題。如果輸入m{X} 的均值為0,也就是對m{X} 進行預處理使得:

m{X = X^{raw} - ar{X}}

那麼,m{X} 的協方差就可以通過 m{S = X^TX/N} 計算,並且根據之前的奇異值分解m{X=UDV^T} ,有

m{X^TX=VD^2V^T}

這實際上也可以看作是m{X^TX} 的特徵分解。

所以 d_j^2 就是m{X^TX} 的第j 個特徵值。

因此係數frac{d_j^2}{d_j^2+lambda} 可以看作根據協方差矩陣的特徵值對不同成分進行收縮(個人理解為進行了一次隱式的特徵選擇),並且對特徵值小的成分收縮更為劇烈(可以理解為通過把那些方差小的成分捨棄掉了,有點類似主成分分析,把那些重要的成分留下,次要的去除掉)。除了 d_j^2 之外,lambda 也會影響收縮的程度。lambda 值越大,收縮的越劇烈(需要更大的d_j^2 來補償lambda ),最終模型複雜度越低 。附上來自《The Elements of Statistical Learning》的圖。

這樣通過正則化項,就去減小了那些沒用(次要)的特徵帶來的影響,防止過擬合。

以上推導基本上來自The Elements of Statistical Learning(p61-68)

// 本來想提供個不一樣的角度,結果太菜hold不住,快把自己繞進去了 _(:3 」∠)_


減少covariance以減少複雜度

可見 Bayesian 派的 Bayesian ocarm razor或 頻率派的可證偽性


過擬合的產生主要有四個因素:

1.數據量小,低於PAC規定的最小數據量。

2.數據噪音大,很多亂七八糟的點干擾了學習的過程,重點完全跑偏了。

3.模型任務本身很複雜,這種情況下不管怎麼搞都效果不好,或多或少會過擬合。

4.假設空間H太大,比如說從二項式、三項式甚至到1024項式都有,最後我們選擇的最優模型必然是高次項的模型,這種情況下必然過擬合。

以上4個情況就會造成過擬合,其中1可以通過增大數據集解決,2可以通過數據清洗和預處理解決,3這個東西我感覺是聽天由命的,只剩下4是我們可以做但是又比較複雜的

如果的假設空間里有二次多項式模型、三次多項式模型等等,那麼如何解決假設空間太大的問題呢

先看一下二次多項式和十次多項式的區別——

二次多項式:w_0+w_1x+w_2x^2

十次多項式:w_0+w_1x+w_2x^2+...+w_{10}x^{10}

下圖可以看出來十次項的身材很妖,雖然可以擬合訓練集全部數據,但是嚴重過擬合。我們嘗試把十次項出現的機會打壓一下。

其實只要讓後面的w係數全等於零,那麼二次多項式和十次多項式本質上是一樣的,這樣子就客觀上把假設空間縮小了,這裡就是正則化的過程。

正則化的英文是Regulazation,其詞根是 regulate也就是「監管」的意思,所以這裡我們監管好模型的參數就好。

第一種做法是:

可以加上一個約束:w_3=w_4=...=w_{10}=0,這樣子全部的十項式都變成二項式了,這個正則化太矯枉過正了,完全拋棄了高次項存在的意義。

第二種做法是:

我們退步一點,只規定某些參數為零,數量規定但是隨機選擇。sum^{10}_q[w_q=0]>8 這個約束規定了8個以上參數必須為零(可以是第一個也可以是第二個)。但是這種離散的、稀疏的參數選擇條件是NP-hard的,不具備大規模使用的能力。

第三種做法是:

在剛才那個過程上再做退步,只約束參數的總值,有sum^{10}_{q=0}w_q^2<C 。但是這種約束取決於常數C的值,如果C非常大的話實際上是沒有意義的。C具體怎麼手動選擇也是問題。

第四種做法是:

把C融合到目標函數中,原目標函數是預測值和整數值的函數,我們希望它越小越好sum[y-wx]^2 。這個時候我們把正則化時要用的參數加到目標函數中,變成sum[y-wx]^2+frac{lambda}{2}w^2 ,我們希望這個新的方程最小化。

最後我得出的這個方程非常的眼熟,其實這就是統計中的Ridge回歸。如果把正則化部分寫成二範數就有Vert wVert^2_2 ,這是不是更眼熟了……如果寫成Vert w Vert_1 ,那上面就變成Lasso回歸了。其中lambda 是自己定義的,不同的值有不同的正則化效果,太小了等於沒有作用——

以上就簡單說說,還是很不嚴謹的。

圖片參考了林軒田的Slide。


隨便說幾句.

關於正則化, 在應用數學中可以追溯到吉洪諾夫(蘇聯的大牛), 也就是L2正則. 正則最初用來求解inverse problem. 當方程ill posed的時候, 正則可以用來縮小解空間, 進而便於找到合適的解. 一個經典的例子是線性方程組方程數小於未知數的數目時候, 一般解是無窮多的. 我們可以對解增加一些約束, 比如某種範數最小, 那麼就可能大大縮小解空間, 甚至得到唯一解. 實際中, 更多的問題是ill conditioned 的, 也同樣使用正則的方法來解決.

正則反映了什麼? 正如前面所說, 正則反映了解的某些性質, 或者解的某些約束. 我們一定要加上符合真實解特性的約束, 才能得到較好的效果.

在ML中, 我們說正則化通常用來懲罰模型複雜度不能太高. 此處模型複雜度並沒有一個統一的方法來刻畫. 簡單來說, 如果模型過於複雜, 可能會對訓練樣本集的雜訊產生過度擬合, 反而把數據中真正的量化關係淹沒了. 比如大家都聽過這個典故(來自網路)----

於是費米講了一句日後很著名的話:「我記得我的朋友約翰·馮·諾依曼(John von Neumann)曾經說過,用四個參數我可以擬合出一頭大象,而用五個參數我可以讓它的鼻子擺動。」


上幾張圖,你應該就理解了(懲罰項會控制參數的大小)


正則約束可以把模型的表示規模放在損失函數中,從而限制模型的表示能力。否則得到的模型就容易出現過擬合。


建議看Ng的coursera的ML公開課中的某一lecture,講的很清楚


推薦閱讀:

想在機器學習做演算法的創新是否必須讀博士?
你所在的公司或者領域在做哪些大數據應用?
在機器學習中有哪些典型的Online演算法?
數據與數據圖表的適用規則?
計算機背景較弱的數學博士,適不適合做數據挖掘方面的演算法工程師?

TAG:數據挖掘 | 機器學習 | 統計 | 最優化 |