當前位置:
首頁 > 知識 > 循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

【版權聲明】轉載請註明出處和作者署名。否則作者和雲棲社區有權追究責任。



系列文章

一入侯門「深」似海,深度學習深幾許(入門系列之一)

人工「碳」索意猶盡,智能「硅」來未可知(深度學習入門系列之二)

神經網路不勝語, M-P模型似可尋(深度學習入門系列之三)

「機器學習」三重門,「中庸之道」趨若人(深度學習入門系列之四)

Hello World感知機,懂你我心才安息(深度學習入門系列之五)

損失函數減肥用,神經網路調權重(深度學習入門系列之六)

山重水複疑無路,最快下降問梯度(深度學習入門系列之七)

BP演算法雙向傳,鏈式求導最纏綿(深度學習入門系列之八)

全面連接困何處,卷積網路見解深(深度學習入門系列之九)

卷地風來忽吹散,積得飄零美如畫(深度學習入門系列之十)

局部連接來減參,權值共享肩並肩(深度學習入門系列之十一)

激活引入非線性,池化預防過擬合(深度學習入門系列之十二)

13.1 你可能不具備的一種思維

近來,吳京主演的電影《戰狼 Ⅱ》大獲好評。走進電影院的你,如痴如醉,外加一把愛國淚,絕不肯錯過冷鋒的每一個鏡頭。

假設情況不是這樣,僅想打發無聊時光的你,隨機選擇了一部電影,不湊巧,電影是部爛片,電影播到10分鐘20分鐘時,你會怎麼辦?是當機立斷地拂袖而去呢?還是強打精神看下去(畢竟電影票花了80塊人民幣啊)?

在經濟學領域,有個重要的概念,叫「沉沒成本」。說的就是,有選擇就有成本,沒有選擇就沒有成本。當我們沒辦法再做選擇時,就不存在成本,這是著名論斷「沉沒成本不是成本」的含義。

要知道,一旦電影開播,影城絕不會退錢給你,因此,這80塊就屬於你付出的「沉沒成本」。如果你真的能踐行「沉沒成本不是成本」的話,那麼你的最佳決策當然是立馬走人。可問題是,又有幾人能做到?

是的,能踐行這個論斷的,只屬於理性經濟人,它不屬於正常人。包括經濟學家在內的絕大多數人,離開理論假設,在現實生活中,真的很難無視「沉沒成本」。

其實,很多學科都是相同的。如果用計算機術語來說,上面的含義可以表述為,人們真的很難採用馬爾科夫鏈思維行事。所謂馬爾科夫鏈,通俗來講,就是未來的一切,僅與當前有關,而與歷史無關。人們常說 「要活在當下」,其實這是很難做到的,因為通常人們的每一個決策,都是基於歷史行為和當前狀態疊加作用下做出的。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

圖13-1 人類難以具備馬爾科夫鏈思維

