RNN及LSTM原理

RNN

爲什麼需要RNN(循環神經網絡)

們都只能單獨的取處理一個個的輸入,前一個輸入和後一個輸入是完全沒有關係的。但是,某些任務需要能夠更好的處理序列的信息,即前面的輸入和後面的輸入是有關係的。

比如,當我們在理解一句話意思時,孤立的理解這句話的每個詞是不夠的,我們需要處理這些詞連接起來的整個序列; 當我們處理視頻的時候,我們也不能只單獨的去分析每一幀,而要分析這些幀連接起來的整個序列。

RNN的結構及變體

在這裏插入圖片描述
左側是摺疊起來的樣子,右側是展開的樣子。其中,xtx_{t}是一個向量或矩陣,它表示t時刻的輸入層的值;sts_{t}是一個向量或矩陣,它表示隱藏層的值;U是輸入層到隱藏層的權重矩陣;o是輸出層的值;V是隱藏層到輸出層的權重矩陣;循環神經網絡的t時刻的隱藏層sts_{t}不僅僅取決於當前時刻的輸入xtx_{t},還取決於上一時刻隱藏層的值st1s_{t-1};權重矩陣 W就是隱藏層上一時刻的值作爲這一次的輸入的權重。公式說明如下:
Ot=g(VSt) O_{t}=g(V \cdot S_{t})
St=f(UXt+WSt1) S_{t}=f(U \cdot X_{t}+W \cdot S_{t-1})
除上述特點之外,標準RNN的還有以下特點:
1、權值共享,圖中的W全是相同的,U和V也一樣。
2、每一個輸入值都只與它本身的那條路線建立權連接,不會和別的神經元連接。
以上是RNN的標準結構,然而在實際中這一種結構並不能解決所有問題,例如我們輸入爲一串文字,輸出爲分類類別,那麼輸出就不需要一個序列,只需要單個輸出。如圖:
在這裏插入圖片描述
同樣的,我們有時候還需要單輸入但是輸出爲序列的情況。那麼就可以使用如下結構:
在這裏插入圖片描述
還有一種結構是輸入雖是序列,但不隨着序列變化,就可以使用如下結構:
在這裏插入圖片描述

重要變體之Encoder-Decoder

原始的N vs N RNN要求序列等長,然而我們遇到的大部分問題序列都是不等長的,如機器翻譯中,源語言和目標語言的句子往往並沒有相同的長度。所以有1 vs 1、1 vs N、N vs 1、N vs M,下面我們來介紹RNN最重要的一個變種:N vs M。這種結構又叫Encoder-Decoder模型,也可以稱之爲Seq2Seq模型。
在這裏插入圖片描述
從名字就能看出,這個結構的原理是先編碼後解碼。左側的RNN用來編碼得到c,拿到c後再用右側的RNN進行解碼。得到c有多種方式,最簡單的方法就是把Encoder的最後一個隱狀態賦值給c,還可以對最後的隱狀態做一個變換得到c,也可以對所有的隱狀態做變換。

RNN的訓練方法—BPTT

BPTT(back-propagation through time)算法是常用的訓練RNN的方法,其實本質還是BP算法,只不過RNN處理時間序列數據,所以要基於時間反向傳播,故叫隨時間反向傳播。BPTT的中心思想和BP算法相同,沿着需要優化的參數的負梯度方向不斷尋找更優的點直至收斂。綜上所述,BPTT算法本質還是BP算法,BP算法本質還是梯度下降法,那麼求各個參數的梯度便成了此算法的核心。
需要尋優的參數有三個,分別是U、V、W。與BP算法不同的是,其中W和U兩個參數的尋優過程需要追溯之前的歷史數據,參數V相對簡單隻需關注目前,那麼我們就來先求解參數V的偏導數。
L(t)V=L(t)o(t)o(t)V \frac{\partial L^{(t)}}{\partial V}=\frac{\partial L^{(t)}}{\partial o^{(t)}} \cdot \frac{\partial o^{(t)}}{\partial V}
這是t時刻的偏導,但RNN的損失是隨着時間累加的,所以不能只求t時刻的偏導。
L=t=1nL(t) L=\sum_{t=1}^{n}L^{(t)}
LV=t=1nL(t)o(t)o(t)V \frac{\partial L}{\partial V}= \sum_{t=1}^{n} \frac{\partial L^{(t)}}{\partial o^{(t)}} \cdot \frac{\partial o^{(t)}}{\partial V}

RNN的梯度消失梯度爆炸問題

由於RNN和CNN一樣都是鏈式法則來更新參數且激活一樣,那必然也存在梯度消失梯度爆炸的問題。梯度消失就意味消失那一層的參數再也不更新,那麼那一層隱層就變成了單純的映射層,毫無意義了。
你可能會提出異議,RNN明明與深層神經網絡不同,RNN的參數都是共享的,即某時刻的梯度是此時刻和之前時刻的累加,即使傳不到最深處,那淺層也是有梯度的。這當然是對的,但如果我們根據有限層的梯度來更新更多層的共享的參數一定會出現問題的,因爲將有限的信息來作爲尋優根據必定不會找到所有信息的最優解。怎麼改善“梯度消失”呢:1、選取更好的激活函數;2、改變傳播結構等。

LSTM

LSTM(long short-term memory),長短期記憶網絡,是RNN的一種變體。RNN由於梯度消失的原因只能有短期記憶,LSTM網絡通過精妙的門控制將加法運算帶入網絡中,一定程度上解決了梯度消失的問題。只能說一定程度上,過長的序列還是會出現“梯度消失”,所以LSTM叫長一點的“短時記憶”。

