[DeeplearningAI筆記]第二章1.4-1.8正則化與Dropout
覺得有用的話,歡迎一起討論相互學習~
1.4 正則化(regularization)
- 如果你的神經網絡出現了過擬合(訓練集與驗證集得到的結果方差較大),最先想到的方法就是正則化(regularization).另一個解決高方差的方法就是准備更多的數據,這也是非常可靠的方法.
正則化公式簡析
- L1范數:向量各個元素絕對值之和
- L2范數:向量各個元素的平方求和然后求平方根
- Lp范數:向量各個元素絕對值的p次方求和然后求1/p次方
- L∞范數:向量各個元素求絕對值,最大那個元素的絕對值
L2正則化:你需要做的就是在cost function 后面加上正則化參數.
\[J(W, b)=\frac{1}{m}\sum^{m}_{i=1}{L(\hat{y}^{(i)},y^{i})}+\frac{\lambda}{2m}(\parallel w\parallel _2)^{2} \]
- \(w\)的歐幾里得范數的平方等於\(W_{j}\) (j值從1到nx)平方的和.
\[\mit{L2} regulazation =(\parallel w \parallel_2)^{2}=\sum^{n_{x}}_{j=1}{W_j}^{2}=w^{T}w \]
- 這里后面也可以加上b的正則化參數,即\(\frac{\lambda}{2m}b^{2}\).但是Ng常常勝省略不寫,因為W已經是一個高維參數矢量,已經可以表達高偏差問題.
- L1正則化: L2正則化公式是最常見的正則化公式,你也許聽說過L1正則化公式,正則化項 為\(\frac{\lambda}{2m}\sum^{n_{x}}_{j=1}|w|=\frac{\lambda}{2m}\parallel w \parallel_1\)
- 現在人們越來越趨向於使用L2正則化來正則化數據.
- 正則化參數\(\lambda\):\(\lambda\)是另外一個需要調整的超參數.因為python中lambda是python語言的保留字段,所以我們使用lambd來命名和表示這個超參數而防止和保留字段重名.
- 使用L2正則化的關鍵原因是因為在BP算法中權值W的每次梯度下降會額外減去一個\((1-\frac{\alpha\lambda}{m})W\)的值稱之為"權重衰減"即"Weight decay"
1.5 為什么正則化可以減少過擬合
L2正則化
\[J(W, b)=\frac{1}{m}\sum^{m}_{i=1}{L(\hat{y}^{(i)},y^{i})}+\frac{\lambda}{2m}(\parallel w\parallel _2)^{2} \]
- 直觀上理解,當\(\lambda\)設置的很大時,足夠大,權重矩陣w被設置為接近於0的值,因為正則項十分大,則前一項的影響被降低到很小.
- 直觀上理解就是把多隱藏層單元的權重設為0,於是基本上消除了這些隱藏單元的許多影響(如圖中所表示的樣子)
- 此時這個被大大簡化了的神經網絡會變成一個很小的網絡,小到如同一個邏輯回歸單元,但是深度卻很大,它會使\(\lambda\)高方差的狀態,如同最右邊的圖接近於左圖的高偏差狀態,但是\(\lambda\)會存在一個中間值,於是會有接近於"Just right"的狀態.
- 我們直覺上認為大量隱藏單元被完全消除了,其實不然,實際上是該神經單元的所有隱藏單元依然存在,只是它們的影響變得更小.

從權值改變和激活函數理解

- 如果正則化參數\(\lambda\)變大,激活函數的參數z會相對小,因為代價函數的參數變大了,如果w變的很小,z也會變的很小.實際上,z的取值范圍很小,這個激活函數(此處為tanh)在此處相對呈線性,每層幾乎都呈線性,整個網絡趨向於一個線性網絡,即使是一個非常深的網絡,也會因具有線性激活函數的特征使得整個神經網絡會計算離神經網絡近的值.這個線性函數十分簡單,並不是一個極復雜的高度非線性函數,所以不會發生過擬合.
1.6 Dropout正則化
假設你訓練的網絡如圖所示

- Dropout:假設你在訓練如圖的神經網絡,如果它存在過擬合,Dropout會遍歷網絡的每一層,並設置消除神經網絡中節點的概率.假設每一層的每個節點都以拋硬幣的方式設置概率.每個節點得以保留和消除的概率都是0.5.設置完節點概率,我們會消除一些節點,然后刪除從該節點進出的連線.最后得到一個節點更少,規模更小的網絡.然后用backprop方法進行訓練.
- 這是網絡結構經過Dropout函數精簡后的結果:

