1. RNN迴圈神經網路 1.1 結構 迴圈神經網路(recurrent neural network,RNN)源自於1982年由Saratha Sathasivam 提出的霍普菲爾德網路。RNN的主要用途是處理和預測序列數據。全連接的前饋神經網路和捲積神經網路模型中,網路結構都是從輸入層到隱藏層再 ...
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.