循環遞歸RNN,序列建模套路深(深度學習入門係列之十三)
【版權聲明】轉載請注明出處和作者署名。否則作者和雲棲社區有權追究責任。
係列文章
一入侯門“深”似海,深度學習深幾許(入門係列之一)
人工“碳”索意猶盡,智能“矽”來未可知(深度學習入門係列之二)
神經網絡不勝語, M-P模型似可尋(深度學習入門係列之三)
“機器學習”三重門,“中庸之道”趨若人(深度學習入門係列之四)
Hello World感知機,懂你我心才安息(深度學習入門係列之五)
損失函數減肥用,神經網絡調權重(深度學習入門係列之六)
山重水複疑無路,最快下降問梯度(深度學習入門係列之七)
BP算法雙向傳,鏈式求導最纏綿(深度學習入門係列之八)
全麵連接困何處,卷積網絡見解深(深度學習入門係列之九)
卷地風來忽吹散,積得飄零美如畫(深度學習入門係列之十)
局部連接來減參,權值共享肩並肩(深度學習入門係列之十一)
激活引入非線性,池化預防過擬合(深度學習入門係列之十二)
13.1 你可能不具備的一種思維
近來,吳京主演的電影《戰狼 Ⅱ》大獲好評。走進電影院的你,如癡如醉,外加一把愛國淚,絕不肯錯過冷鋒的每一個鏡頭。
假設情況不是這樣,僅想打發無聊時光的你,隨機選擇了一部電影,不湊巧,電影是一部爛片,電影播到10分鍾20分鍾時,你會怎麼辦?是當機立斷地拂袖而去呢?還是強打精神看下去(畢竟電影票花了80塊人民幣啊)?
在經濟學領域,有個重要的概念,叫“沉沒成本”。說的就是,有選擇就有成本,沒有選擇就沒有成本。當我們沒辦法再做選擇時,就不存在成本,這是著名論斷“沉沒成本不是成本”的含義。
要知道,一旦電影開播,影城絕不會退錢給你,因此,這80塊就屬於你付出的“沉沒成本”。如果你真的能踐行“沉沒成本不是成本”的話,那麼你的最佳決策當然是立馬走人。可問題是,又有幾人能做到?
是的,能踐行這個論斷的,隻屬於理性經濟人,它不屬於正常人。包括經濟學家在內的絕大多數人,離開理論假設,在現實生活中,真的很難無視“沉沒成本”。
其實,很多學科都是相同的。如果用計算機術語來說,上麵的含義可以表述為,人們真的很難采用馬爾科夫鏈思維行事。所謂馬爾科夫鏈,通俗來講,就是未來的一切,僅與當前有關,而與曆史無關。人們常說 “要活在當下”,其實這是很難做到的,因為通常人們的每一個決策,都是基於曆史行為和當前狀態疊加作用下做出的。

