人工智能之機器學習的循環(huán)神經(jīng)網(wǎng)絡RNN算法解析
前言:人工智能機器學習有關算法內容,請參見公眾號“科技優(yōu)化生活”之前相關文章。人工智能之機器學習主要有三大類:1)分類;2)回歸;3)聚類。今天我們重點探討一下循環(huán)神經(jīng)網(wǎng)絡(RNN)算法。
循環(huán)神經(jīng)網(wǎng)絡(RNN)現(xiàn)已成為國際上神經(jīng)網(wǎng)絡專家研究的重要對象之一。它是一種節(jié)點定向連接成環(huán)的人工神經(jīng)網(wǎng)絡,最初由Jordan,Pineda.Williams,Elman等于上世紀80年代末提出的一種神經(jīng)網(wǎng)絡結構模型。
引領循環(huán)神經(jīng)網(wǎng)絡RNN研究的主要是JuergenSchmidhuber和他的學生——其中包括SeppHochreiter,他發(fā)現(xiàn)了高深度網(wǎng)絡所遇到的梯度消失問題,后來又發(fā)明了長短期記憶(LSTM)循環(huán)網(wǎng)絡;還有Alex Graves,他目前在DeepMind任職。另外兩位比較著名的研究者分別是:Felix Gers,他發(fā)明了LSTM遺忘門;Justin Bayer,他發(fā)明了可以讓LSTM拓撲結構根據(jù)具體問題進行自動演化的方法。
RNN概念:循環(huán)神經(jīng)網(wǎng)絡RNN(Recurrent NeuronNetwork)的內部狀態(tài)可以展示動態(tài)時序行為。不同于前饋神經(jīng)網(wǎng)絡的是,RNN可以利用它內部的記憶來處理任意時序的輸入序列,這讓它可以更容易處理如不分段的手寫識別、語音識別等。
循環(huán)神經(jīng)網(wǎng)絡(RNN)可以實現(xiàn)并行和序列計算,原則上可以計算任何傳統(tǒng)計算機所能計算的東西。但和傳統(tǒng)計算機不同的是,RNN與人類大腦有相似之處;人腦是一種由神經(jīng)元相互聯(lián)結組成的大型前饋網(wǎng)絡,可以借由某種方式學會將長達人的一生的感覺信號輸入流轉換為一個有效的運動輸出序列。人腦是一個杰出的模范,因為它能解決許多計算機尚且力所不及的問題。
RNN特征:循環(huán)神經(jīng)網(wǎng)絡RNN的本質特征是在處理單元之間既有內部的反饋連接又有前饋連接。從系統(tǒng)觀點看,它是一個反饋動力系統(tǒng),在計算過程中體現(xiàn)過程動態(tài)特性,比前饋神經(jīng)網(wǎng)絡具有更強的動態(tài)行為和計算能力。
RNN分類:1)完全遞歸網(wǎng)絡(Fully recurrent network)
2)Hopfield網(wǎng)絡(Hopfield network)
3)Elman networks and Jordannetworks
4)回聲狀態(tài)網(wǎng)絡(Echo state network)
5)長短記憶網(wǎng)絡(Long short term memery network)
6)雙向網(wǎng)絡(Bi-direcTIonal RNN)
7)持續(xù)型網(wǎng)絡(ConTInuous-TIme RNN)
8)分層RNN(Hierarchical RNN)
9)復發(fā)性多層感知器(Recurrent mulTIlayer perceptron)
10)二階遞歸神經(jīng)網(wǎng)絡(Second Order Recurrent Neural Network)
11)波拉克的連續(xù)的級聯(lián)網(wǎng)絡(Pollack’s sequential cascaded networks)
RNN與FNN區(qū)別:循環(huán)神經(jīng)網(wǎng)絡RNN和前饋神經(jīng)網(wǎng)絡FNN的最大區(qū)別在于有一個反饋循環(huán)。另外,兩者的記憶模式完全不同。在定型之后,前饋神經(jīng)網(wǎng)絡會生成已學習數(shù)據(jù)的靜態(tài)模型,然后接受新的樣例,進行準確的分類或聚類。而循環(huán)神經(jīng)網(wǎng)絡RNN則會生成動態(tài)模型,即會隨時間推移而變化的模型,即將第n-1步的輸出反饋給神經(jīng)網(wǎng)絡,對第n步的輸出產(chǎn)生影響,之后的每一步也都以此類推。這種變化可以讓模型依據(jù)輸入樣例的上下文來進行準確的分類。
RNN模型與記憶:循環(huán)神經(jīng)網(wǎng)絡RNN包含了決定同個序列中的前一次分類結果的隱藏狀態(tài)。以后每一步,這一隱藏狀態(tài)會與新一步的輸入數(shù)據(jù)相加,生成一個新的隱藏狀態(tài),再得出一個新的分類結果。每個隱藏狀態(tài)都會被循環(huán)利用,生成經(jīng)過調整的后續(xù)隱藏狀態(tài)。
人類的記憶模式同樣能考慮上下文,循環(huán)利用對于過往狀態(tài)的認知來恰當?shù)亟庾x新數(shù)據(jù)。人類會受到短期記憶和先前感覺的影響,保留了不同的“隱藏狀態(tài)”。
RNN基本結構:
RNN是一種對序列數(shù)據(jù)建模的神經(jīng)網(wǎng)絡,即一個序列當前的輸出與前面的輸出也有關。具體的表現(xiàn)形式為網(wǎng)絡會對前面的信息進行記憶并應用于當前輸出的計算中,即隱藏層之間的節(jié)點不再無連接而是有連接的,并且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。下面是一個RNN模型的示例圖,其中:
xt是t時刻的輸入;st是t時刻的隱狀態(tài)(memory),基于上一時刻的隱狀態(tài)和當前輸入得到:st=f(Uxt+Wst?1),其中f一般是非線性的激活函數(shù),在計算s0時,需要用到s?1。
ot表示t時刻的輸出,ot=softmax(Vst);
在RNN中,所有層次均共享同樣的參數(shù)。其反應出RNN中的每一步都在做相同的事,只是輸入不同,因此大大地降低了網(wǎng)絡中需要學習的參數(shù)。
RNN允許對向量的序列進行操作:輸入可以是序列,輸出也可以是序列,在最一般化的情況下輸入輸出都可以是序列。輸出序列理解為RNN關于序列下一個狀態(tài)預測的信心程度。