第三周學(xué)習(xí)小結(jié)

改善深層神經(jīng)網(wǎng)絡(luò):超參數(shù)調(diào)試、正則化以及優(yōu)化

一、第一周-深度學(xué)習(xí)的實(shí)用層面

1.訓(xùn)練、驗(yàn)證、測試集

通常在進(jìn)行深度學(xué)習(xí)的過程中,需要將數(shù)據(jù)集按照使用方法分成以下三個(gè)部分:

1.訓(xùn)練集(train set):對模型進(jìn)行訓(xùn)練的部分?jǐn)?shù)據(jù)。

2.驗(yàn)證集(development set):利用驗(yàn)證集或者又稱為簡單交叉驗(yàn)證集(hold-out cross validation set)進(jìn)行交叉驗(yàn)證,選擇出最好的模型。

3.測試集(test set):最后利用測試集對模型測試,獲取模型的無偏估計(jì)。

驗(yàn)證集和測試集的區(qū)別:驗(yàn)證集用于進(jìn)一步確定模型中的超參數(shù)(例如正則項(xiàng)系數(shù)、ANN中隱含層的節(jié)點(diǎn)個(gè)數(shù)等)而測試集只是用于評估模型的精確度(即泛化能力)

三種數(shù)據(jù)集在整個(gè)數(shù)據(jù)集中占的比例:

(1)在小數(shù)據(jù)時(shí)代如:100、1000、10000的數(shù)據(jù)量大小,可以將data做以下劃分:

無驗(yàn)證集的情況:70% / 30%;

有驗(yàn)證集的情況:60% / 20% / 20%;

(2)在大數(shù)據(jù)時(shí)代,對于一個(gè)問題,擁有的數(shù)據(jù)量可能是百萬級(jí)別的,所以驗(yàn)證集和測試集所占的比重會(huì)趨向于變得更小。

驗(yàn)證集的目的是為了驗(yàn)證不同的算法哪種更加有效,所以驗(yàn)證集只要足夠大能夠驗(yàn)證大約2-10種算法哪種更好就足夠了,不需要使用20%的數(shù)據(jù)作為驗(yàn)證集。如百萬數(shù)據(jù)中抽取1萬的數(shù)據(jù)作為驗(yàn)證集就可以了。

測試集的主要目的是評估模型的效果,如在單個(gè)分類器中,往往在百萬級(jí)別的數(shù)據(jù)中,我們選擇其中1000條數(shù)據(jù)足以評估單個(gè)模型的效果。

100萬數(shù)據(jù)量:98% / 1% / 1%;

超百萬數(shù)據(jù)量:99.5% / 0.25% / 0.25%(或者99.5% / 0.4% / 0.1%)

注:建議驗(yàn)證集要和訓(xùn)練集來自于同一個(gè)分布,可以使得機(jī)器學(xué)習(xí)算法變得更快;

如果不需要用無偏估計(jì)來評估模型的性能,則可以不需要測試集。

2.偏差、方差

偏差(bias):描述的是預(yù)測值(估計(jì)值)的期望與真實(shí)值之間的差距。偏差越大,越偏離真實(shí)數(shù)據(jù)。

方差(variance):描述的是預(yù)測值的變化范圍,離散程度,也就是離其期望值的距離。方差越大,數(shù)據(jù)的分布越分散。

三種數(shù)據(jù)的情況

從圖中我們可以看出,在欠擬合的情況下,會(huì)出現(xiàn)高偏差。在過擬合的情況下,會(huì)出現(xiàn)高方差。從方差和偏差兩者權(quán)衡的角度來講,我們利用訓(xùn)練集對模型進(jìn)行訓(xùn)練就是為了使得模型在訓(xùn)練集上使 偏差最小化,避免出現(xiàn)欠擬合的情況,但是如果模型設(shè)置的太復(fù)雜,雖然在訓(xùn)練集上偏差的值非常小,模型甚至可以將所有的數(shù)據(jù)點(diǎn)正確分類,但是當(dāng)將訓(xùn)練好的模型應(yīng)用在驗(yàn)證集上的時(shí)候,卻出現(xiàn)了較高的錯(cuò)誤率。這是因?yàn)槟P驮O(shè)置的太復(fù)雜則沒有排除一些訓(xùn)練集數(shù)據(jù)中的噪聲,使得模型出現(xiàn)過擬合的情況,在驗(yàn)證集上出現(xiàn)高方差的現(xiàn)象。所以對于方差和偏差的權(quán)衡問題,對于模型來說是一個(gè)十分重要的問題。

