1.4 正则化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 1.3 機器學習基礎 | 回到目錄 | 1.5 為什么正則化可以減少過擬合 |
正則化 (Regularization)
深度學習可能存在過擬合問題——高方差,有兩個解決方法,一個是正則化,另一個是準備更多的數據,這是非常可靠的方法,但你可能無法時時刻刻準備足夠多的訓練數據或者獲取更多數據的成本很高,但正則化通常有助于避免過擬合或減少你的網絡誤差。
如果你懷疑神經網絡過度擬合了數據,即存在高方差問題,那么最先想到的方法可能是正則化,另一個解決高方差的方法就是準備更多數據,這也是非常可靠的辦法,但你可能無法時時準備足夠多的訓練數據,或者,獲取更多數據的成本很高,但正則化有助于避免過度擬合,或者減少網絡誤差,下面我們就來講講正則化的作用原理。
我們用邏輯回歸來實現這些設想,求成本函數 JJJ 的最小值,它是我們定義的成本函數,參數包含一些訓練數據和不同數據中個體預測的損失,www 和 bbb 是邏輯回歸的兩個參數,www 是一個多維度參數矢量,bbb 是一個實數。在邏輯回歸函數中加入正則化,只需添加參數 λλλ ,也就是正則化參數,一會兒再詳細講。
λ2m\frac{λ}{2m}2mλ? 乘以 www 范數的平方,www 歐幾里德范數的平方等于 wjw_jwj? (jjj 值從1到 nxn_xnx? )平方的和,也可表示為 wTww^TwwTw,也就是向量參數 www 的歐幾里德范數(2范數)的平方,此方法稱為 L2L2L2 正則化。因為這里用了歐幾里德法線,被稱為向量參數 www 的 L2L2L2 范數。
為什么只正則化參數 www ?為什么不再加上參數 bbb 呢?你可以這么做,只是我習慣省略不寫,因為 www 通常是一個高維參數矢量,已經可以表達高偏差問題, www 可能包含有很多參數,我們不可能擬合所有參數,而 bbb 只是單個數字,所以 www 幾乎涵蓋所有參數,而不是 bbb ,如果加了參數 bbb ,其實也沒太大影響,因為 bbb 只是眾多參數中的一個,所以我通常省略不計,如果你想加上這個參數,完全沒問題。
L2L2L2 正則化是最常見的正則化類型,你們可能聽說過 L1L1L1 正則化, L1L1L1 正則化,加的不是 L2L2L2 范數,而是正則項 λm\frac{\lambda}{m}mλ? 乘以 ∑j=1nx∣w∣\sum_{j=1}^{n_x}|w|∑j=1nx??∣w∣ , ∑j=1nx∣w∣\sum_{j=1}^{n_x}|w|∑j=1nx??∣w∣ 也被稱為參數 www 向量的 L1L1L1 范數,無論分母是 mmm 還是 2m2m2m ,它都是一個比例常量。
如果用的是 L1L1L1 正則化, www 最終會是稀疏的,也就是說 www 向量中有很多0,有人說這樣有利于壓縮模型,因為集合中參數均為0,存儲模型所占用的內存更少。實際上,雖然 L1L1L1 正則化使模型變得稀疏,卻沒有降低太多存儲內存,所以我認為這并不是 L1L1L1 正則化的目的,至少不是為了壓縮模型,人們在訓練網絡時,越來越傾向于使用 L2L2L2 正則化。
我們來看最后一個細節, λ\lambdaλ 是正則化參數,我們通常使用驗證集或交叉驗證集來配置這個參數,嘗試各種各樣的數據,尋找最好的參數,我們要考慮訓練集之間的權衡,把參數設置為較小值,這樣可以避免過擬合,所以λ是另外一個需要調整的超級參數,順便說一下,為了方便寫代碼,在Python編程語言中, λ\lambdaλ 是一個保留字段,編寫代碼時,我們刪掉 α\alphaα ,寫成 lambdlambdlambd ,以免與Python中的保留字段沖突,這就是在邏輯回歸函數中實現 L2L2L2 正則化的過程,如何在神經網絡中實現 L2L2L2 正則化呢?
神經網絡含有一個成本函數,該函數包含 w[1]w^{[1]}w[1] , b[1]b^{[1]}b[1] 到 w[l]w^{[l]}w[l] , b[l]b^{[l]}b[l] 所有參數,字母 LLL 是神經網絡所含的層數,因此成本函數等于 mmm 個訓練樣本損失函數的總和乘以 1m\frac 1mm1? ,正則項為 λ2m∑1L∣w[l]∣2\frac {\lambda}{2m}\sum_1^L|w^{[l]}|^22mλ?∑1L?∣w[l]∣2 ,我們稱為 ∣∣w[l]∣∣2||w^{[l]}||^2∣∣w[l]∣∣2范數平方,這個矩陣范數 ∣∣w[l]∣∣2||w^{[l]}||^2∣∣w[l]∣∣2 (即平方范數),被定義為矩陣中所有元素的平方求和,
我們看下求和公式的具體參數,第一個求和符號其值 iii 從1到 n[l?1]n^{[l-1]}n[l?1] ,第二個其 JJJ 值從1到 n[l]n^{[l]}n[l] ,因為 www 是一個 n[l]?n[l?1]n^{[l]} * n^{[l-1]}n[l]?n[l?1] 的多維矩陣, n[l]n^{[l]}n[l] 表示 lll 層單元的數量,表示第層隱藏單元的數量。
該矩陣范數被稱作“弗羅貝尼烏斯范數”,用下標 FFF 標注”,鑒于線性代數中一些神秘晦澀的原因,我們不稱之為“矩陣 L2L2L2 范數”,而稱它為“弗羅貝尼烏斯范數 (Frobenius norm)”,矩陣 L2L2L2 范數聽起來更自然,但鑒于一些大家無須知道的特殊原因,按照慣例,我們稱之為“弗羅貝尼烏斯范數”,它表示一個矩陣中所有元素的平方和。
該如何使用該范數實現梯度下降呢?
用backprop計算出 dwdwdw 的值,backprop會給出 JJJ 對 www ?的偏導數,實際上是 w[l]w^{[l]}w[l] ?,把 w[l]w^{[l]}w[l] 替換為? w[l]w^{[l]}w[l] 減去學習率乘以? dwdwdw 。
這就是之前我們額外增加的正則化項,既然已經增加了這個正則項,現在我們要做的就是給 dwdwdw 加上這一項 λmw[l]\frac {\lambda}{m}w^{[l]}mλ?w[l] ,然后計算這個更新項,使用新定義的 dw[l]dw^{[l]}dw[l] ,它的定義含有相關參數代價函數導數和,以及最后添加的額外正則項,這也是 L2L2L2 正則化有時被稱為“權重衰減”的原因。
我們用的 dw[l]dw^{[l]}dw[l] 定義替換此處的 dw[l]dw^{[l]}dw[l] ,可以看到, w[l]w^{[l]}w[l] 的定義被更新為 w[l]w^{[l]}w[l] 減去學習率 α\alphaα 乘以backprop 再加上 λmw[l]\frac{\lambda}{m}w^{[l]}mλ?w[l] 。
該正則項說明,不論 w[l]w^{[l]}w[l] 是什么,我們都試圖讓它變得更小,實際上,相當于我們給矩陣 WWW 乘以 (1?αλm)(1-\alpha \frac \lambda m)(1?αmλ?) 倍的權重,矩陣 www 減去 αλm\alpha \frac \lambda mαmλ? 倍的它,也就是用這個系數 (1?αλm)(1-\alpha \frac \lambda m)(1?αmλ?) 乘以矩陣 www ,該系數小于1,因此 L2L2L2 范數正則化也被稱為“權重衰減”,因為它就像一般的梯度下降, www 被更新為少了 α\alphaα 乘以backprop輸出的最初梯度值,同時 www 也乘以了這個系數,這個系數小于1,因此 L2L2L2 正則化也被稱為“權重衰減”。
我不打算這么叫它,之所以叫它“權重衰減”是因為這兩項相等,權重指標乘以了一個小于1的系數。
以上就是在神經網絡中應用 L2L2L2 正則化的過程,有人會問我,為什么正則化可以預防過擬合,我們放在下節課講,同時直觀感受一下正則化是如何預防過擬合的。
課程PPT
| 1.3 機器學習基礎 | 回到目錄 | 1.5 為什么正則化可以減少過擬合 |
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的1.4 正则化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.3 机器学习基础-深度学习第二课《改
- 下一篇: 1.5 为什么正则化有利于预防过拟合-深