- 對於每個訓練節點,我們都會采用一個精簡后的神經網絡訓練它.
1.7 理解Dropout(隨機失活)
- 直觀理解Dropout1:
每次迭代后神經網絡都會變得更小,看起來更小的神經網絡和L2正則化的效果一樣. - 直觀理解Dropout2:

PS:每層的keep_prob值都可以設置為不同的值,對於神經元數極少的網絡層我們可以將keep_prob設置為1即保存所有神經元節點不使用Dropout方法,對於神經元數較多,可能產生過擬合含有諸多參數的網絡層我們可以將keep_prob設置為較小的數值表明保存較少的神經元節點.
應用
-
在計算機視覺中需要輸入很多的圖像像素數據,所以有些計算機視覺研究人員非常喜歡使用Dropout方法.幾乎是一種默認的選擇.但是請牢記一點Dropout是一種正則化方法,它有助於防止過擬合,因此除非算法過擬合,不然我是不會使用Dropout方法的,所以它在其他領域應用的比較少
-
主要存在於計算機視覺領域,因為我們通常沒有足夠多的數據,所以一直存在過擬合.這就是有些計算視覺研究人員如此鍾情dropout函數的原因.
dropout正則化方法缺點
- dropout函數一大缺點就是代價函數J不再被明確定義,每次迭代,都會移除一些節點,如果再三復查J函數,實際上我們是很難對其進行復查的.明確定義的代價函數J每次迭代后都會下降.因為使用dropout方法后我們所優化的代價函數J實際上並沒有明確定義或者很難被計算,所以我們很難繪制出代價函數J的下降趨勢圖形.
1.8 其他正則化方法
方法1--擴增數據集
-
假設你正在設計一個圖片分類器,產生了過擬合問題,但是如果想使用增加訓練圖片數量的方法來防止過擬合需要的代價太大了,我們可以使用添加水平翻轉圖片,放大后剪裁圖片.這種方式正則化數據集,減少過擬合比較廉價.

-
對於光學字符識別,我們可以通多添加數字,隨意旋轉或扭曲數字來擴增數據.把這些數據添加到數據集他們仍然是數字.

方法2--early stopping
- 如圖中所示

- 紅色的線表示驗證集上的分類誤差或驗證集上的代價函數/邏輯損失/對數損失等.會發現誤差會通常先呈下降趨勢然后在某個節點開始上升.
- early stopping作用是說"神經網絡你到現在的迭代訓練中表現已經非常好了,我們停止訓練吧"
- 原理是:當你還未在神經網絡中進行太多次迭代過程的時候,參數w接近0,因為隨機初始化W值時,它的值可能都是較小的隨機值.在迭代過程和訓練過程中,w的值會越來越大,也許經過最終的迭代其值已經變得很大了.
- 所以early stopping 要做的就是在中間點停止迭代過程.得到一個w中等大小的弗羅貝尼烏斯范數.術語early stopping表示提前停止訓練神經網絡.
early stopping的缺點
- NG認為機器學習包含兩個很重要的步驟
- 選擇一個算法來優化代價函數J(梯度下降,Momentum,RMSprop,Adam)
- 優化函數后我也不想發生過擬合,也有一些工具可以解決該問題,比如正則化,擴增數據等等.
- NG認為在訓練時簡化這兩方面權衡的方法是首先只關注優化代價函數J,只需留意w和b,使得J代價函數更小即可,然后才是關注預防過擬合的問題.
- 然而early stopping這個方法沒有獨立的解決這兩個問題,為了避免過擬合而提前結束了梯度下降的過程,這樣就沒有能使J代價函數降低到最低值,J的值可能不夠小.這樣做的結果是需要同時考慮的東西會更復雜.
early stopping和L2正則化的權衡
- 對於L2正則化而言,我增加了一個超參數\(\lambda\),這樣我要不停地尋找\(\lambda\)的值使能達到效果,訓練神經網絡的計算代價會變得更高.
- early stopping 的優點是,只運行一次梯度下降,那你就可以找到w的較小值,中間值和較大值,而無需嘗試L2正則化超參數\(\lambda\)的很多值.




