2020-5-24 吳恩達-改善深層NN-w1 深度學習的實用層面(1.10 梯度消失與梯度爆炸--激活函數與L層相關的指數級遞減(步長小,學習時間長)或者增加。)

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步驟,
梯度下降第一步,由於z[1]=W[1]x+b[1]z^{[1]}=W^{[1]}x+b^{[1]},而b=0,所以z[1]=W[1]xz^{[1]}=W^{[1]}x
梯度下降第二步,由於使用線性激活函數g(z)=z,a[1]=g(z[1])=z[1]=W[1]xa^{[1]}=g(z^{[1]})=z^{[1]}=W^{[1]}x

NN第二層隱藏單元計算同樣也是分2步驟
梯度下降第一步,由於z[2]=W[2]a[1]+b[2]z^{[2]}=W^{[2]}a^{[1]}+b^{[2]},而b=0,所以z[2]=W[2]a[1]=W[2]W[1]xz^{[2]}=W^{[2]}a^{[1]}=W^{[2]}W^{[1]}x
梯度下降第二步,由於使用線性激活函數g(z)=z,a[2]=g(z[2])=z[2]=W[2]W[1]xa^{[2]}=g(z^{[2]})=z^{[2]}=W^{[2]}W^{[1]}x

NN第三層隱藏單元,我們依然可以得到類似結論,a[3]=W3]W[2]W[1]xa^{[3]}=W^{3]}W^{[2]}W^{[1]}x
在這裏插入圖片描述

最後可以得到預測值,y^=W[L]W[L1]W[L2]......W[3]W[2]W[1]x\hat y=W^{[L]}W^{[L-1]}W^{[L-2]}......W ^{[3]}W^{[2]}W^{[1]}x

假設權重W比1大一點,每個權重矩陣都相同,例如,1.5倍單位矩陣,W=[1.5001.5]W=\begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \\ \end{bmatrix}

從技術上來講,最後一項有不同維度,可能它就是餘下的權重矩陣。
所以y^=W[L][1.5001.5][L1]x\hat y=W^{[L]}\begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \\ \end{bmatrix}^{[L-1]}x

因爲權重矩陣是1.5倍的單位矩陣,我們忽略最後一項W[L]W^{[L]},最終y^=1.5(L1)x\hat y=1.5^{(L-1)}x
如果對於一個深度NN來說L值較大,那麼的y^\hat y值也會非常大,實際上它呈指數級增長的,本例中它增長的比率是1.5L。因此對於一個深度NN,y^\hat y的值將爆炸式增長

相反的,如果權重是0.5,即W=[0.5000.5]W=\begin{bmatrix} 0.5 & 0 \\ 0 & 0.5 \\ \end{bmatrix},最終y^=0.5(L1)x\hat y=0.5^{(L-1)}x
增長的比率是0.5L

再說明的詳細一點,假設輸入x1和x2都是1,那麼第一層激活函數輸出就是12\frac 12,第二層是14\frac 14,直至最後一層12L\frac 1{2^L}
在這裏插入圖片描述
激活函數的值將以指數級下降,它是與網絡層數數量L相關的函數,此時在深度網絡中,激活函數以指數級遞減

現在你可以發現

  • 權重只比1略大一點,或者說只是比單位矩陣I大一點,W[L]>IW^{[L]}>I,深度NN的激活函數將爆炸式增長
  • 如果比1略小一點,W[L]<IW^{[L]}<I,類似[0.9000.9]\begin{bmatrix} 0.9 & 0 \\ 0 & 0.9 \\ \end{bmatrix},在深度NN中,激活函數將以指數級遞減

雖然這裏只是討論了激活函數以與L相關的指數級數增長或下降,它也適用於與層數相關的導數或梯度函數,也是呈指數級增長或呈指數遞減。

對於當前的深度NN,比如:最近Microsoft對152層NN的研究取得了很大進展,在這樣一個深度NN中,如果激活函數或梯度函數以與L相關的指數增長或遞減,它們的值將會變得極大或極小,從而導致訓練難度上升。尤其是梯度指數小於L時,梯度下降算法的步長會非常非常小,梯度下降算法將花費很長時間來學習

實際上,在很長一段時間內,梯度消失與梯度爆炸曾是訓練深度NN的阻力,雖然有一個不能徹底解決此問題的解決方案,但是已在如何選擇初始化權重問題上提供了很多幫助。

下節課將對此進行介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章