日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

深度学习之循环神经网络(6)梯度弥散和梯度爆炸

發布時間:2023/12/15 循环神经网络 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习之循环神经网络(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=1t?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)


運行結果如下所示:

tf.Tensor([0. 1.9999999], shape=(2,), dtype=float32)


可以看到,全1矩陣的最大特征值為2。計算W\boldsymbol WW矩陣的W1~W10\boldsymbol W^1\sim \boldsymbol W^{10}W1W10運算結果,并繪制為次方與矩陣的L2-范數的曲線圖:

val = [W] for i in range(10): # 矩陣相乘n次方val.append([val[-1]@W]) # 計算L2范數 norm = list(map(lambda x: tf.norm(x).numpy(), val)) print(norm) plt.plot(range(1, 12), norm) plt.xlabel('n times') plt.ylabel('L2-norm') plt.savefig('w_n_times_1.svg') plt.show()


運行結果如下:

[2.0, 4.0, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0, 2048.0]

最大特征值大于1時的矩陣相乘


可以看到,當W\boldsymbol WW矩陣的最大特征值大于1時,矩陣多次相乘會使得結果越來越大。


?考慮最大特征值小于1的情況。例如:

import tensorflow as tfW = tf.ones([2, 2])*0.4 # 任意創建某矩陣 eigenvalues = tf.linalg.eigh(W)[0] # 計算矩陣的特征值 print(eigenvalues)


運行結果如下所示:

tf.Tensor([0. 0.79999995], shape=(2,), dtype=float32)


可以看到此時的W\boldsymbol WW矩陣最大特征值是0.8。同樣的方法,考慮W\boldsymbol WW矩陣的多次相乘運算結果,代碼如下:

val = [W] for i in range(10): # 矩陣相乘n次方val.append([val[-1]@W]) # 計算L2范數 norm = list(map(lambda x: tf.norm(x).numpy(), val)) print(norm) plt.plot(range(1, 12), norm) plt.xlabel('n times') plt.ylabel('L2-norm') plt.savefig('w_n_times_0.svg') plt.show()


運行結果如下所示:

[0.8, 0.64000005, 0.512, 0.40960002, 0.32768002, 0.26214403, 0.20971523, 0.16777219, 0.13421775, 0.107374206, 0.08589937]

最大特征值小于1時的矩陣相乘

它的L2-范數曲線如上圖所示。可以看到,當W\boldsymbol WW矩陣的最大特征值小于1時,矩陣多次相乘會使得結果越來越小,接近于0。

注:特征值的作用和意義體現在用矩陣進行列向量的高次變換也就是矩陣的高次方乘以列向量的計算中。數學中的很多變換可以用矩陣的乘法來表示,在這樣的變換中,一個列向量(點)ααα變成另一個列向量(點)βββ的過程可以看成是一個矩陣A\boldsymbol AA乘以ααα得到βββ,即Aα=β\boldsymbol Aα=βAα=β,如果把同樣的變換連續的重復的做nnn次則需要用矩陣高次方來計算:An?α\boldsymbol A^n\cdotαAn?α,如果沒有特征值和特征向量,此處就要計算矩陣A\boldsymbol AAnnn次方,這個運算量隨著nnn的增加,變得越來越大,很不方便。而利用特征值和特征向量,可以達到簡化計算的目的。
參考:什么是最大特征值


?我們把梯度值接近于0的現象叫做梯度彌散(Gradient Vanishing),把梯度值遠大于1的現象叫做梯度爆炸(Gradient Exploding)。梯度彌散和梯度爆炸是神經網絡優化過程中間比較容易出現的兩種情況,也是不利于網絡訓練的。那么梯度彌散和梯度爆炸具體表現在哪些地方呢?

?考慮梯度下降算法:
θ′=θ?η?θLθ'=θ-η?_θ \mathcal Lθ=θ?η?θ?L
當出現梯度彌散時,?θL≈0?_θ \mathcal L≈0?θ?L0,此時θ′≈θθ'≈θθθ,也就是說每次梯度更新后參數基本保持不變,神經網絡的參數長時間得不到更新,具體表現為L\mathcal LL幾乎保持不變,其他評測指標,如準確度,也保持不變。當出現梯度爆炸時,?θL?1?_θ \mathcal L?1?θ?L?1,此時梯度的更新步長η?θLη?_θ\mathcal Lη?θ?L非常大,使得更新后的θ′θ'θθθθ差距很大,網絡L出現突變現象,甚至可能出現來回震蕩、不收斂的現象。

?通過推導循環神經網絡的梯度傳播公式,我們發現循環神經網絡很容易出現梯度彌散和梯度爆炸的現象。那么怎么解決這兩個問題呢?——梯度裁剪

總結

以上是生活随笔為你收集整理的深度学习之循环神经网络(6)梯度弥散和梯度爆炸的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。