1. 程式人生 > >我的人工智慧之旅——正則化

我的人工智慧之旅——正則化

無論線性迴歸,還是邏輯迴歸,都需要對假設函式進行設定。而假設函式的設定,將影響到預測結果的準確性。因此,如何判斷假設函式是否合適,以及如何修改假設函式將變得十分重要。本文,我們將記錄假設函式的正則化。在記錄的過程當中,將涉及以下概念。

(1)過度擬合,overfitting

(2)欠擬合,underfitting

(3)正則化,regularization

(4)懲罰項(或正則化項),penalize item

以下為正文。


擬合曲線

假設函式,為N元M次方程式(N\geq 1M\geq 1)。不同的方程式,代表不同的圖形。

例如,

f(x)=1+2x,為直線;

f(x)=1+x+x^2,為拋物線;

f(x)=1+x+x^2-5x^3-x^4+x^5,為曲線;

線上性迴歸中,正是通過設定的方程式(假設函式),畫出特定形狀的曲線,將盡量多的樣本點串聯起來。而邏輯迴歸,則是使用設定的方程式(假設函式),儘量分隔不同樣本。但不論串聯還是分隔,我們將畫出的曲線,稱為擬合曲線。

我們仍以房價預估為例,來看一下線性迴歸中的擬合曲線。

從左至右,圖(1)(2)(3)(4)中,藍色的點為樣本集合。橫座標為面積,縱座標為價格。

分別選取三個的方程式作為假設函式,通過引數推算,可以獲得三條不同的曲線。

其中圖(4)中的曲線,完美的連線所有樣本點。

但經驗告訴我們,

(a)在同一地段,面積越大,房價通常越高。

(b)在同一地段,面積越大,單價越低,價格不會呈現以固定比例增長。

因此,圖(4)(2)對應的假設函式不合常理。

當有新樣本(綠色)加入時,更能進一步證實我們的推測。

相對而言,圖(3)中的假設函式較為適中。

我們將圖(4)中,對前期樣本完美擬合,但對後期樣本存在較大偏差的情況,稱為過度擬合。

對於圖(2)中,無論前期樣本,還是後期樣本,偏差都較大的情況,稱為欠擬合。

當然,邏輯迴歸中也會存在同樣的問題,如圖。

 

通過簡單的示例,我們可以瞭解到,設定合適假設函式的重要性。那麼如何設定假設函式呢?

正則化

對比上節例子中的三個假設函式,我們會發現,變數的階數越高,曲線越扭曲。換一個角度,若將高階變數看做一個新變數,也可以理解為,變數越多,曲線越扭曲。那麼,如何降低高階變數對結論的影響呢?最簡單的方式,就是移除高階變數,或多餘變數。但移除過於簡單粗暴,因為變數數量或者高階變數的減少,將會或多或少的影響結論的準確度。另一方面,移除哪個變數也是一個讓人糾結的問題。因此,我們引入正則化(regularization)的概念

正則化的核心思想是,通過在代價函式中新增懲罰項(penalize item,或正則化項),降低某一變數對預估結論的影響。

正則化後的代價函式如下

(1)線性迴歸代價函式

J(A^T)=\frac{1}{2m}\left [ \sum _{j=1}^{m}{(A^TX_j-Y_j)^2}+\lambda \sum _{i=0}^{m}{a_i^2} \right ]

(2)邏輯迴歸代價函式

J(A^T)=-\frac{1}{m}\sum _{j=1}^{m}{\left [ Y_jlog(f(X_j))+(1-Y_j)log(1-f(X_j)) \right ]}+\frac{\lambda}{2m} \sum _{j=0}^{m}{a_j^2}

其中a_i為A中的元素,\lambda為正則化引數,

\frac{1}{2m}\lambda \sum _{i=0}^{m}{a_i^2}即為懲罰項。

懲罰項的加入,可以防止假設函式的過度擬合問題。

有利也有弊。加入懲罰項,需要初始化正則引數\lambda。如果\lambda過大,將是的a_i\rightarrow 0。對於線性迴歸而言,其假設函式的對應圖形將變成一條平行於X軸的直線。對於房價預估問題,這樣的假設函式肯定欠擬合。同樣,對於其他迴歸問題,也並非是最好的預估模型。所以,\lambda的取值對於正則化是十分重要的。

線性迴歸的正則化

線上性迴歸章節中,我們提到過,使用梯度下降和正規方程的兩種方式來推算A^T。加入正則引數後,原有方法仍然有效。

\frac{\partial }{\partial a_j}J(A^T)=\frac{1}{m}\sum _{i=1}^{m}{x_i_j(f(X_i)-y_i)}+\frac{\lambda }{m}a_j\\=\frac{1}{m}\left \{\left [ \sum _{i=1}^{m}{x_i_j(f(X_i)-y_i)}\right ] +\lambda a_j \right \}

梯度下降演算法

對於梯度下降演算法而言,由於

{a_j}_{next}={a_j}-\beta \frac{\partial }{\partial a_j}J(A^T)

那麼,

{a_j}_{next}\\={a_j}-\frac{\beta }{m}\left \{\left [ \sum _{i=1}^{m}{x_i_j(f(X_i)-y_i)}\right ] +\lambda a_j \right \}\\=a_j(1-\frac{\beta \lambda }{m})-\frac{\beta }{m}\sum _{i=1}^{m}{x_i_j(f(X_i)-y_i)}

與不加正則化項的{a_j}_{next}相比,只是在a_j前多了一個引數項(1-\frac{\beta \lambda }{m})

通常來說,該引數項是一個趨近於1的值,例如0.99。原因在於,作為樣本數量的m通常都是非常巨大,學習率\beta又非常小(學習率太大將影響收斂)。從效果上來看,在正則化後,梯度下降演算法變得更加精細了。

正規方程式演算法

正規方程的核心思路是,通過使\frac{\partial }{\partial a_j}J(A^T)=0計算出a_j

那麼,加入正則項後,須使得\frac{1}{m}\left \{\left [ \sum _{i=1}^{m}{x_i_j(f(X_i)-y_i)}\right ] +\lambda a_j \right \}=0

那麼,a_j=\frac{1}{\lambda} \sum _{i=1}^{m}{x_i_j(y_i-f(X_i))}

邏輯迴歸的正則化