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.10 梯度消失與梯度爆炸 Vanishing/exploding gradients
訓練NN,尤其是深度神經所面臨的一個問題就是梯度消失或梯度爆炸。也就是你訓練NN的時候,導數或坡度有時會變得非常大,或者非常小,甚至於以指數方式變小,這加大了訓練的難度。
本節課你將會了解梯度消失或梯度爆炸的真正含義,以及如何更明智地選擇隨機初始化權重,從而避免這個問題。
假設你正在訓練如上圖這樣一個極深的NN。爲了空間,圖上的NN每層只有兩個隱藏單元,但它可能含有更多。
這個NN會有參數W [1],W[2],W[3],直到W[L]。
爲了簡單起見,假設我們使用激活函數g(z)=z,即線性激活函數。
我們忽略b,即假設b[L]=0。
我們已經知道,NN第一層隱藏單元計算分2步驟,
梯度下降第一步,由於,而b=0,所以
梯度下降第二步,由於使用線性激活函數g(z)=z,
NN第二層隱藏單元計算同樣也是分2步驟
梯度下降第一步,由於,而b=0,所以
梯度下降第二步,由於使用線性激活函數g(z)=z,
NN第三層隱藏單元,我們依然可以得到類似結論,
最後可以得到預測值,
假設權重W比1大一點,每個權重矩陣都相同,例如,1.5倍單位矩陣,
從技術上來講,最後一項有不同維度,可能它就是餘下的權重矩陣。
所以
因爲權重矩陣是1.5倍的單位矩陣,我們忽略最後一項,最終
如果對於一個深度NN來說L值較大,那麼的值也會非常大,實際上它呈指數級增長的,本例中它增長的比率是1.5L。因此對於一個深度NN,的值將爆炸式增長。
相反的,如果權重是0.5,即,最終
增長的比率是0.5L。
再說明的詳細一點,假設輸入x1和x2都是1,那麼第一層激活函數輸出就是,第二層是,直至最後一層
激活函數的值將以指數級下降,它是與網絡層數數量L相關的函數,此時在深度網絡中,激活函數以指數級遞減。
現在你可以發現
- 權重只比1略大一點,或者說只是比單位矩陣I大一點,,深度NN的激活函數將爆炸式增長
- 如果比1略小一點,,類似,在深度NN中,激活函數將以指數級遞減
雖然這裏只是討論了激活函數以與L相關的指數級數增長或下降,它也適用於與層數相關的導數或梯度函數,也是呈指數級增長或呈指數遞減。
對於當前的深度NN,比如:最近Microsoft對152層NN的研究取得了很大進展,在這樣一個深度NN中,如果激活函數或梯度函數以與L相關的指數增長或遞減,它們的值將會變得極大或極小,從而導致訓練難度上升。尤其是梯度指數小於L時,梯度下降算法的步長會非常非常小,梯度下降算法將花費很長時間來學習。
實際上,在很長一段時間內,梯度消失與梯度爆炸曾是訓練深度NN的阻力,雖然有一個不能徹底解決此問題的解決方案,但是已在如何選擇初始化權重問題上提供了很多幫助。
下節課將對此進行介紹。