因此,有人就說,不管是李世石,還是柯潔,他們不僅是敗在計算機的“數據”、“算法”和“算力”上,而且還敗在思維方式上。因為人類不具備馬爾科夫鏈思維(圖13-1)。也就是說,人類不可避免地要受到曆史的影響,人們善於追求前後一致,首尾協調,邏輯一貫。換句話說,人類的行為通常是曆史的產物、習慣的奴隸。
而阿爾法狗在棋盤上的表現,發揮穩定,且時有跳脫之舉。原因很簡單,這些“機器”狗在下每一步棋時,都能做到,以當下的棋局視為起點,過往不究,不受曆史邏輯一貫性的指引及與之相伴的約束。
那麼,現在問題來了。這“過往”的曆史,到底是“究”好呢,還是“不究”好呢?我們知道,雖然這些“機器狗”們下棋能力很強,但仍然屬於弱人工智能(Artificial Narrow Intelligence,ANI)範疇。不然的話,你讓阿爾狗給嬰兒換個紙尿褲試試?
弱人工智能進一步的發展方向,自然就是強人工智能(Artificial General Intelligence,AGI)。所謂強人工智能,就是那種能夠達到人類級別的人工智能。這二者的一個重要差別就在於,弱人工智能不具備很多“常識”。而所謂“常識”,就是常見的知識,它是人類曆史經驗的一種凝結。比如,你向天空拋一個皮球,一兩歲的小嬰兒都知道它會落下來(常識),然後等它落地之後,再屁顛屁顛地去追皮球。而這些領域之外的常識,阿爾法狗是不具備的。
如果你認可“人類智能”,還是強過當前機器的“人工智能”的話,你就知道前麵問題的答案了:這過往的“曆史”還是究得好,因為曆史是未來前進的基石!
既然還是人類的大腦好使,既然曆史在人類決策中有重要作用,既然人工神經網絡是對生物神經網絡模擬,那麼,當前有沒有哪種人工神經網絡,能模擬人腦利用曆史信息來做決策呢?
當然有!這就是我們本章要講的主題“循環神經網絡(Recurrent Neural Network,RNN)”。
看到這兒,或許你都樂了,我去,饒了這麼大的圈子,就為引入這個主題啊。是的,我就是想告訴你,倘若論下圍棋,阿爾法狗穩操勝券勝。但倘若從差異性很強的領域穿越,縱橫捭闔,套路深的那個,還是作為人類的我啊!
13.2 何謂RNN?
玩笑講完,言歸正傳。談到RNN,這裏需要指明,它其實是兩種不同神經網絡的縮寫。一種是時間遞歸神經網絡(recurrent neural network),另一種是結構遞歸神經網絡(recursive neural network)。請注意,很多文獻也分別將它們稱為“循環神經網絡”和“遞歸神經網絡”。在下文中,如果不特別注明,在提及RNN時,指的是“時間遞歸神經網絡”,即“循環神經網絡”。
在前麵章節討論的神經網絡模型(如卷積神經網絡),都無法利用曆史數據的時間依賴關係,來分析數據特征,從而可能導致對當前和未來產生一些不合理的預測。
但在很多實際應用中,數據之間是存在相互依賴關係的。例如,當我們在思考問題時,我們都是在已有經驗和知識的基礎之上,再結合當前實際情況綜合給出決策,而不會把過往的經驗和記憶都“棄之若敝”。
比如說,在《戰狼 Ⅱ》中,當那個中美混血的漂亮女主角一出現,後麵的情節即使不看,我們大致也能預測到,無非是“英雄救美女,美女愛英雄”。看到最後,果不其然。如果連這都猜不到,那我們過去那麼多電影也就白看了。

