深度学习之循环神经网络(6)梯度弥散和梯度爆炸
深度學習之循環神經網絡(6)梯度彌散和梯度爆炸
?循環神經網絡的訓練并不穩定,網絡的善妒也不能任意加深。那么,為什么循環神經網絡會出現訓練困難的問題呢?簡單回顧梯度推導中的關鍵表達式:
?ht?hi=∏j=1t?1diag(σ′(Wxhxj+1+Whhhj+b))Whh\frac{?\boldsymbol h_t}{?\boldsymbol h_i}=\prod_{j=1}^{t-1}diag(σ'(\boldsymbol W_{xh} \boldsymbol x_{j+1}+\boldsymbol W_{hh} \boldsymbol h_j+\boldsymbol b))\boldsymbol W_{hh}?hi??ht??=j=1∏t?1?diag(σ′(Wxh?xj+1?+Whh?hj?+b))Whh?
也就是說,從時間戳iii到時間戳ttt的梯度?ht?hi\frac{?\boldsymbol h_t}{?\boldsymbol h_i}?hi??ht??包含了Whh\boldsymbol W_{hh}Whh?的連乘運算。當Whh\boldsymbol W_{hh}Whh?的最大特征值(Largest Eignvalue)小于1時,多次連乘運算會使得?ht?hi\frac{?\boldsymbol h_t}{?\boldsymbol h_i}?hi??ht??的元素值接近于0;當Whh\boldsymbol W_{hh}Whh?的最大特征值大于1時,多次連乘運算會使得?ht?hi\frac{?\boldsymbol h_t}{?\boldsymbol h_i}?hi??ht??的元素值爆炸式增長。
?我們可以從下面的兩個例子直觀地感受一下梯度彌散和梯度爆炸現象的產生,代碼如下: import tensorflow as tfW = tf.ones([2, 2]) # 任意創建某矩陣 eigenvalues = tf.linalg.eigh(W)[0] # 計算矩陣的特征值 print(eigenvalues)
運行結果如下所示:
可以看到,全1矩陣的最大特征值為2。計算W\boldsymbol WW矩陣的W1~W10\boldsymbol W^1\sim \boldsymbol W^{10}W1~W10運算結果,并繪制為次方與矩陣的L2-范數的曲線圖:
運行結果如下:
最大特征值大于1時的矩陣相乘
可以看到,當W\boldsymbol WW矩陣的最大特征值大于1時,矩陣多次相乘會使得結果越來越大。
?考慮最大特征值小于1的情況。例如:
運行結果如下所示:
可以看到此時的W\boldsymbol WW矩陣最大特征值是0.8。同樣的方法,考慮W\boldsymbol WW矩陣的多次相乘運算結果,代碼如下:
運行結果如下所示:
它的L2-范數曲線如上圖所示。可以看到,當W\boldsymbol WW矩陣的最大特征值小于1時,矩陣多次相乘會使得結果越來越小,接近于0。
注:特征值的作用和意義體現在用矩陣進行列向量的高次變換也就是矩陣的高次方乘以列向量的計算中。數學中的很多變換可以用矩陣的乘法來表示,在這樣的變換中,一個列向量(點)ααα變成另一個列向量(點)βββ的過程可以看成是一個矩陣A\boldsymbol AA乘以ααα得到βββ,即Aα=β\boldsymbol Aα=βAα=β,如果把同樣的變換連續的重復的做nnn次則需要用矩陣高次方來計算:An?α\boldsymbol A^n\cdotαAn?α,如果沒有特征值和特征向量,此處就要計算矩陣A\boldsymbol AA的nnn次方,這個運算量隨著nnn的增加,變得越來越大,很不方便。而利用特征值和特征向量,可以達到簡化計算的目的。
參考:什么是最大特征值
?我們把梯度值接近于0的現象叫做梯度彌散(Gradient Vanishing),把梯度值遠大于1的現象叫做梯度爆炸(Gradient Exploding)。梯度彌散和梯度爆炸是神經網絡優化過程中間比較容易出現的兩種情況,也是不利于網絡訓練的。那么梯度彌散和梯度爆炸具體表現在哪些地方呢?
?考慮梯度下降算法:
θ′=θ?η?θLθ'=θ-η?_θ \mathcal Lθ′=θ?η?θ?L
當出現梯度彌散時,?θL≈0?_θ \mathcal L≈0?θ?L≈0,此時θ′≈θθ'≈θθ′≈θ,也就是說每次梯度更新后參數基本保持不變,神經網絡的參數長時間得不到更新,具體表現為L\mathcal LL幾乎保持不變,其他評測指標,如準確度,也保持不變。當出現梯度爆炸時,?θL?1?_θ \mathcal L?1?θ?L?1,此時梯度的更新步長η?θLη?_θ\mathcal Lη?θ?L非常大,使得更新后的θ′θ'θ′與θθθ差距很大,網絡L出現突變現象,甚至可能出現來回震蕩、不收斂的現象。
?通過推導循環神經網絡的梯度傳播公式,我們發現循環神經網絡很容易出現梯度彌散和梯度爆炸的現象。那么怎么解決這兩個問題呢?——梯度裁剪。
總結
以上是生活随笔為你收集整理的深度学习之循环神经网络(6)梯度弥散和梯度爆炸的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10移动热点自动关闭怎么办 win
- 下一篇: win10激活码怎么看 win10激活码