如果您完成了第 9.5 節中的練習,您會發現梯度裁剪對于防止偶爾出現的大量梯度破壞訓練穩定性至關重要。我們暗示爆炸梯度源于長序列的反向傳播。在介紹大量現代 RNN 架構之前,讓我們仔細看看反向傳播在數學細節中是如何在序列模型中工作的。希望這個討論能使梯度消失和爆炸的概念更加精確。如果你還記得我們在 5.3 節介紹 MLP 時通過計算圖進行前向和反向傳播的討論,那么 RNN 中的前向傳播應該相對簡單。在 RNN 中應用反向傳播稱為 時間反向傳播 ( Werbos, 1990 ). 此過程要求我們一次擴展(或展開)RNN 的計算圖。展開的 RNN 本質上是一個前饋神經網絡,具有相同的參數在整個展開的網絡中重復出現的特殊屬性,出現在每個時間步長。然后,就像在任何前饋神經網絡中一樣,我們可以應用鏈式法則,通過展開的網絡反向傳播梯度。每個參數的梯度必須在參數出現在展開網絡中的所有位置上求和。從我們關于卷積神經網絡的章節中應該熟悉處理這種權重綁定。
出現并發癥是因為序列可能相當長。處理由超過一千個標記組成的文本序列并不罕見。請注意,從計算(太多內存)和優化(數值不穩定)的角度來看,這都會帶來問題。第一步的輸入在到達輸出之前要經過 1000 多個矩陣乘積,還需要另外 1000 個矩陣乘積來計算梯度。我們現在分析可能出現的問題以及如何在實踐中解決它。
9.7.1. RNN 中的梯度分析
我們從 RNN 工作原理的簡化模型開始。該模型忽略了有關隱藏狀態細節及其更新方式的細節。這里的數學符號沒有明確區分標量、向量和矩陣。我們只是想培養一些直覺。在這個簡化模型中,我們表示ht作為隱藏狀態, xt作為輸入,和ot作為時間步的輸出t. 回憶一下我們在第 9.4.2 節中的討論,輸入和隱藏狀態可以在乘以隱藏層中的一個權重變量之前連接起來。因此,我們使用 wh和wo分別表示隱藏層和輸出層的權重。因此,每個時間步的隱藏狀態和輸出是
在哪里f和g分別是隱藏層和輸出層的變換。因此,我們有一個價值鏈 {…,(xt?1,ht?1,ot?1),(xt,ht,ot),…} 通過循環計算相互依賴。前向傳播相當簡單。我們所需要的只是遍歷(xt,ht,ot)一次三倍一個時間步長。輸出之間的差異ot和想要的目標 yt然后通過所有的目標函數進行評估 T時間步長為
對于反向傳播,事情有點棘手,尤其是當我們計算關于參數的梯度時wh目標函數的L. 具體來說,根據鏈式法則,
評論
查看更多