RNN與LSTM網路簡述
**最近看到一個blog,對LSTM模型介紹的很全面,所以我在這裡記錄一下。後續會逐漸補充公式推導的部分。
**RNN關鍵點之一是連線先前的資訊到當前的任務中,而LSTM模型是一種特別的RNN。不幸的是RNN對長期依賴資訊的學習能力不足,會出現梯度消失等問題。而LSTM網路就是解決長短時的資訊依賴問題。
1.簡介
LSTM網路全稱為 Long Short-Term Memory,長期短期記憶模型,被設計用來學習長期依賴資訊。與RNN模型對比,所有 RNN 都具有一種重複神經網路模組的鏈式的形式。在標準的 RNN 中,這個重複的模組只有一個非常簡單的結構,例如一個 tanh 層。如下圖所示:
LSTM 同樣是這樣的結構,但是重複的模組擁有一個不同的結構。不同於單一神經網路層,這裡是有四個,以一種非常特殊的方式進行互動。
在上面的圖例中,每一條黑線傳輸著一整個向量,從一個節點的輸出到其他節點的輸入。粉色的圈代表 pointwise 的操作,諸如向量的和,而黃色的矩陣就是學習到的神經網路層。合在一起的線表示向量的連線,分開的線表示內容被複制,然後分發到不同的位置。
2.詳述
LSTM 的關鍵就是Cell狀態,水平線在圖上方貫穿執行。上方的橫線被用來記憶長期依賴資訊,而下方的橫線我的理解是儲存短期的依賴資訊。
2.1LSTM網路中忘記資訊功能
LSTM網路中,資訊的遺忘主要是使用一個sigmoid函式和一個pointwise乘法。
在上圖中,
2.2決定哪些資訊被記憶
記憶部分稍微複雜,主要是對輸入做sigmoid函式以及tanh函式並做pointwise乘法,最後加到cell中去。
把舊狀態
2.3決定哪些資訊被輸出
最終,我們需要確定輸出什麼值。這個輸出將會基於我們的Cell狀態,但是也是一個過濾後的版本。首先,我們執行一個 sigmoid 層來確定Cell狀態的哪個部分將輸出出去。接著,我們把細胞狀態通過 tanh 進行處理(得到一個在 -1 到 1 之間的值)並將它和 sigmoid 門的輸出相乘,最終我們僅僅會輸出我們確定輸出的那部分。
2.4公式推導
以後有待補充
3tanh與sigmoid函式的區別
3.1sigmoid函式
3.2tanh函式
4.RNN網路
本該先介紹RNN網路,不過比較懶放在了後面。
4.1具體流程
step1, raw text: 接觸LSTM模型不久,簡單看了一些相關的論文,還沒有動手實現過。然而至今仍然想不通LSTM神經網路究竟是怎麼工作的。
step2, tokenize (中文得分詞): sentence1: 接觸 LSTM 模型 不久 ,簡單 看了 一些 相關的 論文 , 還 沒有 動手 實現過 。
sentence2: 然而 至今 仍然 想不通 LSTM 神經網路 究竟是 怎麼 工作的。
step3, dictionarize: sentence1: 1 34 21 98 10 23 9 23 sentence2: 17 12 21 12 8 10 13 79 31 44 9 23
step4, padding every sentence to fixed length: sentence1: 1 34 21 98 10 23 9 23 0 0 0 0 0 sentence2: 17 12 21 12 8 10 13 79 31 44 9 23 0
step5, mapping token to an embeddings: sentence1: ,每一列代表一個詞向量,詞向量維度自行確定;矩陣列數固定為time_step length。
step6, feed into RNNs as input: 假設 一個RNN的time_step 確定為 ,則padded sentence length(step5中矩陣列數)固定為 。一次RNNs的run只處理一條sentence。每個sentence的每個token的embedding對應了每個時序 的輸入 。一次RNNs的run,連續地將整個sentence處理完。
step7, get output:看圖,每個time_step都是可以輸出當前時序 的隱狀態 ;但整體RNN的輸出 是在最後一個time_step 時獲取,才是完整的最終結果。
step8, further processing with the output:我們可以將output根據分類任務或迴歸擬合任務的不同,分別進一步處理。比如,傳給cross_entropy&softmax進行分類……或者獲取每個time_step對應的隱狀態 ,做seq2seq 網路。
4.2介紹
RNN的一個特點是所有的隱層共享引數,整個網路只用這一套引數。
**RNNs包含輸入單元(Input units),輸入集標記為
**上圖將迴圈神經網路進行展開成一個全神經網路。例如,對一個包含5個單詞的語句,那麼展開的網路便是一個五層的神經網路,每一層代表一個單詞。對於該網路的計算過程如下:
**
PS:使用計算機對自然語言進行處理,便需要將自然語言處理成為機器能夠識別的符號,加上在機器學習過程中,需要將其進行數值化。而詞是自然語言理解與處理的基礎,因此需要對詞進行數值化,詞向量(Word Representation,Word embeding)[1]便是一種可行又有效的方法。何為詞向量,即使用一個指定長度的實數向量v來表示一個詞。有一種種最簡單的表示方法,就是使用One-hot vector表示單詞,即根據單詞的數量|V|生成一個|V| * 1的向量,當某一位為1的時候其他位都為零,然後這個向量就代表一個單詞。缺點也很明顯:
1.由於向量長度是根據單詞個數來的,如果有新詞出現,這個向量還得增加,麻煩!(Impossible to keep up to date);
2.主觀性太強(subjective),這麼多單詞,還得人工打labor並且adapt.。
現在有一種更加有效的詞向量模式,該模式是通過神經網路或者深度學習對詞進行訓練,輸出一個指定維度的向量,該向量便是輸入詞的表達。如word2vec。
**
**需要注意的是:
你可以認為隱藏層狀態
**在傳統神經網路中,每一個網路層的引數是不共享的。而在RNNs中,每輸入一步,每一層各自都共享引數U,V,W。其反應了RNNs中的每一步都在做相同的事,只是輸入不同,因此大大地降低了網路中需要學習的引數;這裡並沒有說清楚,解釋一下,傳統神經網路的引數是不共享的,並不是表示對於每個輸入有不同的引數,而是將RNN是進行展開,這樣變成了多層的網路,如果這是一個多層的傳統神經網路,那麼
**上圖中每一步都會有輸出,但是每一步都要有輸出並不是必須的。比如,我們需要預測一條語句所表達的情緒,我們僅僅需要關係最後一個單詞輸入後的輸出,而不需要知道每個單詞輸入後的輸出。同理,每步都需要輸入也不是必須的。RNNs的關鍵之處在於隱藏層,隱藏層能夠捕捉序列的資訊。
4.3梯度消失現象
tanh函式及其導數的影像:
可見tanh導數的值域是(0,1],兩端都非常平緩並趨於0。
再看我們的梯度公式:
用的就是tanh導數,在訓練的後期,梯度會變得比較小,如果幾個趨於0的值相乘的話,乘積就會變得非常小,就會出現梯度消失現象。同樣的情況也會出現在sigmoid函式。
由於遠距離的時刻的梯度貢獻接近於0,因此很難學習到遠距離的依賴關係。
也很容易想象到當導數都很大的時候,就會出現梯度爆炸的情況,但是它的受重視程度不如梯度消失問題,原因有二:
- 梯度爆炸很明顯,梯度值會變成NaN,程式會崩潰。
- 用一個預定義值來裁剪梯度值是解決梯度爆炸的一個非常簡單實用的辦法,而梯度消失問題則很難解決。
幸好還有一些辦法來解決梯度消失問題。
- 合適的引數初始化可以減少梯度消失的影響。
- 使用ReLU啟用函式
- LSTM和GRU架構。
4.4RNN前向傳播與反向傳播演算法推導
4.4.1前向傳播推導
4.4.2反向傳播推導
有了RNN前向傳播演算法的基礎,就容易推匯出RNN反向傳播演算法的流程了。RNN反向傳播演算法的思路和DNN是一樣的,即通過梯度下降法一輪輪的迭代,得到合適的RNN模型引數U,W,V,b,c。由於我們是基於時間反向傳播,所以RNN的反向傳播有時也叫做BPTT(back-propagation through time)。當然這裡的BPTT和DNN也有很大的不同點,即這裡所有的U,W,V,b,c在序列的各個位置是共享的,反向傳播時我們更新的是相同的引數。
為了簡化描述,這裡的損失函式我們為對數損失函式,輸出的啟用函式為softmax函式,隱藏層的啟用函式為tanh函式。
但是W,U,b的梯度計算就比較的複雜了。從RNN的模型可以看出,在反向傳播時,在在某一序列位置t的梯度損失由當前位置的輸出對應的梯度損失和序列索引位置t+1時的梯度損失兩部分共同決定。對於W在某一序列位置t的梯度損失需要反向傳播一步步的計算。我們定義序列索引t位置的隱藏狀態的梯度為:
引用blog:
https://www.cnblogs.com/pinard/p/6509630.html
https://blog.csdn.net/heyongluoyao8/article/details/48636251
https://www.jianshu.com/p/9dc9f41f0b29
相關文章
- RNN、LSTMRNN
- RNN神經網路模型綜述RNN神經網路模型
- RNN-迴圈神經網路和LSTM_01基礎RNN神經網路
- NLP教程(5) - 語言模型、RNN、GRU與LSTM模型RNN
- 簡單理解LSTM神經網路神經網路
- 迴圈神經網路LSTM RNN迴歸:sin曲線預測神經網路RNN
- LSTM解決RNN梯度爆炸(消失)RNN梯度
- 從網路架構方面簡析迴圈神經網路RNN架構神經網路RNN
- LSTM神經網路神經網路
- 貌離神合的RNN與ODE:花式RNN簡介RNN
- 【神經網路篇】--RNN遞迴神經網路初始與詳解神經網路RNN遞迴
- TensorFlow系列專題(七):一文綜述RNN迴圈神經網路RNN神經網路
- LSTM 長短期記憶網路
- LSTM - 長短期記憶網路
- 迴圈神經網路(RNN)神經網路RNN
- 迴圈神經網路 RNN神經網路RNN
- 簡述 Polkadot 和區塊鏈網際網路區塊鏈
- 人人都能用Python寫出LSTM-RNN的程式碼![你的神經網路學習最佳起步]PythonRNN神經網路
- Tensorflow實現RNN(LSTM)手寫數字識別RNN
- IMPLEMENTING A GRU/LSTM RNN WITH PYTHON AND THEANO - 學習筆記RNNPython筆記
- 機器學習:深入理解LSTM網路 (二)機器學習
- LSTM變種-GRU網路結構
- 簡單的RNN和BP多層網路之間的區別RNN
- SqueezeNet/SqueezeNext簡述 | 輕量級網路
- 詳細展示RNN的網路結構RNN
- 圖神經網路綜述:模型與應用神經網路模型
- 簡述脈衝神經網路SNN:下一代神經網路神經網路
- ISASERVER2004對多重網路支援功能簡述Server
- 網路流量預測入門(三)之LSTM預測網路流量
- (一)線性迴圈神經網路(RNN)神經網路RNN
- 網路廣告研究綜述
- 網路資訊保安論述
- ShuffleNetV1/V2簡述 | 輕量級網路
- 十 | 門控迴圈神經網路LSTM與GRU(附python演練)神經網路Python
- YJango的迴圈神經網路——實現LSTMGo神經網路
- 視覺化LSTM網路:探索「記憶」的形成視覺化
- 迴圈神經網路(RNN)模型與前向反向傳播演算法神經網路RNN模型反向傳播演算法
- (二)非線性迴圈神經網路(RNN)神經網路RNN