文章目錄
-
-
- 1. 産生過拟合的原因
- 2. 應對過拟合的方法
-
- 2.1 正則化
-
- 2.1.1 L1正則化
- 2.1.2 L2正則化
- 2.2 dropout
- 參考資料:
-
1. 産生過拟合的原因
- 模型的複雜度太高。比如:網絡太深
- 過多的特征
- 訓練疊代次數多
- 資料集太小
2. 應對過拟合的方法
一般來說有如下方法:
- 盡量減少特征的數量
- 資料集擴增
- 增加正則化參數 λ
- dropout
下面就比較難了解的正則化和 dropout 進行解釋
2.1 正則化
機器學習中幾乎都可以看到損失函數後面會添加一個額外項,常用的額外項一般有兩種,一般英文稱作 l1-norm 或 l2-norm,中文稱作 L1 正則化 和 L2 正則化,或者 L1 範數 和 L2 範數。
L1 正則化和 L2 正則化可以看做是損失函數的懲罰項。所謂『懲罰』是指對損失函數中的某些參數做一些限制。對于線性回歸模型,使用 L1 正則化的模型叫做 Lasso 回歸,使用 L2 正則化的模型叫做 Ridge 回歸(嶺回歸)。
2.1.1 L1正則化
通常帶有 L1 正則項的損失函數如下:
J = J 0 + λ ∑ i n ∣ ω i ∣ J = J_0 + λ\sum^n_i|ω_i| J=J0+λi∑n∣ωi∣
其中 J 0 J_0 J0 是原始的損失函數,加号後面一項是 L1 正則項,λ 是正則化參數,注意到:
- L1 正則項是權值的絕對值之和
我們在原始損失函數 J 0 J_0 J0 後添加 L1 正則項時,相當于對 J 0 J_0 J0 做了一個限制。令 L = α ∑ ω ∣ ω ∣ L = α\sum_ω|ω| L=α∑ω∣ω∣,則 J = J 0 + L J = J_0 + L J=J0+L,對此我們的任務變成在 L 限制下求出 J 0 J_0 J0 取最小值的解。考慮二維的情況,即隻有兩個權值 ω 1 ω^1 ω1 和 ω 2 ω^2 ω2。此時 L = ∣ ω 1 ∣ + ∣ ω 2 ∣ L = |ω^1| + |ω^2| L=∣ω1∣+∣ω2∣。對于梯度下降法,求解 J 0 J_0 J0 的過程可以畫出等值線,同時 L1 正則化的函數 L 也可以在 ω 1 ω 2 ω^1ω^2 ω1ω2的二維平面上畫出來。如下圖所示:

