深度學習 —— 正則化

1、過擬合與正則化做用

 

一、先了解什麼是過擬合

瞭解什麼是過擬合問題,如下面圖片爲例,咱們可以看到有兩個類別,藍色是分類曲線模型。算法

 

  • 欠擬合:圖1分類,不能很好的將X和O很好的分類,屬於欠擬合。
  • 正擬合:圖2有兩個X被誤分類,可是大部分數據都能很好的分類,偏差在可接受範圍內,分類效果好,屬於良好的擬合模型。
  • 過擬合:圖3雖然可以所有分類正確,但分類曲線明顯過於複雜,模型學習的時候學習了過多的參數項,但其中某些參數項是無用的特徵。當咱們進行識別測試集數據時,就須要提供更多的特徵,若是測試集包含海量的數據,模型的時間複雜度可想而知。

 

二、正則化做用

模型過擬合是由於模型過於複雜,能夠經過對特徵變量係數的調整來避免過擬合,而引入正則化正是爲了實現這個目的,具體如何實現將在下一節說明。網絡

常見的正則化方法有這幾種:函數

  • 當參數是向量的時候(如logistics迴歸,參數爲$\left (\theta _{i}:\theta _{1},\theta _{2},...,\theta _{n}  \right )$),有L1正則化、L2正則化。
  • 當參數是矩陣的時候(如神經網絡的權重矩陣W),這時候用的是F-1範數正則化、F-2範數正則化,如今基本都是使用F-2範數正則化比較多。
  • 神經網絡還有Drop正則化。
  • 增長訓練集的數據量能夠避免過擬合,另外有些模型能夠用集成學習的Bagging、boost方法來進行正則化。

 


 

2、神經網絡的L一、L2正則化

 

一、矩陣的F-1範數、F-2範數

說明:這裏的F-範數指的是Frobenius範數,和logistics迴歸的L一、L2正則化的向量範數不同。學習

矩陣的F-1範數:矩陣全部元素的絕對值之和。公式爲:測試

$$\left \| W \right \|_{1}=\sum_{i,j}\left |\omega _{i,j}  \right |$$spa

矩陣的F-2範數:矩陣全部元素的平方求和後開根號。公式爲:3d

$$\left \| W \right \|_{2}=\sqrt{\sum_{i,j}\left (\omega _{i,j}  \right )^{2}}$$調試

 

二、L1正則化與L2正則化

假設神經網絡的損失函數爲J(W,b),參考邏輯迴歸的正則化,是在損失函數J(W,b)後面加一個正則化項,神經網絡DNN也是同樣的,只是變成了加F-範數,L1正則化與L2正則化以下所示:xml

$$L1: J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{1}=J(W,b)+\frac{\lambda }{m}\sum_{l\epsilon L}\sum_{i,j}\left |\omega _{i,j}  \right |$$blog

$$L2: J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{2}=J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\sqrt{\sum_{i,j}\left (\omega _{i,j}  \right )^{2}}$$

這裏m爲樣本數,l爲各個隱藏層,$\lambda$爲超參數,須要本身調試,L2中2m是爲了後面求梯度的時候能夠抵消掉常數2。

 

三、以L2正則的權重衰減防止過擬合

因爲L1正則與L2正則原理類似,並且大多數神經網絡模型使用L2正則,因此這裏以L2爲例來講明爲何能防止過擬合。

 

直觀理解:

原損失函數$J(W,b)$加上正則項$\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{2}$以後的新損失函數$J(W,b)^{'}=J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{2}$,在使用梯度降低訓練模型時,目標是要最小化新的損失函數$ J(W,b)^{'}$,咱們在訓練前先設置超參數$\lambda$,若設置較大的超參數$\lambda=0.9$,則相對於設置較小的超參數$\lambda=0.1$,咱們須要更小的權重F-2範數$\left \| W \right \|_{2}$纔可以使得咱們達到最小化$ J(W,b)^{'}$的目的。因此若是咱們使用較大的超參數$\lambda$的時候,會使得W總體變得更加的稀疏,這樣就可使得W的影響減小,從而避免了因爲模型過於複雜致使的過擬合。

 

公式推導(以平方差損失函數爲例,即$J(W,b)=\frac{1}{2m}\sum_{m}\left \| a^{L}-y \right \|_{2}^{2}$):

$$原損失函數:$$J(W,b)$$

$$原損失函數對第l層的權重矩陣W求梯度:$$\frac{J(W,b) }{\partial W^{l}}$$

$$原損失函數的W迭代公式爲:$$W^{l}=W^{l}-\alpha \frac{J(W,b) }{\partial W^{l}},其中\alpha爲學習率$$

$$新損失函數:$$J(W,b)^{'}=J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{2}$$

$$損失函數對第l層的權重矩陣W求梯度:$$\frac{J(W,b)^{'} }{\partial W^{l}}=\frac{J(W,b) }{\partial W^{l}}+\frac{\lambda }{m}W^{l}$$

$$新損失函數的W迭代公式爲:$$W^{l}=W^{l}-\alpha \frac{J(W,b) }{\partial W^{l}}-\alpha \frac{\lambda }{m}W^{l}=\left ( 1- \alpha \frac{\lambda }{m}\right )W^{l}-\alpha \frac{J(W,b) }{\partial W^{l}},其中\alpha爲學習率$$

對比原迭代公式與新迭代公式能夠發現,原迭代公式W的係數爲1,新迭代公式的係數爲$\left ( 1- \alpha \frac{\lambda }{m}\right )$,因爲$\alpha$、$\lambda$、m都是正數,因此新迭代公式在原來的基礎上使權重矩陣W進行了縮減,使得W變得更小,這就是L2正則的權重衰減,這樣可使得一些權重的值等於或更接近與0,從而減小了一些權重的影響,以極端情形來講,若是衰減後權重爲零,即該神經元的影響爲0,至關於神經元從神經網絡中去除,這樣就減小了神經元的個數,從而下降了模型的複雜度,防止了過擬合。

 

四、L1正則化與L2正則化的區別

L1 正則化項的效果是讓權值 W 往 0 靠,使網絡中的權值儘量爲 0,也就至關於減少了網絡複雜度,防止過擬合。事實上,L1 正則化能產生稀疏性,致使 W 中許多項變成零。

L2 正則化項的效果是減少權值 W。事實上,更小的權值 W,從某種意義上說,表示網絡的複雜度更低,對數據的擬合剛恰好。

 


 

3、神經網絡的Drop正則化

 

說明:所謂的Dropout指的是在用前向傳播算法和反向傳播算法訓練DNN模型時,一批數據迭代時,隨機的從全鏈接DNN網絡中去掉一部分隱藏層的神經元,下面用兩個圖來解釋:

原始的神經網絡結構:

在對訓練集中的一批數據進行訓練時,咱們隨機去掉一部分隱藏層的神經元(在訓練模型的時候一般選擇隨機去除50%的神經元,長期實踐證實效果較好),以下圖:

總結Drop:去掉的神經元只是在當前的批次數據迭代中才去除,在下一批數據迭代的時候,要把DNN模型恢復成最初的全鏈接模型,再隨機去掉部分隱藏層的神經元,接着去迭代更新W,b,每批數據迭代更新完畢後,要將殘缺的DNN模型恢復成原始的DNN模型。

注意:Drop只有在數據量大的時候纔可以使用,若數據量小可能會形成欠擬合的狀況,另外,能夠在容易形成過擬合的隱藏層使用Drop正則化。

相關文章
相關標籤/搜索