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