當一個模型過擬合的時候,該模型的方差比較大。
可以增加數據。
下面介紹的是L2正則化和DropOut正則化,以解決過擬合的問題。
詳細代碼作業:改善深層神經網絡(吳恩達) 第一週 ———— 正則化(Regularization)_01_作業
詳細介紹:吳恩達《優化深度神經網絡》課程筆記(1)– 深度學習的實用層面
下面是上述文章的簡略版
首先看一張圖:
上圖,(沒有使用正則化)可以很明顯的看出:
- 訓練集的準確率會很高。
- 但是在測試集的表現可能會不太好。
- 過擬合(高方差)
L2 regularization
在損失函數的後面,增加一部分。(相比較來說,參數很大程度上由w決定,改變b值對整體模型影響較小。所以,一般爲了簡便,就忽略對b的正則化了。)
程序的整體思路是:正向—>損失函數—>反向傳播。
由於損失函數的改變,反向傳播的過程,也要增加多出來那一部分的倒數。
即:由於加入了正則化項,梯度下降算法中的計算表達式需要做如下修改:
DropOut regularization
Dropout通過每次迭代訓練時,隨機選擇不同的神經元,相當於每次都在不同的神經網絡上進行訓練,類似機器學習中Bagging的方法(三個臭皮匠,賽過諸葛亮),能夠防止過擬合。
除此之外,還可以從權重w的角度來解釋爲什麼dropout能夠有效防止過擬合。對於某個神經元來說,某次訓練時,它的某些輸入在dropout的作用被過濾了。而在下一次訓練時,又有不同的某些輸入被過濾。經過多次訓練後,某些輸入被過濾,某些輸入被保留。這樣,該神經元就不會受某個輸入非常大的影響,影響被均勻化了。也就是說,對應的權重w不會很大。這從從效果上來說,與L2 regularization是類似的,都是對權重w進行“懲罰”,減小了w的值。
隨機刪除節點的過程(以第三層進行舉例):
- 產生和A3形狀相同的隨機數矩陣:D3=np.random.rand(A3.shape[0],A3.shape[1])
- 大於keep_prob爲1,小於keep_prob爲0:D3=D3<keep_prob
- 關閉某些節點:A3=np.multiply(A3,D3)
- 確保A3的的期望值不變:A3=A3/keep_prob
關閉的節點不用參與正向、方向傳播。
沒有關閉的節點,正向、方向做相同處理。
- dA3= np.multiply(dA3,D3)
- dA3=dA3/keep_prob
很好理解,矩陣相應的元素乘以0,想當於關閉該節點。
期望值的,我理解不了。
Other regularization methods
除了L2 regularization和dropout regularization之外,還有其它減少過擬合的方法。
一種方法是增加訓練樣本數量。但是通常成本較高,難以獲得額外的訓練樣本。但是,我們可以對已有的訓練樣本進行一些處理來“製造”出更多的樣本,稱爲data augmentation。例如圖片識別問題中,可以對已有的圖片進行水平翻轉、垂直翻轉、任意角度旋轉、縮放或擴大等等。如下圖所示,這些處理都能“製造”出新的訓練樣本。雖然這些是基於原有樣本的,但是對增大訓練樣本數量還是有很有幫助的,不需要增加額外成本,卻能起到防止過擬合的效果。