再比如(圖13-2),如果我們試圖預測一下“天空飛過一隻__”這句話最後一個詞是什麼?利用前麵輸入的一連串的曆史信息:“天 空 飛 過 一 隻”,我們就能大致猜出最後一個詞可能是“小鳥”也可能是“蜻蜓”之類的飛行動物,但定然不能是“人”或“坦克”(常識告訴我們,人和坦克都不能飛),當然也不能是“豬”(即使可能是風口中的豬,但量詞“隻”也把它過濾掉了)。
由此可見,曆史對於我們推測未來,是極有幫助的,不可輕易拋棄。而RNN的核心訴求之一,就是能將以往的信息連接到當前任務之中。
追根溯源,RNN最早是由Hopfiled網絡啟發變種而來[1]。Hopfiled網絡是1982年由約翰·霍普菲爾德提出的網絡結構,此類網絡內部有反饋連接,能夠處理信號中的時間依賴性。1986年,Michael Jordan(他可不是那位NBA籃球之神,而是著名機器學習大師、深度學習大咖吳恩達的導師)借鑒了Hopfiled網絡的思想,首次在神經網絡中引入循環連接[2]。1990年,Jeffrey Elman又在Jordan的研究基礎上,正式提出了RNN模型,不過那時RNN還叫SRN (Simple Recurrent Network,簡單循環網絡)[3]。由於引入了循環,RNN具備有限短期記憶的優勢。
然而,第一代RNN網絡並沒有引起世人矚目。這是因為RNN在利用反向傳播調參過程中產生了嚴重的梯度消失問題。隨後,上世紀90年代後期出現了重大突破,如LSTM(Long Short-Term Memory,長短期記憶網絡[4])等模型的提出,讓新一代的RNN獲得蓬勃發展。
RNN是在自然語言處理領域中最先被用起來的。例如,當前深度學習大家之一Yoshua Bengio,2003年就把RNN用於優化傳統的N元統計模型(N-gram Model)[5],提出了關於單詞的分布式特征表示(distributed representation for words),較好地解決了傳統語言處理模型的“維度咒詛(Curse of Dimensionality)”問題。到後來,RNN的“作用域”越來越大,並不限於自然語言處理,它還在“機器翻譯”、“語音識別(如穀歌的語音搜索,蘋果的Siri應用等)”、“個性化推薦”等眾多領域大放光彩,成為深度學習的三大模型之一。順便提一句,另外兩個模型分別是卷積神經網絡(CNN)和深度信念網絡(DBN)。
13.3 Elman遞歸神經網絡
循環神經網絡之所以被稱之為“循環”,就是因為它的網絡表現形式有循環結構,從而使得過去輸出的信息作為記憶而被保留下來,並可應用於當前輸出的計算中。也就是說,RNN的同一隱層之間的節點是有連接的。圖13-3是傳統的Elman RNN網絡模型的展開結構圖。無論是循環圖,還是展開圖,都有其作用。循環圖(左圖)比較簡潔,而展開圖則能表明其中的計算流程。

觀察圖13-3可以看到,Elman RNN網絡模型除了X向量表示輸入層的值,O向量表示輸出層的值之外,一共就有三類參數值,分別是U、V和 W。假設輸入層神經元個數為n個,隱層的神經元個數為m個,輸出層的神經元個數為r,那麼U是輸入層到隱藏層的權重矩陣,大小為(n×m)維;V是隱層到輸出層的權重矩陣,大小為(m×r)維。前麵這兩個參數矩陣和前饋神經網絡的完全一樣。
那麼,W又是什麼呢?通過前麵的介紹我們知道,RNN中隱層\( s^{(t)} \)的值,不僅僅取決於當前輸入X,還取決於上一次隱層的值\( s^{(t-1)} \)。如此一來,W表示的就是隱藏層上一次輸出值而作為本次輸入的權重矩陣,大小為(m×m)維。
從圖13-3中可以看到,在理論上,這個模型可以擴展到無限維,也就是可以支撐無限的時間序列,但實際並非如此,就如同人腦的記憶力是有限的一樣。下麵我們對Elman RNN網絡的結構和符號進行形式化定義。我們先用一個函數\( f^{(t)} \)表示經過t步展開後的循環,如公式(13-1)所示。
函數\( f^{(t)} \)將過去的所有序列作為輸入,從而生成當前的狀態,其中θ表示激活函數σ中所有的參數集合。\( X^{(t)} \)表示序列中的第t時刻或第t時間步的輸入數據,它通常也是一個向量;向量\( s^{(t)} \)表示的是隱層的值,如圖13-4所示。