總的來說我們的訓(xùn)練目標(biāo)是訓(xùn)練出一個(gè)低方差和低偏差的模型。

3.機(jī)器學(xué)習(xí)的基本方法

在訓(xùn)練機(jī)器學(xué)習(xí)模型的過程中,解決High bias 和High variance 的過程:

1.是否存在High bias ?

解決方案:(1)增加網(wǎng)絡(luò)結(jié)構(gòu),如增加隱藏層數(shù)目;

? ? ? ? ? ? ? ? ? ? (2)訓(xùn)練更長時(shí)間;

? ? ? ? ? ? ? ? ? ? (3)尋找合適的網(wǎng)絡(luò)架構(gòu),使用更大的NN結(jié)構(gòu);

2.是否存在High variance?

解決方案:(1)獲取更多的數(shù)據(jù);

????????????????????(2)正則化( regularization);

????????????????????(3)尋找合適的網(wǎng)絡(luò)結(jié)構(gòu);

在大數(shù)據(jù)時(shí)代,深度學(xué)習(xí)對監(jiān)督式學(xué)習(xí)大有裨益,使得我們不用像以前一樣太過關(guān)注如何平衡偏差和方差的權(quán)衡問題,通過以上方法可以使得再不增加另一方的情況下減少一方的值。

4.正則化

(1)Logistic regression

利用正則化來解決High variance 的問題,正則化是在 Cost function 中加入一項(xiàng)正則化項(xiàng),懲罰模型的復(fù)雜度。即

邏輯回歸L2正則化

其中λ為正則化因子

(2)Neural network

加入正則化項(xiàng)的代價(jià)函數(shù):


網(wǎng)絡(luò)中加入正則化項(xiàng)的代價(jià)函數(shù)

其中

其中w的矩陣大小為(n^{[l-1]} ,n^{[l]}),該矩陣范數(shù)被稱作Frobenius norm

(3)Weight decay

加入正則化項(xiàng)的梯度:

則梯度更新公式變?yōu)椋?/p>

代入可得

其中,(1-αλ/m)< 1,會(huì)給原來的Wl一個(gè)衰減的參數(shù),所以L2范數(shù)正則化也被稱為“權(quán)重衰減(Weight decay)”

5. 為什么正則化可以減小過擬合

對于神經(jīng)網(wǎng)絡(luò)的Cost function:

加入正則化項(xiàng),直觀上理解,正則化因子λ設(shè)置的足夠大的情況下,為了使代價(jià)函數(shù)最小化,權(quán)重矩陣W就會(huì)被設(shè)置為接近于0的值。則相當(dāng)于消除了很多神經(jīng)元的影響,那么圖中的大的神經(jīng)網(wǎng)絡(luò)就會(huì)變成一個(gè)較小的網(wǎng)絡(luò)。

當(dāng)然上面這種解釋是一種直觀上的理解,但是實(shí)際上隱藏層的神經(jīng)元依然存在,但是他們的影響變小了,便不會(huì)導(dǎo)致過擬合。

數(shù)學(xué)解釋:

假設(shè)神經(jīng)元中使用的激活函數(shù)為g(z)=tanh?(z),在加入正則化項(xiàng)后:?