長期依賴(Long-Term Dependencies)問題

RNN 的關鍵點之一就是他們可以用來連接先前的信息到當前的任務上。
如果我們試着預測 “the clouds are in the sky” 最後的詞,我們並不需要除這句話之外的任何其他的上下文。在這樣的場景中,相關的信息和預測的詞位置之間的間隔是非常小的,RNN 能夠很好的學到先前的信息。

但總會有一些更加複雜的場景,假設我們試着去預測“I grew up in France… I speak fluent French”最後的詞。當前的信息建議下一個詞可能是一種語言的名字,但是如果我們需要弄清楚是什麼語言,我們是需要先前提到的離當前位置很遠的 France 的上下文的。在這樣的場景中,相關信息和當前預測位置之間的間隔就變得相當的大。

不幸的是,在這個間隔不斷增大時,RNN 會喪失學習到連接如此遠的信息的能力。造成這種情況的原因主要跟訓練 RNN 變得非常困難有關,然而幸運的是LSTM 並沒有這個問題。

LSTM網絡

Long Short Term 網絡—— 一般就叫做 LSTM ——是一種 RNN 特殊的類型,可以學習長期依賴信息。LSTMs 刻意的設計去避免長期依賴問題。記住長期的信息在實踐中RNN幾乎默認的行爲,但是卻需要很大的代價去學習這種能力。LSTM的主要結構如下:
在這裏插入圖片描述
在上圖中,每一條黑線傳輸着一整個向量,從一個節點的輸出到其他節點的輸入。粉紅色的圓圈叉代表點乘操作(pointwise operations),粉紅色的圓圈加代表向量的加法操作。而黃色的方框是學習到的神經網絡層,合在一起的線條表示向量的連接操作,分叉的線條表示他的內容被複制到了不同的位置。
在這裏插入圖片描述
LSTMs的關鍵就是細胞狀態(cell state),在下面這個圖的頂部上貫穿運行的水平線就是細胞狀態。
細胞轉態就像傳送帶一樣,從上一個時刻的狀態傳到下一個時刻的狀態,在整個鏈上運行,只有一些少量的線性交互。
在這裏插入圖片描述
LSTM精心的設計了一種結構去移除或者添加元素到細胞狀態(cell state)上, 這種結構叫做門限(gates)。門限(gates)使得信息可以選擇性的通過,它是由一個sigmoid神經網絡層和一個點乘乘法操作組成。
在這裏插入圖片描述
sigmoid層輸出0到1之間的數值,表示每個組件有多少量可以通過。0代表“所有的不能量通過”,而1代表“所有的量都可以通過”。一個LSTM有三個這樣的門限(gates),來控制細胞狀態(cell state)。
下面開始一步一步的看LSTM怎麼工作的。
第一步:LSTM的第一步是決定我們要從細胞狀態(cell state)中丟棄哪些信息。這個決定是由一個sigmoid層叫“忘記門限層”所決定的。它的輸入爲ht1h_{t−1}xtx_{t}, 輸出0到1間的數到細胞轉態(cell state)Ct1C_{t−1}。其中1表示“完全的保留”而0表示“完全的放棄”。
在這裏插入圖片描述
第二步:LSTM的第二步是決定哪些新的信息需要存儲在細胞狀態中。這包含兩部分:第一部分是一個sigmoid層叫“輸入門限層決定哪些值我們需要去更新。第二部分是一個tanh層,創建一個新的候選向量C^t\widehat{C}_{t},會被加入到這狀態上。然後將這兩個部分組合產生一個新的更新狀態。
在這裏插入圖片描述
第三步計算新的t時刻的細胞狀態。現在是時候去更新老的細胞狀態Ct1C_{t−1},到一個新的細胞狀態CtC_{t}。將舊狀態Ct1C_{t−1}ftf_{t}相乘,需要丟棄的我們會更早的丟棄。然後加上itC^ti_{t}∗\widehat{C}_{t},這就是這新的候選值,決定了有多少狀態值需要去更新。
在這裏插入圖片描述
第四步決定需要輸出什麼。輸出是基於我們的細胞狀態,我們把細胞狀態通過tanh(輸出-1到1之間的值)進行處理,然後再乘上sigmoid的輸出,最後我們僅僅會輸出我們確定輸出的那部分。
在這裏插入圖片描述

LSTM變體

變體一:到目前爲止,已經描述了相對正常的LSTM,但是並不是所有的LSTM都和上面講述的相同。事實上,每篇論文上涉及的LSTM都有一些稍微的不同,這個差異是很小的,但是有些確實值得提及。
一種很流行的LSTM變體是由Gers & Schmidhuber (2000)所介紹,它增加了“peephole connections”, 也就是說,讓門限層也接收細胞狀態的輸入
在這裏插入圖片描述
變體二:另外一種變體是使用couple forget 和 輸入門限(input gates)。不是明確地把需要丟棄什麼和需要添加新的信息分離開來, 而是把這些決策放在一起。
在這裏插入圖片描述
變體三:一種稍微變化大一點的LSTM變體是Gated Recurrent Unit,或者GRU,由 Cho et al. (2014).提出的,它組合了忘記和輸入門到一個“update gate”,並且合併了細胞狀態和隱含層狀態。這個模型比標準的LSTM模型更加的簡單,也慢慢的流行起來了。
在這裏插入圖片描述
僅僅列舉了部分流行的LSTM變體,還有很多其他的變體,這裏不一一列舉了。

參考
RNN
https://blog.csdn.net/zhaojc1995/article/details/80572098
LSTM
https://blog.csdn.net/shinanhualiu/article/details/49864219

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章