從圖13-4可以看到,隱層是RNN模型最核心的模型,也是處理“記憶”信息的地方。事實上,不同類型的遞歸網絡的設計,其差別都體現在隱層設計的不同上。
在公式(13-1)中,激活函數σ是一個平滑的、非線性的有界函數,它可以是前些章節提到的Sigmoid、Tanh或ReLU等。一般來講,我們還需要設定一個特殊的初始隱藏帶有\( s^{(-1)} \),表明初始的“記憶狀態”,通常都會將其置為零。不論是從圖13-4,還是從公式(13-1),都可以看到,第t時間的記憶信息是由前(t-1)個時間步累計而成的結果\( s^{(t-1)} \)和當前的輸出\(X^{(t)} \)共同決定的。這些信息保存在隱層中,不斷向後傳遞,跨越多個時間步,共同影響每個輸入新信息的處理結果[6]。
13.4 循環神經網絡的生物學機理
RNN利用環路(即上一層的輸出)來當做本層的部分輸入,其機製與動物大腦的工作機製非常類似。人們常說,“書讀百遍,其義自見”。書為什麼要讀百遍呢?這裏的“百遍”自然是虛詞,表示很多遍,它表示一種強化記憶的動作。那什麼叫強化呢?就是在前期留下記憶的基礎之上再和本次重新輸入的“讀書”,疊加起來,逐漸沉澱下來,最終成為我們的經驗知識。
眾所周知,大腦中包含數億萬神經元,這些神經元又通過更高數量級的突觸(Synapse)相互連接。盡管揭示大腦的全部奧秘,“路漫漫其修遠兮”,但曙光已乍現。2015年,美國貝勒醫學院(Baylor College of Medicine)的研究者們在著名學術期刊《Science》撰文表示,在大腦皮層中,局部回路的基本連接,可以通過一係列的互聯規則所捕獲(如圖13-5),而且這些規則在大腦皮層中處於不斷循環之中[7]。

RNN通過使用帶有自反饋的神經元,能夠處理理論上任意長度的(存在時間關聯性的)序列數據。相比於傳統的前饋神經網絡,它更符合生物神經元的連接方式,也就是說,如果以模仿大腦來作為終極目標的話,它更有前途。這在某種程度上也說明了近幾年RNN研究異常火爆的原因。
13.5 循環神經網絡的訓練
RNN的結構確定下來之後,接下來的核心工作就是訓練RNN了。訓練RNN的算法叫做時間反向傳播(BackPropagation Through Time,簡稱BPTT)。看到BP這兩個字母,就知道它和傳統的反向傳播算法BP有類似之處,它們的核心任務都是利用反向傳播調參,從而使得損失函數最小化。
BPTT算法包括三個步驟,分別簡要介紹如下。
(1)問題建模
最小化損失函數的前提是,先確定下來損失函數的形式。而損失函數就是衡量預期輸出和實際輸出的差異度函數。作為教師信號,預期輸出可視為常量,很早就待在那裏。因此,問題建模的首要任務就是,確定隱層和輸出層的輸出函數分別是什麼?
假設隱層用的激活函數是sigmoid(當然也可以是其他激活函數),那麼在任意第t時間步,隱層的輸出\( s^{(t)} \)可表示為公式(13-2)。
在第t時間步的輸出層\( o^{(t)} \)可表示為公式(13-3):
這裏***b***和***c***是偏置參數向量。與輸入層和隱層不同的是,輸出層的設計更加靈活多變,它並不要求每個時間步都必須有輸出。比如說,在麵向文本分析的情感分類案例中,輸入可以是一係列的單詞,但輸出隻是整個句子的情感,它和單詞之間並不是一一對應的關係,它隻需給出整體的判定分類就可。
對於分類模型,通常輸出層在最後還要利用softmax激活函數做歸一化處理(該函數已在第12章中做了介紹,不熟悉的讀者可前往查閱),該函數將一個*m*維的向量壓縮為一個*m*維的實數向量,而且這些實數向量的元素都介於(0, 1)之間,實際上就是一個概率向量。經過softmax函數處理後,最終“修飾”後的輸出\( y^{(t)} \)可用公式(13-4)表示。
(2)優化目標函數
基於前麵公式(13-1)至公式(13-4)反映出的模型,接下來就是構建損失函數,然後設法求得損失函數的最小值,這就形成了我們所需優化的目標函數J(θ)。這裏為了方便計算,我們使用了負對數似然函數(即交叉熵)。
其中,\( y^{(t)}(j) \)表示為輸出\( y^{(t)} \)的第j個元素。參數θ表示激活函數σ中的所有參數集合[U, V, W; b , c]。
(3)參數求解
和傳統BP反向傳播算法一樣,BPTT算法的核心也是求解參數的導數。所不同的是,BPTT算法中的參數有5類,如公式(13-6)所示。
在確定目標函數之後,我們就以利用隨機梯度下降等優化策略,來指導網絡參數的更新。限於篇幅,本文省略了公式(13-6)的偏導數求解推導過程,感興趣的讀者,可以參考黃安埠先生的著作[6]。
由於RNN中采用的激活函數是sigmoid,其導數值域鎖定在[0,1/4]範圍之內。故此,每一層反向傳播過程,梯度都會以前一層1/4的速度遞減。可以想象,隨著傳遞時間步數的不斷增加,梯度會呈現指數級遞減趨勢,直至梯度消失(vanishing gradient),如圖13-6所示。假設當前時刻為t,那麼在(t-3)時刻,梯度將遞減至\( (1/4)^3=1/64 \),以此類推。