當(dāng)λ增大,導(dǎo)致W[l]減小,Z[l]=W[l]a[l?1]+b[l]便會(huì)減小,由上圖可知,在z較小的區(qū)域里,tanh?(z)函數(shù)近似線性,所以每層的函數(shù)就近似線性函數(shù),整個(gè)網(wǎng)絡(luò)就成為一個(gè)簡單的近似線性的網(wǎng)絡(luò),從而不會(huì)發(fā)生過擬合。

6. Dropout 正則化

Dropout(隨機(jī)失活)就是在神經(jīng)網(wǎng)絡(luò)的Dropout層,為每個(gè)神經(jīng)元結(jié)點(diǎn)設(shè)置一個(gè)隨機(jī)消除的概率,對于保留下來的神經(jīng)元,我們得到一個(gè)節(jié)點(diǎn)較少,規(guī)模較小的網(wǎng)絡(luò)進(jìn)行訓(xùn)練。

(1)實(shí)現(xiàn)Dropout的方法:反向隨機(jī)失活(Inverted dropout)

keep_prob = 0.8 # 設(shè)置神經(jīng)元保留概率

d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep_prob ?#隨機(jī)矩陣中所有位置的值與keep_prob比較并替換為比較結(jié)果,即小于keep_prob則為1,反之為0。

a3 = np.multiply(a3, d3) ?#對應(yīng)位置相乘,即保留為1的位置

a3 /= keep_prob?

????keep_prob = 0.8,那么就有大約20%的神經(jīng)元被刪除了,也就是說a[3]中有20%的元素被歸零了,在下一層的計(jì)算中有Z[4]=W[4]?a[3]+b[4],所以為了不影響Z[4]的期望值,所以需要W[4]?a[3]的部分除以一個(gè)keep_prob。通過對“a3 /= keep_prob”,則保證無論keep_prob設(shè)置為多少,都不會(huì)對Z[4]的期望值產(chǎn)生影響。

(注:在測試階段不要用dropout,因?yàn)槟菢訒?huì)使得預(yù)測結(jié)果變得隨機(jī)。)

(2)為什么使用dropout

? ? 從神經(jīng)元的角度來看,dropout的方法與之前的加入正則化項(xiàng)的方法類似,都是消除很多神經(jīng)元的影響,使一個(gè)大的網(wǎng)絡(luò)變成小的網(wǎng)絡(luò)。即dropout和L2范數(shù)都有收縮權(quán)重的效果,對于神經(jīng)元較多的層會(huì)設(shè)置比較小的keep_prob,對于神經(jīng)元比較多的層會(huì)設(shè)置比較大的keep_prob多為1.0。

(3)Dropout的缺點(diǎn)

????dropout的最大的缺點(diǎn)就是其使 Cost function不能再被明確的定義,因?yàn)槊看蔚紩?huì)隨機(jī)消除一些神經(jīng)元結(jié)點(diǎn),所以我們無法繪制出每次迭代J(W,b)下降的圖。

????我們可以通過每次使用dropout后再設(shè)置keep_prob為1,運(yùn)行代碼后再計(jì)算J(W,b)來查看代價(jià)函數(shù)是否是單調(diào)減少的,后面再給keep_prob賦相應(yīng)的值繼續(xù)正則化。

7.其他正則化的方法

(1)數(shù)據(jù)擴(kuò)增(Data augmentation)

通過圖片的一些變換,得到更多的訓(xùn)練集和驗(yàn)證集。如鏡像、旋轉(zhuǎn)等。

更多數(shù)據(jù)

(2)Early stopping

在交叉驗(yàn)證集的誤差上升之前的點(diǎn)停止迭代,避免過擬合。這種方法的缺點(diǎn)是無法同時(shí)解決bias和variance之間的最優(yōu)。?

Early stopping

8.歸一化輸入

歸一化輸入是為了讓我們無論輸入的值在什么位置都可以一相對較少的迭代次數(shù)來得到全局的最優(yōu)解。如下圖:

歸一化和非歸一化的區(qū)別

? ? 在圖中可以看出不使用歸一化和使用歸一化前后Cost function 的函數(shù)形狀會(huì)有很大的區(qū)別。

