0
本文作者: 叢末 | 2019-08-05 14:03 |
訓(xùn)練一個(gè)深度神經(jīng)網(wǎng)絡(luò)以實(shí)現(xiàn)最佳的性能是一件具有挑戰(zhàn)的任務(wù)。在本文中,我將會(huì)探索這項(xiàng)任務(wù)中最常見(jiàn)的問(wèn)題及其解決方案。這些問(wèn)題包括網(wǎng)絡(luò)訓(xùn)練時(shí)間過(guò)長(zhǎng),梯度消失與爆炸以及網(wǎng)絡(luò)初始化,我們?cè)诖私y(tǒng)稱(chēng)為優(yōu)化問(wèn)題。而在訓(xùn)練網(wǎng)絡(luò)中出現(xiàn)的另一類(lèi)問(wèn)題則稱(chēng)作正則化問(wèn)題,對(duì)此,我已經(jīng)在之前的文章中討論過(guò)了,如果你沒(méi)有閱讀過(guò),可以點(diǎn)擊下方鏈接閱讀原文。
Improving Deep Neural Networks
當(dāng)我們?cè)谟?xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),我們可能會(huì)注意到模型訓(xùn)練的時(shí)間比預(yù)期的要久。這是因?yàn)榫W(wǎng)絡(luò)的輸入數(shù)據(jù)沒(méi)有進(jìn)行標(biāo)準(zhǔn)化處理,讓我們嘗試通過(guò)下方兩個(gè)輸入特征來(lái)理解標(biāo)準(zhǔn)化的含義。
在原始數(shù)據(jù)中,數(shù)據(jù)的 X 軸(特征X)取值區(qū)間為5-50,Y軸(特征Y)取值區(qū)間為3-7。 另一方面,在標(biāo)準(zhǔn)化后的數(shù)據(jù)中,X軸取值區(qū)間時(shí)-0.15~0.15, Y軸的取值區(qū)間時(shí)-1.5~1.5。
通過(guò)標(biāo)準(zhǔn)化數(shù)據(jù),即縮放數(shù)值從而使其特征范圍非常接近:而標(biāo)準(zhǔn)化數(shù)據(jù)只需要兩步過(guò)程。
讓數(shù)據(jù)減去其均值,使得數(shù)據(jù)的均值為 0,之后再讓該數(shù)據(jù)除以其方差,從而縮放數(shù)據(jù)。
mu = np.mean(X)
X = X - mu
sigma = np.linalg.norm(X)
X = X/sigma
這里有一點(diǎn)值得注意的是,我們需要使用同樣的 mu 值和 sigma 值去轉(zhuǎn)換我們的測(cè)試數(shù)據(jù),因?yàn)槲覀兿胗猛瑯拥姆椒▉?lái)縮放它們。
既然我們已經(jīng)知道了如何標(biāo)準(zhǔn)化數(shù)據(jù)集,那么讓我們?cè)囍斫鉃槭裁礃?biāo)準(zhǔn)化能夠在下面的示例中起作用。下面是成本值 J,權(quán)重 W 和偏差 b 之間的等高線(xiàn)圖。中心表示我們必須達(dá)到的最小成本。
右邊的圖看起來(lái)更對(duì)稱(chēng),這是標(biāo)準(zhǔn)化背后的工作原理的關(guān)鍵。
如果特征的范圍變化很大,則不同權(quán)重的值也會(huì)隨著發(fā)生很大的變化,并且將花費(fèi)更多的時(shí)間來(lái)選擇完美的權(quán)重集。然而,如果我們使用標(biāo)準(zhǔn)化數(shù)據(jù),那么權(quán)重就不會(huì)有很大的變化,從而在較短的時(shí)間內(nèi)獲得理想的權(quán)重集。
此外,如果使用原始數(shù)據(jù),則必須使用較低的學(xué)習(xí)率來(lái)適應(yīng)不同的等高線(xiàn)高度。但是在歸一化數(shù)據(jù)的情況下,我們有更多的球面輪廓,通過(guò)選擇更大的學(xué)習(xí)速率,我們可以直接實(shí)現(xiàn)最小值。
當(dāng)特征在相似的尺度上時(shí),優(yōu)化權(quán)重和偏差變得容易。
梯度消失和梯度爆炸問(wèn)題源于權(quán)值的初始化。 以上兩個(gè)問(wèn)題都導(dǎo)致網(wǎng)絡(luò)的訓(xùn)練不當(dāng)和速度較慢問(wèn)題。正如其名稱(chēng)所暗示的那樣,當(dāng)權(quán)重消失并最終變得太小時(shí),就會(huì)出現(xiàn)梯度消失;然而在梯度爆炸中,權(quán)重會(huì)爆炸并變得過(guò)大。讓我們用一個(gè)案例來(lái)更好地理解它們。
設(shè) W 是與單位矩陣 I 相近的經(jīng)初始化的所有層的權(quán)重矩陣。
在前向傳播中,一個(gè)特定層的輸出 Z 由以下公式定義,其中 W 是權(quán)重矩陣,X 是輸入,b 是偏差:
如果我們?cè)?nbsp;L 層(L 為層數(shù))上執(zhí)行上述計(jì)算,那么我們可以假設(shè)權(quán)重矩陣 W 將乘以 L 次,忽略偏差。
現(xiàn)在,如果特定值大于 1 ,例如 1.5,則層的激活將呈指數(shù)遞增,梯度將變大的,與此同時(shí)梯度下降將采取大的步長(zhǎng),并且網(wǎng)絡(luò)將花費(fèi)很長(zhǎng)時(shí)間來(lái)達(dá)到最小值。這種問(wèn)題被稱(chēng)為梯度爆炸。
同樣的,如果特定值小于 1,例如 0.9,則層的激活將呈指數(shù)遞減,梯度將變得很小,與此同時(shí)梯度下降將采取小的步長(zhǎng),并且網(wǎng)絡(luò)將需要很長(zhǎng)時(shí)間才能達(dá)到最小值。 這種問(wèn)題被稱(chēng)為梯度消失。
為了避免梯度爆炸和梯度消失的問(wèn)題,我們應(yīng)該遵循以下規(guī)則 :
1. 激活層的均值應(yīng)該為 0
2. 激活層的方差應(yīng)該在每一層都保持不變。
如果遵循上述規(guī)則,則能夠確保梯度下降不會(huì)采取太大或太小的步長(zhǎng),并以有序的方式向最小值方向移動(dòng),從而避免了梯度爆炸和梯度消失問(wèn)題。這也意味著網(wǎng)絡(luò)將以更快的速度進(jìn)行訓(xùn)練和優(yōu)化。由于問(wèn)題的根源在于權(quán)值的初始化不當(dāng),所以我們可以通過(guò)正確地初始化權(quán)值來(lái)解決這個(gè)問(wèn)題。
當(dāng)特定層的激活函數(shù)為 Tanh 時(shí),則使用 Xavier 初始化。我們可以按照以下方式使用 Xavier 初始化:
# Let the dimesnion of weight matrix be(5,3)
# The variance is (1/neurons in previous layer)
# Randn ensure that the mean = 0
W = np.random.randn(5,3) * np.sqrt(1/3))
當(dāng)特定層的激活函數(shù)為 ReLU 時(shí),可使用 He初始化。我們可以通過(guò)以下方式使用 He初始化:
# Let the shape of the weight matrix be(5,3)
# The variance is (2/neurons in previous layer)
# Randn ensure that the mean = 0
W = np.random.randn(5,3) * np.sqrt(2/3))
相關(guān)參考:
Deep Learning Notes
Coursera — Deep Learning Course 2
via https://medium.com/analytics-vidhya/optimization-problem-in-deep-neural-networks-400f853af406
本文譯者:Ryan、肖書(shū)忠 雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。