一旦梯度消失(或梯度趨近於0),參數調整就沒有了方向感,從而BPTT的最優解也就無從獲得,因此RNN的應用受到了局限。
13.6 小結與思考
在本章,我們學習了循環神經網絡(RNN)。它最大的特點莫過於,網絡的輸出結果不僅和當前的輸入相關,還和過往的輸出相關。由於利用了曆史信息,當任務涉及到與時序或與上下文相關時(如語音識別、自然語言處理等),RNN就要比其他人工神經網絡(如CNN)的性能要好得多。
但需要讀者注意如下兩點:(1)RNN中的“深度”,不同於傳統的深度神經網絡,它主要是指時間和空間(如網絡中的隱層個數)特性上的深度。
(2)通過對第十二章的學習,我們知道傳統CNN(卷積神經網絡)的主要特點是“局部連接”、“權值共享”和“局部平移不變性”,其中“權值共享”意味著“計算共享”,它節省了大量計算開銷。而RNN則不同,它是隨著“時間”深度的加深,通過對參數實施“平流移植”來實現“計算共享”的。
通過上麵的學習,請你思考如下問題:
(1)梯度彌散問題在一定程度上阻礙了RNN的進一步發展,你可以想到什麼策略來抑製這個問題嗎?(提示:初始化策略)
(2)除了梯度彌散問題之外,RNN還存在什麼問題呢?又是如何解決的呢?
提示:序列中時間特性的依賴關係,可能也會引起長期依賴問題,也就是記憶能力受限。1997年,RNN引入基於LSTM的架構後,性能取得了很大的突破。
LSTM正是我們下一講的主題,請你關注。
參考文獻
[1] Hopfield J J. Neural networks and physical systems with emergent collective computational abilities [J]. Proceedings of the National Academy of Sciences of the United States of America, 1982, 79(8):2554.
[2] Jordan, M. (1986). Serial order: A parallel distributed processing approach. Institute for Cognitive Science Report 8604. University of California, San Diego.
[3] Elman J L. Finding structure in time[J]. Cognitive Science, 1990, 14(2):179-211.
[4] Sepp Hochreiter; Jürgen Schmidhuber (1997). "Long short-term memory". Neural Computation. 9 (8): 1735–1780. PMID 9377276. doi:10.1162/neco.1997.9.8.1735.
[5] Bengio Y, Vincent P, Janvin C. A neural probabilistic language model[J]. Journal of Machine Learning Research, 2003, 3(6):1137-1155.
[6] 黃安埠. 深入淺出深度學習.中國工信出版社.2017.6
[7] Jiang X, Shen S, Cadwell C R, et al. Principles of connectivity among morphologically defined cell types in adult neocortex.[J]. Science, 2015, 350(6264):aac9462.
文章作者:張玉宏(著有《品味大數據》),審校:我是主題曲哥哥。
##(未完待續)
最後更新:2017-08-14 12:32:21