1. RNN循環神經網絡
1.1 結構
循環神經網絡(recurrent neural network,RNN)源自於1982年由Saratha Sathasivam 提出的霍普菲爾德網絡。RNN的主要用途是處理和預測序列數據。全連接的前饋神經網絡和卷積神經網絡模型中,網絡結構都是從輸入層到隱藏層再到輸出層,層與層之間是全連接或部分連接的,但每層之間的節點是無連接的。

圖 11 RNN-rolled
如圖 11所示是一個典型的循環神經網絡。對於循環神經網絡,一個非常重要的概念就是時刻。循環神經網絡會對於每一個時刻的輸入結合當前模型的狀態給出一個輸出。從圖 11中可以看到,循環神經網絡的主體結構A的輸入除了來自輸入層Xt,還有一個循環的邊來提供當前時刻的狀態。在每一個時刻,循環神經網絡的模塊A會讀取t時刻的輸入Xt,並輸出一個值Ht。同時A的狀態會從當前步傳遞到下一步。因此,循環神經網絡理論上可以被看作是同一神經網絡結構被無限復制的結果。但出於優化的考慮,目前循環神經網絡無法做到真正的無限循環,所以,現實中一般會將循環體展開,於是可以得到圖 12所示的展示結構。

圖 12 RNN-unrolled
在圖 12中可以更加清楚的看到循環神經網絡在每一個時刻會有一個輸入Xt,然后根據循環神經網絡當前的狀態At,提供一個輸出ht。而循環神經網絡的結構特征可以很容易得出它最擅長解決的問題是與世界序列相關的。循環神經網絡也是處理這類問題時最自然的神經網絡結構。對於一個序列數據,可以將這個序列上不同時刻的數據依次傳入循環神經網絡的輸入層,而輸出可以是對序列中下一個時刻的預測,也可以是對當前時刻信息的處理結果(比如語音識別結果)。循環神經網絡要求每一個時刻都有一個輸入,但是不一定每一個時刻都需要有輸出。
1.2 網絡
如之前所介紹,循環神經網絡可以被看作是同一神經網絡結構在時間序列上被復制多次的結果,這個復制多次的結構被稱為循環體。如何設計循環體的網絡結構是循環神經網絡解決實際問題的關鍵。和卷積神經網絡每層神經元中參數是共享的類似,在循環神經網絡中,循環體網絡結構中的參數(權值和偏置)在不同時刻也是共享的。

圖 13 SimpleRNN
圖 13展示了一個使用最簡單的循環體結構的循環神經網絡,在這個循環體中只使用了一個類似全連接層的神經網絡結構。下面將通過圖 13中所展示的神經網絡來介紹循環神經網絡前向傳播的完整流程。循環神經網絡中的狀態是通過一個向量來表示的,這個向量的維度也稱為神經網絡隱藏層的大小,假設其為h。從圖 13種可以看出,循環體中的神經網絡的輸入有兩部分,一部分為上一時刻的狀態,另一部分為當前時刻的輸入樣本。對於時間序列數據來說,每一時刻的輸入樣例可以是當前時刻的數據;對於語言模型來說,輸入樣例可以是當前單詞對應的單詞向量。
假設輸入向量的維度為x,那么圖 13中循環體的全連接層神經網絡的輸入大小為h+x。也就是將上一時刻的狀態與當前時刻的輸入拼接成一個大的向量作為循環體中神經網絡的輸入。因為該神經網絡的輸出為當前時刻的狀態,於是輸出層的節點個數也為h,循環體中的參數個數為(h+x)*h+h個(因為有h個元素的輸入向量和x個元素的輸入向量,及h個元素的輸出向量;可用簡單理解為輸入層有h+x個神經元,輸出層有h個神經元,從而形成一個全連接的前饋神經網絡,有(h+x)*h個權值,有h個偏置)。

圖 14 example RNN
如圖 14所示具有兩個時刻的RNN網絡,其中t0和t1的權值和偏置是相同的,只是不同的輸入而已;同時由於輸入向量是1維的,而輸入狀態為2維的,合並起來的向量是3維的;其中在每個循環體的狀態輸出是2維的,然后經過一個全連接的神經網絡計算后,最終輸出是1維向量結構。
1.3 問題
循環神經網絡工作的關鍵點就是使用歷史的信息來幫助當前的決策。例如使用之前出現的單詞來加強對當前文字的理解。循環神經網絡可以更好地利用傳統神經網絡結構所不能建模的信息,但同時,這也帶來了更大的技術挑戰——長期依賴(long-term dependencies)問題。
在有些問題中,模型僅僅需要短期內的信息來執行當前的任務。比如預測短語"大海的顏色是藍色"中最后一個單詞"藍色"時,模型並不需要記憶這個短語之前更長的上下文信息——因為這一句話已經包含了足夠信息來預測最后一個詞。在這樣的場景中,相關的信息和待預測詞的位置之間的間隔很小,循環神經網絡可以比較容易地利用先前信息。
但同樣也會有一些上下文場景比較復雜的情況。比如當模型試着去預測段落"某地開設了大量工廠,空氣污染十分嚴重……這里的天空都是灰色的"的最后一個單詞時,僅僅根據短期依賴就無法很好的解決這種問題。因為只根據最后一小段,最后一個詞可以是"藍色的"或者"灰色的"。但如果模型需要預測清楚具體是什么顏色,就需要考慮先前提到但離當前位置較遠的上下文信息。因此,當前預測位置和相關信息之間的文本間隔就有可能變得很大。當這個間隔不斷增大時,類似圖 13中給出的簡單循環神經網絡有可能喪失學習到距離如此遠的信息的能力。或者在復雜語言場景中,有用信息的間隔有大有小、長短不一,循環神經網絡的性能也會受到限制。
2. LSTM長短記憶網絡
2.1 概述
長短記憶網絡(long short term memory, LSTM)的設計正是為了解決上述RNN的依賴問題,即為了解決RNN有時依賴的間隔短,有時依賴的間隔長的問題。其中循環神經網絡被成功應用的關鍵就是LSTM。在很多的任務上,采用LSTM結構的循環神經網絡比標准的循環神經網絡的表現更好。LSTM結構是由Sepp hochreiter和Jurgen Schemidhuber於1997年提出的,它是一種特殊的循環神經網絡結構。
2.2 結構
LSTM的設計就是為了精確解決RNN的長短記憶問題,其中默認情況下LSTM是記住長時間依賴的信息,而不是讓LSTM努力去學習記住長時間的依賴。

