1.視頻網站:mooc慕課https://mooc.study.163.com/university/deeplearning_ai#/c
2.詳細筆記網站(中文):http://www.ai-start.com/dl2017/
3.github課件+作業+答案:https://github.com/stormstone/deeplearning.ai
1.4 正則化 Regularization
DL可能存在過擬合問題——高方差,有兩個解決方法
- 準備更多的數據。這是非常可靠的方法,但你可能無法時時刻刻準備足夠多的訓練數據或者獲取更多數據的成本很高。
- 正則化,通常有助於避免過擬合或減少你的網絡誤差。
如果你懷疑NN過度擬合了數據,即存在高方差問題,那麼最先想到的方法可能是正則化,另一個解決高方差的方法就是準備更多數據。
1.正則化的作用原理
我們用邏輯迴歸來實現這些設想。求成本函數J的最小值。
參數包含一些訓練數據和不同數據中個體預測的損失,w和b是邏輯迴歸的2個參數。
- w是一個多(n)維參數向量,
- b是一個實數
- λ,正則化參數。在邏輯迴歸函數中加入正則化,只需添加參數λ。
向量參數w 歐幾里德範數 Euclidean norm(L2範數,即)的平方,等於wj(j值從1到n)平方的和,也可以表示爲wTw,被稱爲 L2正則化。
上面介紹的內容可以參見下圖。
那麼爲什麼只正則化參數w,爲什麼不再加上參數b呢(即再加上正則化公式)?
你可以這麼做,只是通常習慣省略不寫。
因爲w通常是一個高維參數向量,已經可以表達高偏差問題,w可能包含有很多參數,我們不可能擬合所有參數。而b只是單個數字,與幾乎涵蓋了所有參數的向量w對比,如果正則化加了參數b,其實也沒太大影響,因爲b只是衆多參數中的一個,通常省略不計。
如果你想加上b,也完全沒問題。
2.L1和L2正則化
L2正則化是最常見的正則化類型。
而L1正則化加的不是L2範數,而是。
- 被稱爲L1範式,向量中各個元素絕對值之和
如果用的是L1正則化,w最終會是稀疏的,也就是說w向量中有很多0。
有人說這樣有利於壓縮模型,因爲集合中參數均爲0,存儲模型所佔用的內存更少。
實際上,雖然L1正則化使模型變得稀疏,卻沒有降低太多存儲內存,所以我認爲這並不是L1正則化的目的,至少不是爲了壓縮模型,人們在訓練網絡時,越來越傾向於使用L2正則化。
λ是正則化參數,我們通常使用驗證集或交叉驗證集來配置這個參數,嘗試各種各樣的數據,尋找最好的參數。我們要考慮訓練集()之間的權衡,把λ參數設置爲較小值,這樣可以避免過擬合,所以λ是另外一個需要調整的超參。
3.NN中實現L2正則化
如何在NN中實現L2正則化呢?
NN含有一個成本函數
- 成本函數包含了從到所有參數
- L是NN包含的層數
- 成本函數等於m個訓練樣本損失函數的總和的平均值
- W是一個 x 維矩陣,其中表示l層單元數量,表示l-1層單元的數量
稱爲範數平方,它是W矩陣中所有元素的平方求和。
上面公式中第一個求和符號其值 i 從1到,第二個其值 j 從1到。
該矩陣範數被稱作“弗羅貝尼烏斯範數” Frobenius norm,用下標“F”標註()。它表示一個矩陣中所有元素的平方和。注意:這裏不是叫“矩陣L2範數”()。
4.利用弗羅貝尼烏斯範數實現梯度下降-權重衰減
如何使用弗羅貝尼烏斯範數實現梯度下降呢?
我們已經瞭解過深層NN梯度下降算法,先通過反向傳播計算出dW,然後更新W參數,
由於NN成本函數J中追加了正則化項,所以這裏dW也要增加正則化項
此時dW的定義含有相關參數代價函數導數和(,相關公式參見鏈接),以及最後添加的額外正則項。
觀察下式,你可以看到由於dW增加了正則項,所以權重W的更新多減了一個正則項。相當於我們給矩陣W乘以倍的權重,而該係數小於1,看上去它就像一般的梯度下降,因此L2正則化也被稱爲“權重衰減”。
以上就是在NN中應用L2正則化的過程。