1.8 循环神经网络的梯度消失-深度学习第五课《序列模型》-Stanford吴恩达教授
| 1.7 對新序列采樣 | 回到目錄 | 1.9 GRU 單元 |
循環(huán)神經(jīng)網(wǎng)絡的梯度消失 (Vanishing Gradient with RNNs)
你已經(jīng)了解了RNN時如何工作的了,并且知道如何應用到具體問題上,比如命名實體識別,比如語言模型,你也看到了怎么把反向傳播用于RNN。其實,基本的RNN算法還有一個很大的問題,就是梯度消失的問題。這節(jié)課我們會討論,在下幾節(jié)課我們會討論一些方法用來解決這個問題。
你已經(jīng)知道了RNN的樣子,現(xiàn)在我們舉個語言模型的例子,假如看到這個句子(上圖編號1所示),“The cat, which already ate ……, was full.”,前后應該保持一致,因為cat是單數(shù),所以應該用was。“The cats, which ate ……, were full.”(上圖編號2所示),cats是復數(shù),所以用were。這個例子中的句子有長期的依賴,最前面的單詞對句子后面的單詞有影響。但是我們目前見到的基本的RNN模型(上圖編號3所示的網(wǎng)絡模型),不擅長捕獲這種長期依賴效應,解釋一下為什么。
你應該還記得之前討論的訓練很深的網(wǎng)絡,我們討論了梯度消失的問題。比如說一個很深很深的網(wǎng)絡(上圖編號4所示),100層,甚至更深,對這個網(wǎng)絡從左到右做前向傳播然后再反向傳播。我們知道如果這是個很深的神經(jīng)網(wǎng)絡,從輸出 y^\hat{y}y^? 得到的梯度很難傳播回去,很難影響靠前層的權重,很難影響前面層(編號5所示的層)的計算。
對于有同樣問題的RNN,首先從左到右前向傳播,然后反向傳播。但是反向傳播會很困難,因為同樣的梯度消失的問題,后面層的輸出誤差(上圖編號6所示)很難影響前面層(上圖編號7所示的層)的計算。這就意味著,實際上很難讓一個神經(jīng)網(wǎng)絡能夠意識到它要記住看到的是單數(shù)名詞還是復數(shù)名詞,然后在序列后面生成依賴單復數(shù)形式的was或者were。而且在英語里面,這中間的內容(上圖編號8所示)可以任意長,對吧?所以你需要長時間記住單詞是單數(shù)還是復數(shù),這樣后面的句子才能用到這些信息。也正是這個原因,所以基本的RNN模型會有很多局部影響,意味著這個輸出 y^<3>\hat{y}^{<3>}y^?<3> (上圖編號9所示)主要受 y^<3>\hat{y}^{<3>}y^?<3> 附近的值(上圖編號10所示)的影響,上圖編號11所示的一個數(shù)值主要與附近的輸入(上圖編號12所示)有關,上圖編號6所示的輸出,基本上很難受到序列靠前的輸入(上圖編號10所示)的影響,這是因為不管輸出是什么,不管是對的,還是錯的,這個區(qū)域都很難反向傳播到序列的前面部分,也因此網(wǎng)絡很難調整序列前面的計算。這是基本的RNN算法的一個缺點,我們會在下幾節(jié)視頻里處理這個問題。如果不管的話,RNN會不擅長處理長期依賴的問題。
盡管我們一直在討論梯度消失問題,但是,你應該記得我們在講很深的神經(jīng)網(wǎng)絡時,我們也提到了梯度爆炸,我們在反向傳播的時候,隨著層數(shù)的增多,梯度不僅可能指數(shù)型的下降,也可能指數(shù)型的上升。事實上梯度消失在訓練RNN時是首要的問題,盡管梯度爆炸也是會出現(xiàn),但是梯度爆炸很明顯,因為指數(shù)級大的梯度會讓你的參數(shù)變得極其大,以至于你的網(wǎng)絡參數(shù)崩潰。所以梯度爆炸很容易發(fā)現(xiàn),因為參數(shù)會大到崩潰,你會看到很多NaN,或者不是數(shù)字的情況,這意味著你的網(wǎng)絡計算出現(xiàn)了數(shù)值溢出。如果你發(fā)現(xiàn)了梯度爆炸的問題,一個解決方法就是用梯度修剪。梯度修剪的意思就是觀察你的梯度向量,如果它大于某個閾值,縮放梯度向量,保證它不會太大,這就是通過一些最大值來修剪的方法。所以如果你遇到了梯度爆炸,如果導數(shù)值很大,或者出現(xiàn)了NaN,就用梯度修剪,這是相對比較魯棒的,這是梯度爆炸的解決方法。然而梯度消失更難解決,這也是我們下幾節(jié)視頻的主題。
總結一下,在前面的課程,我們了解了訓練很深的神經(jīng)網(wǎng)絡時,隨著層數(shù)的增加,導數(shù)有可能指數(shù)型的下降或者指數(shù)型的增加,我們可能會遇到梯度消失或者梯度爆炸的問題。加入一個RNN處理1,000個時間序列的數(shù)據(jù)集或者10,000個時間序列的數(shù)據(jù)集,這就是一個1,000層或者10,000層的神經(jīng)網(wǎng)絡,這樣的網(wǎng)絡就會遇到上述類型的問題。梯度爆炸基本上用梯度修剪就可以應對,但梯度消失比較棘手。我們下節(jié)會介紹GRU,門控循環(huán)單元網(wǎng)絡,這個網(wǎng)絡可以有效地解決梯度消失的問題,并且能夠使你的神經(jīng)網(wǎng)絡捕獲更長的長期依賴,我們去下個視頻一探究竟吧。
課程板書
| 1.7 對新序列采樣 | 回到目錄 | 1.9 GRU 單元 |
總結
以上是生活随笔為你收集整理的1.8 循环神经网络的梯度消失-深度学习第五课《序列模型》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.7 对新序列采样-深度学习第五课《序
- 下一篇: 1.9 GRU 单元-深度学习第五课《序