因此,有人就說,不管是李世石,還是柯潔,他們不僅是敗在計算機的「數據」、「演算法」和「算力」上,而且還敗在思維方式上。因為人類不具備馬爾科夫鏈思維(圖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時,指的是「時間遞歸神經網路」,即「循環神經網路」。

在前面章節討論的神經網路模型(如卷積神經網路),都無法利用歷史數據的時間依賴關係,來分析數據特徵,從而可能導致對當前和未來產生一些不合理的預測。

但在很多實際應用中,數據之間是存在相互依賴關係的。例如,當我們在思考問題時,我們都是在已有經驗和知識的基礎之上,再結合當前實際情況綜合給出決策,而不會把過往的經驗和記憶都「棄之如敝履」。

比如說,在《戰狼 Ⅱ》中,當那個中美混血的漂亮女主角一出現,後面的情節即使不看,我們大致也能預測到,無非是「英雄救美女,美女愛英雄」。看到最後,果不其然。如果連這都猜不到,那我們過去那麼多電影也就白看了。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

圖13-2 歷史常識預測單詞

再比如(圖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網路模型的展開結構圖。無論是循環圖,還是展開圖,都有其作用。循環圖(左圖)比較簡潔,而展開圖則能表明其中的計算流程。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

圖13-3 循環神經網路展開後的結構圖

觀察圖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)所示。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

函數f(t)將過去的所有序列

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

作為輸入,從而生成當前的狀態,其中θ表示激活函數σ中所有的參數集合。X(t)表示序列中的第t時刻或第t時間步的輸入數據,它通常也是一個向量;向量s(t)表示的是隱層的值,如圖13-4所示。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

圖13-4 Elman網路模型在每一個時間步的網路拓撲圖

從圖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,序列建模套路深(深度學習入門系列之十三)

圖13-5 貝勒醫學院的研究成果(Science論文截圖)

RNN通過使用帶有自反饋的神經元,能夠處理理論上任意長度的(存在時間關聯性的)序列數據。相比於傳統的前饋神經網路,它更符合生物神經元的連接方式,也就是說,如果以模仿大腦來作為終極目標的話,它更有前途。這在某種程度上也說明了近幾年RNN研究異常火爆的原因。

13.5 循環神經網路的訓練

RNN的結構確定下來之後,接下來的核心工作就是訓練RNN了。訓練RNN的演算法叫做時間反向傳播(BackPropagation Through Time,簡稱BPTT)。看到BP這兩個字母,就知道它和傳統的反向傳播演算法BP有類似之處,它們的核心任務都是利用反向傳播調參,從而使得損失函數最小化。

BPTT演算法包括三個步驟,分別簡要介紹如下。

(1)問題建模

最小化損失函數的前提是,先確定下來損失函數的形式。而損失函數就是衡量預期輸出和實際輸出的差異度函數。作為教師信號,預期輸出可視為常量,很早就待在那裡。因此,問題建模的首要任務就是,確定隱層和輸出層的輸出函數分別是什麼?

假設隱層用的激活函數是sigmoid(當然也可以是其他激活函數),那麼在任意第t時間步,隱層的輸出s(t)可表示為公式(13-2)。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

在第t時間步的輸出層o(t)可表示為公式(13-3):

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

這裡**b**和**c**是偏置參數向量。與輸入層和隱層不同的是,輸出層的設計更加靈活多變,它並不要求每個時間步都必須有輸出。比如說,在面向文本分析的情感分類案例中,輸入可以是一系列的單詞,但輸出只是整個句子的情感,它和單詞之間並不是一一對應的關係,它只需給出整體的判定分類就可。

對於分類模型,通常輸出層在最後還要利用softmax激活函數做歸一化處理(該函數已在第12章中做了介紹,不熟悉的讀者可前往查閱),該函數將一個m維的向量壓縮為一個m維的實數向量,而且這些實數向量的元素都介於(0, 1)之間,實際上就是一個概率向量。經過softmax函數處理後,最終「修飾」後的輸出y(t)可用公式(13-4)表示。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

(2)優化目標函數

基於前面公式(13-1)至公式(13-4)反映出的模型,接下來就是構建損失函數,然後設法求得損失函數的最小值,這就形成了我們所需優化的目標函數J(θ)。這裡為了方便計算,我們使用了負對數似然函數(即交叉熵)。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

其中,y(t)(j)表示為輸出y(t)的第j個元素。參數θ表示激活函數σ中的所有參數集合[U, V, W; b , c]。

(3)參數求解

和傳統BP反向傳播演算法一樣,BPTT演算法的核心也是求解參數的導數。所不同的是,BPTT演算法中的參數有5類,如公式(13-6)所示。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

在確定目標函數之後,我們就以利用隨機梯度下降等優化策略,來指導網路參數的更新。限於篇幅,本文省略了公式(13-6)的偏導數求解推導過程,感興趣的讀者,可以參考黃安埠先生的著作[6]。

由於RNN中採用的激活函數是sigmoid,其導數值域鎖定在[0,1/4]範圍之內。故此,每一層反向傳播過程,梯度都會以前一層1/4的速度遞減。可以想像,隨著傳遞時間步數的不斷增加,梯度會呈現指數級遞減趨勢,直至梯度消失(vanishing gradient),如圖13-6所示。假設當前時刻為t,那麼在(t-3)時刻,梯度將遞減至(1/4)3=1/64,以此類推。

循環遞歸RNN,序列建模套路深(深度學習入門系列之十三)

圖13-6 BPTT梯度遞減示意圖

一旦梯度消失(或梯度趨近於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.

文章作者:張玉宏(著有《品味大數據》),審校:我是主題曲哥哥。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲棲社區 的精彩文章:

十年磨一劍,阿里巴巴企業級數據管理平台:iDB
阿里雲發布ECS企業級產品家族,涵蓋173個應用場景

TAG:雲棲社區 |

您可能感興趣

CNN取代RNN?當序列建模不再需要循環網路
Go 中 JSON 的序列化和反序列化
服務化基石之遠程通信系列五:序列化協議之二進位序列化
基於結構化SVM進行序列標註
基於結構化 SVM 進行序列標註
動態規劃之最長單調遞增子序列(C++源碼)
一套改善消化系統的陰瑜伽序列(收藏)
PHP反序列化漏洞的新攻擊面
一套流動的孕期瑜伽序列(收藏級)
高雲翔案三審在即,DNA樣本已進入檢測序列,保釋難度大
用AR體驗刀劍神域,序列之爭APP發布
ALTER「刀劍神域 序列之爭」亞絲娜1/7手辦開訂!
深度學習引入信號處理技術,輕鬆分析股票等各種序列數據
基於序列到序列模型創造神奇數據產品
Python編程:序列化和反序列化
機器之心GitHub項目:從循環到卷積,探索序列建模的奧秘
基於貪婪搜索的RC-LDPC編碼序列打孔演算法研究
4組理療串聯序列,調整上交叉綜合征超級有效!
CBA第一進攻組織者給哈德森上課!新魔術師讓北京處於奪冠序列?
一套打開心輪的瑜伽後彎序列(收藏級)