其中彩色的圈圈是 J 0 J_0 J0 的等值線,黑色四邊形是 L 函數圖形。
在圖中,當 J 0 J_0 J0 等值線與 L 圖形首次相交的地方就是最優解。上圖中 J 0 J_0 J0 與 L 的一個頂點處相交,這個頂點就是最優解,值為 ( ω 1 , ω 2 ) = ( 0 , ω ) (ω^1, ω^2) = (0, ω) (ω1,ω2)=(0,ω)。 J 0 J_0 J0 與這些角接觸的機率會遠大于其它部位接觸的機率(這是很直覺的想象,突出的角比直線的邊離等值線更近些),而在這些角上,會有很多權值等于 0(因為角就在坐标軸上),是以:
- L1 正則化可以産生稀疏權值矩陣,即産生一個稀疏模型,用于特征選擇。
2.1.2 L2正則化
L2 正則化,也稱為權重衰減。帶有 L2 正則項的損失函數如下:
J = J 0 + λ ∑ i n ω i 2 J = J_0 + λ\sum^n_iω_i^2 J=J0+λi∑nωi2
- L2 正則項是權值的平方和
線性回歸的損失函數為例:
J ( ω ) = 1 2 m ∑ i = 1 m ( h ω ( x ( i ) ) − y ( i ) ) 2 J(ω) = \frac{1}{2m} \sum^m_{i = 1}(h_ω(x^{(i)}) - y^{(i)}) ^ 2 J(ω)=2m1i=1∑m(hω(x(i))−y(i))2
在梯度下降算法中,需要先對損失函數求導,得到梯度。對于單個樣本,先對某個參數 ω j ω_j ωj 求導,最後得到下式:
∂ ∂ ω j J ( ω ) = 1 m ∑ i = 1 m ( h ω ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial}{\partial ω_j}J(ω) = \frac{1} {m} \sum^m_{i = 1}(h_ω(x^{(i)}) - y^{(i)})x^{(i)}_j ∂ωj∂J(ω)=m1i=1∑m(hω(x(i))−y(i))xj(i)
最後再乘以一個系數α(學習率),得到沒有添加正則項的 ω j ω_j ωj 參數更新公式為:
ω j : = ω j − α 1 m ∑ i = 1 m ( h ω ( x ( i ) ) − y ( i ) ) x j ( i ) ω_j := ω_j - α \frac{1} {m} \sum^m_{i = 1}(h_ω(x^{(i)}) - y^{(i)})x^{(i)}_j ωj:=ωj−αm1i=1∑m(hω(x(i))−y(i))xj(i)
正則項 L2 對參數 ω j ω_j ωj 求導:
∂ ∂ ω j L 2 = 2 λ ω j \frac{\partial}{\partial ω_j}L2 = 2 λ ω_j ∂ωj∂L2=2λωj
綜合 L2 正則項之後參數 ω j ω_j ωj 的更新公式為:
ω j : = ω j ( 1 − 2 λ ) − α 1 m ∑ i = 1 m ( h ω ( x ( i ) ) − y ( i ) ) x j ( i ) ω_j := ω_j(1 - 2 λ) - α \frac{1} {m} \sum^m_{i = 1}(h_ω(x^{(i)}) - y^{(i)})x^{(i)}_j ωj:=ωj(1−2λ)−αm1i=1∑m(hω(x(i))−y(i))xj(i)
其中 λ 就是正則化參數。從上式可以看到,與未添加L2正則化的疊代公式相比,每一次疊代, θ j \theta_j θj 都要先乘以一個小于1的因子,即 ( 1 − 2 λ ) (1 - 2 λ) (1−2λ),進而使得 θ j \theta_j θj 不斷減小,是以總的來看, θ θ θ 是不斷減小的。是以:
- L2 正則化可以産生參數值較小的模型,能适應不同的資料集,一定程度上防止過拟合,抗擾動能力強。
2.2 dropout
除了前面介紹的正則化方法以外,深度學習模型常常使用丢棄法(dropout)[4] 來應對過拟合問題。丢棄法有一些不同的變體。本節中提到的丢棄法特指倒置丢棄法(inverted dropout)。
描述一個單隐藏層的多層感覺機。其中輸入個數為 4,隐藏單元個數為 5,且隐藏單元 h i ( i = 1 , . . . , 5 ) h_i (i=1,...,5) hi(i=1,...,5) 的計算表達式為:
h i = φ ( x 1 ω 1 i + x 2 ω 2 i + x 3 ω 3 i + x 4 ω 4 i + b i ) h_i = φ(x_1ω_{1i} + x_2ω_{2i} + x_3ω_{3i} + x_4ω_{4i} + b_i) hi=φ(x1ω1i+x2ω2i+x3ω3i+x4ω4i+bi)
這裡 φ 是激活函數, x 1 , . . . , x 4 x_1,...,x_4 x1,...,x4 是輸入,權重參數為 ω 1 i , . . . , ω 4 i ω_{1i},...,ω_{4i} ω1i,...,ω4i ,偏差參數為 b i b_i bi。當對該隐藏層使用丢棄法時,該層的隐藏單元将有一定機率被丢棄掉。設丢棄機率為 p p p,那麼有 p p p 的機率 h i h_i hi 會被清零,有 1 − p 1-p 1−p的機率 h i h_i hi 會除以 1 − p 1-p 1−p 做拉伸。丢棄機率是丢棄法的超參數。具體來說,設随機變量 ξ i \xi_i ξi 為 0 和 1 的機率分别為 p p p 和 1 − p 1-p 1−p。使用丢棄法時我們計算新的隐藏單元
h i ′ = ξ i 1 − p h i h_i'= \frac{\xi_i}{1-p} h_i hi′=1−pξihi
- 即丢棄法不改變其輸入的期望值,而随機丢棄訓練中隐藏層的神經元,進而應對過拟合。
- 在測試模型中,我們為了拿到更加确定性的結果,一般不使用丢棄法。 在上圖中, h 2 h_2 h2 和 h 5 h_5 h5 被丢棄了,輸出層的計算無法過度依賴 h 1 i , . . . , h 5 i h_{1i},...,h_{5i} h1i,...,h5i 中的任一個,進而在訓練模型時起到正則化的作用,可以用來應對過拟合。
解決過拟合的方法:正則化、dropout
參考資料:
[1]機器學習中正則化項L1和L2的直覺了解
[2]《動手學深度學習》(PyTorch版)3.12 權重衰減
[3]資料預處理–特征選擇-L1、L2正則化
[4]Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014). Dropout: a simple way to prevent neural networks from overfitting. JMLR
[5]《動手學深度學習》(PyTorch版)3.13 丢棄法