圖 21 LSTM
所有循環神經網絡都有一個重復結構的模型形式,在標准的RNN中,重復的結構是一個簡單的循環體,如圖 13 所示的A循環體。然而LSTM的循環體是一個擁有四個相互關聯的全連接前饋神經網絡的復制結構,如圖 21所示。
目前可以先不必了解LSTM細節,只需先明白圖 22所示的符號語義:

圖 22 notation
-
Neural NetWork Layer:該圖表示一個神經網絡層;
-
Pointwise Operation:該圖表示一種操作,如加號表示矩陣或向量的求和、乘號表示向量的乘法操作;
-
Vector Tansfer:每一條線表示一個向量,從一個節點輸出到另一個節點;
-
Concatenate:該圖表示兩個向量的合並,即由兩個向量合並為一個向量,如有X1和X2兩向量合並后為[X1,X2]向量;
-
Copy:該圖表示一個向量復制了兩個向量,其中兩個向量值相同。
2.3 分析
2.3.1 核心設計
LSTM設計的關鍵是神經元的狀態,如圖 23所示頂部的水平線。神經元的狀態類似傳送帶一樣,按照傳送方向從左端被傳送到右端,在傳送過程中基本不會改變,只是進行一些簡單的線性運算:加或減操作。神經元的通過線性操作能夠小心地管理神經元的狀態信息,將這種管理方式稱為門操作(gate)。

圖 23 C-line
門操作能夠隨意的控制神經元狀態信息的流動,如圖 24所示,它由一個sigmoid激活函數的神經網絡層和一個點乘運算組成。Sigmoid層輸出要么是1要么是0,若是0則不能讓任何數據通過;若是1則意味着任何數據都能通過。

圖 24 gate
LSTM有三個門來管理和控制神經元的狀態信息。
2.3.2 遺忘門
LSTM的第一步是決定要從上一個時刻的狀態中丟棄什么信息,其是由一個sigmoid全連接的前饋神經網絡的輸出阿里管理,將這種操作稱為遺忘門(forget get layer)。如圖 25所示。這個全連接的前饋神經網絡的輸入是ht-1和Xt組成的向量,輸出是ft向量。ft向量是由1和0組成,1表示能夠通過,0表示不能通過。

圖 25 focus-f
2.3.3 輸入門
第二步決定哪些輸入信息要保存到神經元的狀態中。這又兩隊前饋神經網絡,如圖 26所示。首先是一個sigmoid層的全連接前饋神經網絡,稱為輸入門(input gate layer),其決定了哪些值將被更新;然后是一個tanh層的全連接前饋神經網絡,其輸出是一個向量Ct,Ct向量可以被添加到當前時刻的神經元狀態中;最后根據兩個神經網絡的結果創建一個新的神經元狀態。

圖 26 focus-i
2.3.4 狀態控制
第三步就可以更新上一時刻的狀態Ct-1為當前時刻的狀態Ct了。上述的第一步的遺忘門計算了一個控制向量,此時可通過這個向量過濾了一部分Ct-1狀態,如圖 27所示的乘法操作;上述第二步的輸入門根據輸入向量計算了新狀態,此時可以通過這個新狀態和Ct-1狀態根據一個新的狀態Ct,如圖 27所示的加法操作。

圖 27 focus-C
2.3.5 輸出門
最后一步就是決定神經元的輸出向量ht是什么,此時的輸出是根據上述第三步的Ct狀態進行計算的,即根據一個sigmoid層的全連接前饋神經網絡過濾到一部分Ct狀態作為當前時刻神經元的輸出,入土2-8所示。這個計算過程是:首先通過sigmoid層生成一個過濾向量;然后通過一個tanh函數計算當前時刻的Ct狀態向量(即將向量每個值的范圍變換到[-1,1]之間);接着通過sigmoid層的輸出向量過濾tanh函數結果,即為當前時刻神經元的輸出。

圖 28 focus-o
2.4 LSTM 延伸網絡
上述介紹的LSTM結構是一個正常的網絡結構,然而並不是所有的LSTM網絡都是這種結構,實際上,LSTM有很多種變體,即為很多種變化形態。如下介紹幾種常用形態結構:
2.4.1 Peephole connections
一種流行的LSTM變體是由Gers&Schmidhuber(2000)提出的網絡結構,如圖 29所示。通過將上一時刻的狀態Ct-1合並到各個門上,從而更詳細控制各個門的管理。

圖 29 var-peepholes
2.4.2 Coupled forget and input gates
另一種變體是使用耦合的遺忘門和輸入門,如圖 210所示。

圖 210 var-tired
2.4.3 Gated Recurrent Unit
另一種變體是Gated Recurrrent Unit,如圖 211所示。

圖 211 var-GRU
3. 參考文獻
[1]. Understanding LSTM Networks.
