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