序列模型简介——RNN, Bidirectional RNN, LSTM, GRU
既然我們已經有了前饋網絡和CNN,為什么我們還需要序列模型呢?這些模型的問題在于,當給定一系列的數據時,它們表現的性能很差。序列數據的一個例子是音頻的剪輯,其中包含一系列的人說過的話。另一個例子是英文句子,它包含一系列的單詞。前饋網絡和CNN采用一個固定長度作為輸入,但是,當你看這些句子的時候,并非所有的句子都有相同的長度。你可以通過將所有的輸入填充到一個固定的長度來解決這個問題。然而,它們的表現仍然比RNN要差,因為這些傳統模型不了解給定輸入的上下文環境。這就是序列模型和前饋模型的主要區別所在。對于一個句子,當看到一個詞的時候,序列模型試圖從在同一個句子中前面的詞推導出關系。當我們讀一個句子的時候,不會每次遇到一個新詞都會再從頭開始。我們會根據對所讀過單詞的理解來處理之后的每個單詞。
循環神經網絡(Recurrent Neural Network,RNN)
循環神經網絡如上圖所示。在一個時間步驟中的每個節點都接收來自上一個節點的輸入,并且這可以用一個feedback循環來表示。我們可以深入這個feedback循環并以下圖來表示。在每個時間步驟中,我們取一個輸入x_i和前一個節點的輸出a_i-1,對其進行計算,并生成一個輸出h_i。這個輸出被取出來之后再提供給下一個節點。此過程將一直繼續,直到所有時間步驟都被評估完成。
描述如何在每個時間步驟上計算輸出的方程式,如下所示:
在循環神經網絡中的反向傳播發生在圖2中所示箭頭的相反方向上。像所有其它的反向傳播技術一樣,我們評估一個損失函數,并獲取梯度來更新權重參數。循環神經網絡中有意思的部分是從右到左出現的反向傳播。由于參數從最后的時間步驟更新到最初的時間步驟,這被稱為通過時間的反向傳播。
長短期記憶(Long Short-Term Memory)— LSTM網絡
循環神經網絡的缺點是,隨著時間步驟長度的增大,它無法從差得很遠的時間步驟中獲得上下文環境。
為了理解時間步驟t+1的上下文環境,我們有可能需要了解時間步驟0和1中的表示。但是,由于它們相差很遠,因此它們所學的表示無法在時間步驟t+1上向前移動,進而對其起作用。“我在法國長大……我能說一口流利的法語”,要理解你說的法語,網絡就必須遠遠地往后查找。但是,它不能這么做,這個問題可以歸咎于梯度消失的原因。因此,循環神經網絡只能記住短期存儲序列。
為了解決這個問題,Hochreiter & Schmidhuber提出了一種稱為長短期記憶網絡。
LSTM網絡的結構與循環神經網絡保持一致,而重復模塊會進行更多的操作。增強重復模塊使LSTM網絡能夠記住長期依賴關系。讓我們試著分解每個操作,來幫助網絡更好地記憶。
1、忘記門操作
我們從當前時間步驟獲取輸入,并從前一時間步驟獲取學習的表示,之后將它們連接起來。我們將連接后的值傳遞給一個sigmoid函數,該函數輸出一個介于0和1之間的值(f_t)。我們在f_t和c_t-1之間做元素的乘積。如果一個值為0,那么從c_t-1中去掉,如果這個值為1,則完全通過。因此,這種操作也被稱為“忘記門操作”。
2、更新門操作
上圖表示的是“更新門操作”。我們將來自當前時間步驟中的值和前一時間步驟中已學習的表示連接起來。將連接的值通過一個tanh函數進行傳遞,我們生成一些候選值,并通過一個sigmoid函數傳遞,從候選值中選擇一些值,所選的候選值將會被更新到c_t-1。
3、輸出門操作
我們將當前時間步驟的值和前一時間步驟已學習的表示連接起來,并經由一個sigmoid函數傳遞來選擇將要用作輸出的值。我們獲取單元狀態并請求一個tanh函數,然后執行元素方式操作,其只允許選定的輸出通過。
現在,在一個單一單元中要完成很多的操作。當使用更大的網絡時,與循環神經網絡相比,訓練時間將顯著地增加。如果想要減少你的訓練時間,但同時也使用一個能記住長期依賴關系的網絡,那么還有另一個替代LSTM網絡的方法,它被稱為門控循環單元。
門控循環單元(Gated Recurrent Unit?,GRU?Network)
與LSTM網絡不同的是,門控循環單元沒有單元狀態,并且有2個門而不是3個(忘記、更新和輸出)。
門控循環單元使用一個更新門和一個重置門。更新門決定了應該讓多少之前的信息通過,而重置門則決定了應該丟棄多少之前的信息。?在上面的圖中,z_t表示更新門操作,通過使用一個sigmoid函數,我們決定讓哪些之前的信息通過。h_t表示重置門操作,我們將前一時間步驟和當前時間步驟的連接值與r_t相乘。這將產生我們希望從前一時間步驟中所放棄的值。
盡管門控循環單元在計算效率上比LSTM網絡要高,但由于門的數量減少,它在表現方面仍然排在LSTM網絡之后。因此,當我們需要更快地訓練并且手頭沒有太多計算資源的情況下,還是可以選擇使用門控循環單元的。
雙向循環神經網絡
所有上述雙向RNN網絡的一個主要問題是,它們從之前的時間步驟中學習表示。有時,你有可能需要從未來的時間步驟中學習表示,以便更好地理解上下文環境并消除歧義。通過接下來的列子,“He said, Teddy bears are on sale” and “He said, Teddy Roosevelt was a great President。在上面的兩句話中,當我們看到“Teddy”和前兩個詞“He said”的時候,我們有可能無法理解這個句子是指President還是Teddy bears。因此,為了解決這種歧義性,我們需要往前查找。這就是雙向RNN所能實現的。
雙向RNN中的重復模塊可以是常規RNN、LSTM或是GRU。雙向RNN的結構和連接如圖10所示。有兩種類型的連接,一種是向前的,這有助于我們從之前的表示中進行學習,另一種是向后的,這有助于我們從未來的表示中進行學習。
正向傳播分兩步完成:
·我們從左向右移動,從初始時間步驟開始計算值,一直持續到到達最終時間步驟為止;
·我們從右向左移動,從最后一個時間步驟開始計算值,一直持續到到達最終時間步驟為止;
結論
將雙向循環神經網絡與LSTM模塊相結合可以顯著地提高性能,當將它們與監控機制相結合的時候,你可以在機器翻譯、情感化分析等實例中獲得最高水品的性能表現。希望本文對大家有幫助。
?
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的序列模型简介——RNN, Bidirectional RNN, LSTM, GRU的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双十一流量洪峰 支撑阿里核心业务的云数据
- 下一篇: 全面升级 | 阿里云中间件推出3款新品和