1. 程式人生 > >正則化和dropout

正則化和dropout

1. 過擬合

先來說說什麼是過擬合,在Andrew Ng的ML課程中有這麼一段描述。
這裡寫圖片描述
使用一次曲線擬合房價,發現效果並不好,出現欠擬合,是high bias,訓練資料不夠充分。使用二次曲線擬合房價,剛好合適。使用高階曲線擬合,每個點都很完美,這時過擬合出現了,產生了high variance,過度訓練資料,使得泛化效能很差。用Bengio在Deep Learning中的這個圖來闡述什麼是過擬合。
這裡寫圖片描述
明顯地,隨著模型的優化,training error和generalization error都下降,但到了一定程度之後,training error還在下降,而generalization error卻上升了。
那麼有哪些方法來防止過擬合呢,機器學習中最常見的是正則化,另外神經網路中使用drop out,同時early stopping也有使用。

2. Regularization

正則化的本質是約束要優化的引數。一般形式如下,
這裡寫圖片描述
其中, 這項為懲罰項,根據懲罰項的不同形式,又分為L0,L1,L2範數。
正則化其實是對解空間的一個限制,用下面的兩個圖來說明。
這裡寫圖片描述
藍色的區域是解空間,而紅色的區域是正則化。藍色的曲線的每個環上的點對應的損失函式都相等,通過正則化使得解空間被限制在紅色區域。左圖的是L2範數,所以正則域是圓。右圖是L1範數,正則域是正方形。

1. L0範數

L0範數是指引數矩陣W中含有零元素的個數,L0範數限制了引數的個數不會過多,這也就簡化了模型,當然也就能防止過擬合。

2. L1範數

L1範數是引數矩陣W中元素的絕對值之和,L1範數相對於L0範數不同點在於,L0範數求解是NP問題,而L1範數是L0範數的最優凸近似,求解較為容易。L1常被稱為LASSO.

3. L2範數

L2範數是引數矩陣W中元素的平方之和,這使得引數矩陣中的元素更稀疏,與前兩個範數不同的是,它不會讓引數變為0,而是使得引數大部分都接近於0。L1追求稀疏化,從而丟棄了一部分特徵(引數為0),而L2範數只是使引數儘可能為0,保留了特徵。L2被稱為Rigde.

3. dropout

dropout是在神經網路裡面使用的方法,以此來防止過擬合。通過在反向傳播誤差更新權值時候隨機選擇一部分權值不更新,相當於隨機刪除一部分hidden units(不是真實刪除了,只是暫時不使用這部分units),通過這樣的方法就能防止過擬合。
這裡寫圖片描述
從概念上去理解dropout防止過擬合的原因,可以把units的個數看成是模型的複雜度,units個數越多,那麼模型越複雜,過於複雜的模型會帶來過擬合,這是我們之前從房價預測上得出的結果。那麼相反地,units的個數被我們減少了,那麼就能防止過度訓練。從另一個角度上說,每次隨機的“刪除”一些units,相當於得到了不同的網路結構,不同的units進行合作得到訓練引數,這有點類似於bagging的過程。然而最後用作預測的時候,又會使用全部的units,相當於組合了所有的模型,因此dropout過程防止了訓練中出現的引數擬合過度問題,同時還能組合訓練得到的模型,從而獲得一個更好的組合模型。

4. early stopping

對這兩種方法比較容易理解,過擬合不就是訓練過度唄,那我訓練次數少一點,在overfitting之前停止訓練就行了,這就是early stopping吧。