????在不使用歸一化的代價(jià)函數(shù)中,如果我們設(shè)置一個(gè)較小的學(xué)習(xí)率,那么很可能輸入的值在橢圓的兩個(gè)銳弧的地方的時(shí)候我們需要很多次迭代才能到達(dá)代價(jià)函數(shù)全局最優(yōu)解;如果使用了歸一化,那么無論從哪個(gè)位置開始迭代,我們都能以相對很少的迭代次數(shù)找到全局最優(yōu)解。

9.梯度消失與梯度爆炸

如下圖所示的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),以兩個(gè)輸入為例:

簡化的神經(jīng)網(wǎng)絡(luò)

為了方便假設(shè)g(z) = z,b[l] = 0,對于目標(biāo)的輸出有:

\hat{y}=W^{[L]}W^{[L-1]}...W^{[2]}W^{[1]}X

????由于神經(jīng)網(wǎng)絡(luò)的層數(shù)很深,所以當(dāng)W的值大于1的時(shí)候會(huì)出現(xiàn)多個(gè)大于1的值相乘,激活函數(shù)的值會(huì)以指數(shù)級(jí)遞增,當(dāng)W的值小于1的時(shí)候,多個(gè)小于一的數(shù)相乘,使激活函數(shù)以指數(shù)級(jí)遞減,所以在計(jì)算梯度時(shí),根據(jù)情況的不同,梯度函數(shù)會(huì)以指數(shù)級(jí)遞增或者遞減,導(dǎo)致訓(xùn)練導(dǎo)數(shù)難度上升,梯度下降算法的步長會(huì)變得非常非常小,需要訓(xùn)練的時(shí)間將會(huì)非常長。

????在梯度函數(shù)上出現(xiàn)的以指數(shù)級(jí)遞增或者遞減的情況就分別稱為梯度爆炸或者梯度消失。

10.利用初始化緩解梯度消失和爆炸的問題

當(dāng)輸入的n比較大時(shí),我們希望每個(gè)wi的值都小一些,這樣它們的和得到的z也較小。

這里為了得到較小的wi,設(shè)置Var(wi)=1/n,這里稱為Xavier initialization。?

對參數(shù)進(jìn)行初始化:

WL = np.random.randn(WL.shape[0],WL.shape[1])* np.sqrt(1/n)

這么做是因?yàn)?,如果激活函?shù)的輸入xx近似設(shè)置成均值為0,標(biāo)準(zhǔn)方差1的情況,輸出zz也會(huì)調(diào)整到相似的范圍內(nèi)。雖然沒有解決梯度消失和爆炸的問題,但其在一定程度上確實(shí)減緩了梯度消失和爆炸的速度。其中不同的激活函數(shù)使用不同的Xavier initialization,如下。

不同激活函數(shù)的 Xavier initialization:

ReLU:Var(w_{i} )=\frac{2}{n}

tanh:Var(w_{i} )=\frac{1}{n}

n為輸入的神經(jīng)元個(gè)數(shù)

11.梯度的數(shù)值逼近

使用雙邊誤差的方法去逼近導(dǎo)數(shù):

由圖可以看出,雙邊誤差逼近的誤差是0.0001,先比單邊逼近的誤差0.03,其精度要高了很多。

雙邊的導(dǎo)數(shù)定義:

{f}^{’}(\theta ) =\frac{f(\theta +\varepsilon )-f(\theta -\varepsilon )}{2\varepsilon }

單邊的導(dǎo)數(shù)定義:

{f}^{’}(\theta ) =\frac{f(\theta +\varepsilon )-f(\theta )}{\varepsilon }

12.梯度檢驗(yàn)

將所有的參數(shù)W[l]和b[l]reshape成一個(gè)大的向量\theta 。

將所有的參數(shù)dW[l]和db[l]reshape成一個(gè)大的向量d\theta

進(jìn)行如下的梯度檢驗(yàn):

梯度檢驗(yàn)

