【Pytorch神经网络理论篇】 18 循环神经网络结构:LSTM结构+双向RNN结构
1 深層循環(huán)神經(jīng)網(wǎng)絡(luò)的構(gòu)建
在深層網(wǎng)絡(luò)結(jié)構(gòu)中,會將簡單的RNN模型從兩個角度進行改造,具體如下。
2 常見的cell結(jié)構(gòu):LSTM
長短記憶(Long Short Term Memory,LSTM)單元是一種使用了類似搭橋術(shù)結(jié)構(gòu)的RNN單元。它可以學(xué)習(xí)長期序列信息,是RNN網(wǎng)絡(luò)中最常使用的Cell之一。
2.1 了解LSTM結(jié)構(gòu)
2.1.1?循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)
通過不斷將信息循環(huán)操作,保證信息持續(xù)存在,從而解決不能結(jié)合經(jīng)驗來理解當(dāng)前問題的問題。
從圖中可看出A允許將信息不斷的在內(nèi)部循環(huán),這可以使其保證每一步的計算都能保存以前的信息。
2.1.1?循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)在長序列上的弊端
把RNNs自循環(huán)結(jié)構(gòu)展開,可以看成是同一個網(wǎng)絡(luò)復(fù)制多次并連成一條線,把自身信息傳遞給下一時刻的自己。
這種鏈?zhǔn)降慕Y(jié)構(gòu)揭示了RNNs與序列和列表類型的數(shù)據(jù)密切相關(guān)。好像他們生來就是為了處理序列類型數(shù)據(jù)的。
但是在處理長依賴問題時,RNNs雖然在理論上可行,但實踐發(fā)現(xiàn)RNNs無法實現(xiàn)。
2.1.3?循環(huán)神經(jīng)網(wǎng)絡(luò)中cell的LSTM結(jié)構(gòu)
RNNs中有一個特殊的網(wǎng)絡(luò)結(jié)構(gòu),叫LSTMs,全稱為Long Short Term Memory networks,可翻譯為長短時記憶神經(jīng)網(wǎng)絡(luò),這個網(wǎng)絡(luò)的設(shè)計初衷就是為了解決長依賴問題。
所有循環(huán)神經(jīng)網(wǎng)絡(luò)都具有神經(jīng)網(wǎng)絡(luò)的重復(fù)模塊鏈的形式。
LSTMs的結(jié)構(gòu)如下:
?它內(nèi)部有四個網(wǎng)絡(luò)層,這不同于標(biāo)準(zhǔn)RNN網(wǎng)絡(luò)里只有一個網(wǎng)絡(luò)層的單元。
- Neural Network Layer:激活函數(shù)操作
- Pointwise Operation:點操作
- Vector Transfer:數(shù)據(jù)流向
- Concatenate:表示向量的合并(concat)操作
- Copy:向量的拷貝
LSTMs核心是細胞狀態(tài),用貫穿細胞的水平線表示。細胞狀態(tài)像傳送帶一樣,它貫穿整個細胞卻只有很少的分支,這樣能保證信息不變的流過整個RNNs,細胞狀態(tài)如下圖所示:
2.3?LSTM結(jié)構(gòu)的門結(jié)構(gòu)
LSTM網(wǎng)絡(luò)能通過一種被稱為門的結(jié)構(gòu)對細胞狀態(tài)進行刪除或者添加信息。
門能夠有選擇性的決定讓哪些信息通過。門的結(jié)構(gòu)為一個sigmoid層和一個點乘操作的組合:
2.3.1 忘記門
忘記門決定模型會從細胞狀態(tài)中丟棄什么信息。忘記門會讀取前一序列模型的輸出,和當(dāng)前模型的輸入,來控制細胞狀態(tài)中的每個數(shù)字是否保留。
例如,在一個語言模型的例子中,假設(shè)細胞狀態(tài)會包會當(dāng)前主語的性別,于是根據(jù)這個狀便可以選擇正確的代詞。當(dāng)我們看到新的主語時,應(yīng)該把新的主語在記憶中更新。忘記]的功能就是先去記憶中找到以前的那個舊的主語,并沒有真正執(zhí)行忘掉操作,只是找到而己。
在圖中,代表忘記門的輸出結(jié)果,σ代表激活函數(shù),代表忘記門的權(quán)重,代表當(dāng)前模型的輸入,代表前一個序列模型的輸出,代表忘記門的偏置。??
2.3.2 輸入門
輸入門其實可以分成兩部分功能,一部分是找到那些需要更新的細胞狀態(tài),另一部分是把需要更新的信息更新到細胞狀態(tài)里。
1、在下圖1中,代表要更新的細胞狀態(tài),σ代表激活函數(shù),代表當(dāng)前模型的輸入,代表前一個序列模型的輸出,所代表計算的權(quán)重,代表計算it的偏置,代表使用tanh所創(chuàng)建的新細胞狀態(tài),代表計算的權(quán)重,代表計算的偏置。
? ? 忘記門找到了需要忘掉的信息ft后,再將它與舊狀態(tài)相乘,丟棄確定需要丟棄的信息。然后將結(jié)果加上×使細胞狀態(tài)獲得新的信息。這樣就完成了細胞狀態(tài)的更新,如圖所示。
?2、輸入門更新在下圖中,代表更新后的細胞狀態(tài),代表忘記門的輸出結(jié)果,代表前一個序列模型的細胞狀態(tài),代表要更新的細胞狀態(tài),代表使用tanh所創(chuàng)建的新細胞狀態(tài)。
2.3.4?輸出門
如圖7-34所示,在輸出中,通過一個激活函數(shù)層(實際使用的是Sigmoid激活函數(shù))來確定哪個部分的信息將輸出,接著把細胞狀態(tài)通過tah進行處理(得到一個在-1~1的值),并將它和Sigmoid門的輸出相乘,得出最終想要輸出的那個部分,例如,在語言模型中,假設(shè)已經(jīng)輸入了一個代詞,便會計算出需要輸出一個與該代詞相關(guān)的信息。
如圖上,輸出門在圖7-34中,代表要輸出的信息,σ代表激活函數(shù),代表計算的權(quán)重,代表計算的偏置,代表更新后的細胞狀態(tài),代表當(dāng)前序列模型的輸出結(jié)果。
2.3 門控循環(huán)單元(GRU)
門控循環(huán)單元(Gated Recurrent Unit,GRU)是與LSTM功能幾乎一樣的另一個常用的網(wǎng)絡(luò)結(jié)構(gòu),它將忘記門和輸入門合成了一個單一的更新門,同時又將細胞狀態(tài)和隱藏狀態(tài)進行混合,以及一些其他的改動。最終的模型比標(biāo)準(zhǔn)的LSTM模型要簡單。
當(dāng)然,基于LSTM的變體不止GRU一個,經(jīng)過測試發(fā)現(xiàn),這些搭橋術(shù)類的Cell在性能和準(zhǔn)確度上幾乎沒有什么差別,只是在具體的某些業(yè)務(wù)上會有略微不同。
由于GRU比LSTM少一個狀態(tài)輸出,但效果幾乎與LSTM一樣,因此在編碼時使用GRU可以讓代碼更為簡單一些。
2.4?只有忘記門的LSTM(JANET)單元
? ? JANET(Just Another NETwork)單元也是LSTM單元的個變種,發(fā)布于2018年,實驗表明,只有忘記門的網(wǎng)絡(luò)的性能居然優(yōu)于標(biāo)準(zhǔn)LSTM單元。同樣,該優(yōu)化方式他以被用在GRU中。
3 獨立循環(huán)單元
獨立循環(huán)單元是一種新的循環(huán)神經(jīng)網(wǎng)絡(luò)單元結(jié)構(gòu),其效果和速度均優(yōu)于LSTM單元
IndRNN單元不但可以有效解決傳統(tǒng)RNN模型存在的梯度消失和梯度“爆炸”問題,而且能夠更好地學(xué)習(xí)樣本中的長期依賴關(guān)系。
在搭建模型時:
- 可以用堆疊、殘差、全連接的方式使用IndRNN單元,搭建更深的網(wǎng)絡(luò)結(jié)構(gòu):
- 將IndRNN單元配合RLU等非飽和激活函數(shù)一起使用,會使模型表現(xiàn)出更好的魯棒性。
3.1 原始的RNN模型結(jié)構(gòu)
3.2 indRNN單元的結(jié)構(gòu)
?4 雙向RNN結(jié)構(gòu)
? ? 雙向RNN又稱Bi-RNN,是采用了兩個方向的RNN模型。
? ? RNN模型擅長的是對連續(xù)數(shù)據(jù)的處理,既然是連續(xù)的數(shù)據(jù),那么模型不但可以學(xué)習(xí)它的正向特征,而且可以學(xué)習(xí)它的反向特征。這種將正向和反向結(jié)合的結(jié)構(gòu),會比單向的循環(huán)網(wǎng)絡(luò)更高的擬合度。例如,預(yù)測一個語句中缺失的詞語,則需要根據(jù)上下文來進行預(yù)測。
雙向RNN的處理過程就是在正向傳播的基礎(chǔ)上再進行一次反向傳播。正向傳播和反向傳播都連接著一個輸出層。這個結(jié)構(gòu)提供給輸出層輸入序列中每二個點的完整的過去和未來的上下文信息。圖所示是一個沿著時間展開的雙向循環(huán)神經(jīng)網(wǎng)絡(luò)。
? ? 雙向RNN會比單向RNN多一個隱藏層,6個獨特的權(quán)值在每一個時步被重復(fù)利用,6個權(quán)值分別對應(yīng):輸入到向前和向后隱含層,隱含層到隱含層自身,向前和向后隱含層到輸出層。
? ? 雙向RNN在神經(jīng)網(wǎng)絡(luò)里的時序如圖7-37所示。
? ? 在按照時間序列正向運算之后,網(wǎng)絡(luò)又從時間的最后一項反向地運算一遍,即把時刻的輸入與默認值0一起生戒反向的0u3,把反向ou3當(dāng)成2時刻的輸入與原來的時刻輸人一起生成反向Qu2,依此類推,直到第一個時序數(shù)據(jù)
雙向循環(huán)神經(jīng)網(wǎng)絡(luò)有兩個輸出:一個是正向輸出,另一個是反向輸出。最終會把輸出結(jié)果通過concat并聯(lián)在一起,然后交給后面的層來處理。
假設(shè)單向的循環(huán)神經(jīng)網(wǎng)絡(luò)輸出的形狀為[seq,batch,nhidden],則雙向循環(huán)神經(jīng)網(wǎng)絡(luò)輸出的形狀就會交成[seq,batch,nhidden×2]
在大多數(shù)應(yīng)用中,基于時間序列與上下文有關(guān)的類似NLP中自動回答類的問題,一般使用雙向LSTM配合LSTM或RNN橫向擴展來實現(xiàn),效果非常好。
總結(jié)
以上是生活随笔為你收集整理的【Pytorch神经网络理论篇】 18 循环神经网络结构:LSTM结构+双向RNN结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cursor用法java,Cursor的
- 下一篇: lgg6 android 9,LG G6