來判斷d\theta \approx d\theta _{approx} 是否成立

由上述圖中的公式\frac{||d\theta _{approx}-d\theta ||_2}{||d\theta _{approx}||_2+||d\theta ||_2} 來判斷。

其中||\cdot ||_2表示歐幾里得范數(shù),它是誤差平方之和,然后求平方根,得到的歐氏距離。

13. 實(shí)現(xiàn)梯度檢驗(yàn) Notes

????不要在訓(xùn)練過程中使用梯度檢驗(yàn),只在debug的時(shí)候使用,使用完畢關(guān)閉梯度檢驗(yàn)的功能;

????如果算法的梯度檢驗(yàn)出現(xiàn)了錯(cuò)誤,要檢查每一項(xiàng),找出錯(cuò)誤,也就是說要找出哪個(gè)dθapprox[i]dθapprox[i]與dθdθ的值相差比較大;

????不要忘記了正則化項(xiàng);

????梯度檢驗(yàn)不能與dropout同時(shí)使用。因?yàn)槊看蔚倪^程中,dropout會(huì)隨機(jī)消除隱層單元的不同神經(jīng)元,這時(shí)是難以計(jì)算dropout在梯度下降上的代價(jià)函數(shù)J;

? ? 可以在隨機(jī)初始化的時(shí)候運(yùn)行梯度檢驗(yàn),或在訓(xùn)練幾次后再進(jìn)行。

二、第二周-優(yōu)化算法

1.Mini-batch梯度下降算法

????對整個(gè)訓(xùn)練集進(jìn)行梯度下降法的時(shí)候,我們必須處理整個(gè)訓(xùn)練數(shù)據(jù)集,然后才能進(jìn)行一步梯度下降,即每一步梯度下降法需要對整個(gè)訓(xùn)練集進(jìn)行一次處理,如果訓(xùn)練數(shù)據(jù)集很大的時(shí)候,如有500萬或5000萬的訓(xùn)練數(shù)據(jù),處理速度就會(huì)比較慢。但是如果每次處理訓(xùn)練數(shù)據(jù)的一部分即進(jìn)行梯度下降法,則我們的算法速度會(huì)執(zhí)行的更快。而處理的這些一小部分訓(xùn)練子集即稱為Mini-batch。

????對于普通的梯度下降法,一個(gè)epoch只能進(jìn)行一次梯度下降;而對于Mini-batch梯度下降法,一個(gè)epoch可以進(jìn)行Mini-batch的個(gè)數(shù)次梯度下降。

如下圖左邊是普通的batch梯度下降,右邊是使用Mini-batch梯度下降:

兩種方法的對比

batch梯度下降:

????對所有m個(gè)訓(xùn)練樣本執(zhí)行一次梯度下降,每一次迭代時(shí)間較長,Cost function 總是向減小的方向下降。

隨機(jī)梯度下降:

????對每一個(gè)訓(xùn)練樣本執(zhí)行一次梯度下降,但是丟失了向量化帶來的計(jì)算加速,Cost function總體的趨勢向最小值的方向下降,但是無法到達(dá)全局最小值點(diǎn),呈現(xiàn)波動(dòng)的形式。

Mini-batch梯度下降:

????選擇一個(gè)1<size<m1<size<m 的合適的size進(jìn)行Mini-batch梯度下降,可以實(shí)現(xiàn)快速學(xué)習(xí),也應(yīng)用了向量化帶來的好處。Cost function的下降處于前兩者之間。

下圖是三種方法梯度下降的比較直觀的表示

三種梯度下降的直觀對比


Mini-batch 大小的選擇

如果訓(xùn)練樣本的大小比較小時(shí),如m?2000時(shí),選擇batch梯度下降法;

如果訓(xùn)練樣本的大小比較大時(shí),典型的大小為:

2^6、2^7、?、2^10;

Mini-batch的大小要符合CPU/GPU內(nèi)存。

2. 指數(shù)加權(quán)平均

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容