必威电竞|足球世界杯竞猜平台

循環(huán)神經(jīng)網(wǎng)絡(luò)
來源:互聯(lián)網(wǎng)

循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN),是一類以序列數(shù)據(jù)為輸入,在序列的演進方向進行遞歸且所有節(jié)點(循環(huán)單元)按鏈式連接的遞歸神經(jīng)網(wǎng)絡(luò)。RNN具有權(quán)重共享的特性,一個完全連接的循環(huán)神經(jīng)網(wǎng)絡(luò)可以近似解決所有可計算問題,此外,RNN也具有記憶更新的特性,即由上一時刻的隱含狀態(tài)和本時刻的輸入來共同更新新的記憶。

循環(huán)神經(jīng)網(wǎng)絡(luò)的早期研究始于20世紀80年代。1982年,約翰·霍普菲爾德引入了Hopfield網(wǎng)絡(luò),標(biāo)志著RNN研究的開始。隨后,RNN進入了以長短期記憶網(wǎng)絡(luò)(LSTM)和雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(BRNN)為主的發(fā)展階段。在這一時期,RNN訓(xùn)練的不穩(wěn)定性和高技術(shù)要求成為了當(dāng)時普遍的看法。到了2010年,RNN展現(xiàn)出在語言建模、機器翻譯、數(shù)據(jù)壓縮和語音識別等領(lǐng)域的顯著能力,開啟了其第三個發(fā)展階段。特別是2014年,艾利克斯·格雷夫斯及其同事在神經(jīng)圖靈機(NTM)上的研究,以及2015年約林和米列夫斯基在堆疊RNN上的工作,進一步推動了RNN技術(shù)的進步。

循環(huán)神經(jīng)網(wǎng)絡(luò)由輸入層、輸出層和隱藏層組成,每層有時間反饋循環(huán),其擴展結(jié)構(gòu)包括雙向循環(huán)神經(jīng)網(wǎng)絡(luò)、深度循環(huán)神經(jīng)網(wǎng)絡(luò)、長短時記憶網(wǎng)絡(luò)和門控循環(huán)單元等,可通過隨時間反向傳播算法梯度下降算法等方式進行訓(xùn)練。此外,循環(huán)神經(jīng)網(wǎng)絡(luò)廣泛應(yīng)用于自然語言處理、臨床分割技術(shù)、風(fēng)險預(yù)測等領(lǐng)域。但是RNN也面臨著梯度消失和梯度爆炸等挑戰(zhàn)。

歷史沿革

背景

1933年,西班牙神經(jīng)生物學(xué)家德諾(Rafael Lorente de Nó)發(fā)現(xiàn)扣帶皮層的解剖結(jié)構(gòu)允許刺激在神經(jīng)回路中循環(huán)傳遞,并由此提出反響回路假設(shè)。該假說在同時期的一系列研究中得到認可,被認為是生物擁有短期記憶的原因。隨后神經(jīng)科學(xué)的進一步研究發(fā)現(xiàn),反響回路的興奮和抑制受大腦阿爾法節(jié)律調(diào)控,并在α-運動神經(jīng)中形成循環(huán)反饋系統(tǒng)。在20世紀70~80年代,因模擬循環(huán)反饋系統(tǒng)面建立的各類數(shù)學(xué)模型為循環(huán)神經(jīng)網(wǎng)絡(luò)的發(fā)展奠定了基礎(chǔ)。

雛形

最早關(guān)于循環(huán)神經(jīng)網(wǎng)絡(luò)的研究開始于20世紀80年代,1982年,約翰·霍普菲爾德(John Hopfield)提出了Hopfield神經(jīng)網(wǎng)絡(luò),這種網(wǎng)絡(luò)由全連接的二元節(jié)點組成,其特點是網(wǎng)絡(luò)內(nèi)部的所有節(jié)點都相互連接,形成一個動態(tài)系統(tǒng)。它包含遞歸計算和外部記憶(External Memory),標(biāo)志著RNN研究的開始。

1986年杰弗里·辛頓(Hinton)等人提出了多隱含層網(wǎng)絡(luò)結(jié)構(gòu),采用Sigmoid激活函數(shù),利用誤差反向傳播算法來訓(xùn)練模型,有效解決了非線性分類問題。1989年,羅納德·威廉姆斯(Ronald Williams)和大衛(wèi)·齊普瑟(David Zipser)提出了RNN的實時循環(huán)學(xué)習(xí)方法(Real-時間 Recurrent Learning,RTRL)以調(diào)整RNN的權(quán)重,隨后,1990年全連接的RNN網(wǎng)絡(luò)(Elman網(wǎng)絡(luò))和隨時間反向傳播算法(BPTT)出現(xiàn),RNN網(wǎng)絡(luò)得到了不斷的優(yōu)化和發(fā)展。

改進

1991年,塞普·霍克賴特(Sepp Hochreiter)發(fā)現(xiàn)了循環(huán)神經(jīng)網(wǎng)絡(luò)的長期依賴問題,即在對序列進行學(xué)習(xí)時,循環(huán)神經(jīng)網(wǎng)絡(luò)會出現(xiàn)梯度消失和梯度爆炸現(xiàn)象,無法掌握長時間跨度的非線性關(guān)系。

為解決長期依賴問題,人們引入了大量的優(yōu)化理論,并設(shè)計出許多改進算法,這一時期主要代表為1997年Hochreiter和施密德胡貝爾(Schmidhuber)提出的長短期記憶網(wǎng)絡(luò)(long short-term memory,LSTM)和雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(bidirectional recurrent neural networks,BRNN)。

這幾種模型擴展了RNN的應(yīng)用場景,為后續(xù)序列化建模的發(fā)展打下了堅實的基礎(chǔ)。在此之后很多研究者通過對RNN增加輔助結(jié)構(gòu),或直接引入外部的記憶單元,提升了網(wǎng)絡(luò)對于長序列數(shù)據(jù)的處理能力。

發(fā)展

2010年,人們發(fā)現(xiàn)RNN能夠顯著提升語言建模、機器翻譯、數(shù)據(jù)壓縮和語音識別等任務(wù)的性能,RNN的發(fā)展進入第三階段。期間,2014年Kyunghyun Cho等人提出了門控循環(huán)網(wǎng)絡(luò)(gated recurrent units,GRU),同年艾利克斯·格雷夫斯(Alex Graves)等人在神經(jīng)圖靈機(neural turing machine,NTM)方面的工作也提升了RNN的學(xué)習(xí)表現(xiàn),對RNN的發(fā)展產(chǎn)生了較大的影響。

在2014~2017年,基于循環(huán)神經(jīng)網(wǎng)絡(luò)的Seq2Seq在機器翻譯以及其他序列任務(wù)上占據(jù)了絕對的主導(dǎo)地位,編碼器-解碼器架構(gòu)以及注意力機制的各種變體被研究者反復(fù)探索。但是由于循環(huán)神經(jīng)網(wǎng)絡(luò)本身結(jié)構(gòu)的局限性,翻譯效果大打折扣。直到2017年,谷歌機器翻譯團隊開發(fā)了Transformer模型,摒棄了傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡(luò)。這種模型基于自注意力機制,引入位置信息編碼,顯著改進了機器翻譯效果。

2019年,為解決變壓器架構(gòu)中的文本通常需要分成多個片段的問題,Transformer-XL應(yīng)運而生。它通過引入循環(huán)機制來學(xué)習(xí)輸入Transformer注意力機制中的連續(xù)多個固定長度的文本片段之間的依賴關(guān)系。雖然注意力機制(以Transformer的形式)已經(jīng)取代了循環(huán)神經(jīng)網(wǎng)絡(luò),但在Transformer中加入循環(huán)機制,使得循環(huán)機制再次流行起來。

基本原理

循環(huán)神經(jīng)網(wǎng)絡(luò)的目的是處理序列數(shù)據(jù)。RNN在處理序列數(shù)據(jù)時,每次處理序列中的一個元素。RNN含有一個隱層和一個隱藏狀態(tài),用于保存隱層的輸出,并將其作為反饋與下一個輸入一起傳遞給隱層,并且隱層的輸入不僅包括輸入層的輸出,還包括上一時刻隱層的輸出。這種信息循環(huán)流意味著網(wǎng)絡(luò)在處理每一個輸入時都會考慮它對前一個輸入的處理結(jié)果。如此在循環(huán)中傳播的信息對序列中前期輸入(可能是所有前期輸入)提供的上下文信息進行了編碼,這使得網(wǎng)絡(luò)能夠保存對先前在序列中已經(jīng)看到的信息的記憶,并利用這些信息來決定應(yīng)該如何處理當(dāng)前的輸入。

基本結(jié)構(gòu)

基礎(chǔ)的神經(jīng)網(wǎng)絡(luò)由輸入層、輸出層和隱藏層組成,通過激活函數(shù)控制輸出,層與層之間通過權(quán)值連接,而RNN與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)最大的區(qū)別在于將前一時間步的隱藏狀態(tài)(而非輸出結(jié)果)傳遞到當(dāng)前時間步的隱藏層,如下圖所示。

輸入層:指神經(jīng)網(wǎng)絡(luò)中數(shù)據(jù)輸入的層次。該層次中數(shù)據(jù)一般不做處理或者只做二分類或者多分類處理,可以理解為人工神經(jīng)網(wǎng)絡(luò)的感知端,有些神經(jīng)網(wǎng)絡(luò)因為所處理的數(shù)據(jù)結(jié)構(gòu)特點有各自獨特的感知機,感知機的類型主要為一些自動化的分類系統(tǒng),把復(fù)雜多元指標(biāo)的信息轉(zhuǎn)化為幾個層面或者0,1變量,按照一定的連接權(quán)重傳輸?shù)诫[層的各個神經(jīng)元當(dāng)中,由隱層神經(jīng)元激勵函數(shù)處理后,將結(jié)果輸入到輸出層得到結(jié)果。

隱藏層:隱藏層是指位于神經(jīng)網(wǎng)絡(luò)中輸入層和輸出層之間的網(wǎng)絡(luò)層。網(wǎng)絡(luò)的深度指的是隱藏層的數(shù)量。

輸出層:輸出層表示的是神經(jīng)元網(wǎng)絡(luò)的最終輸出量,輸出層能夠接收隱藏層的處理結(jié)果,并通過函數(shù)轉(zhuǎn)換成判斷、分類、決策或者確定評價分數(shù)等結(jié)果,即神經(jīng)網(wǎng)絡(luò)的綜合評價結(jié)果。

循環(huán)單元:循環(huán)單元是一個很有效的沿時間線共享參數(shù)方式,它使得時間線可以遞歸地展開。可以形式化地可以表示為,其中,為循環(huán)單元(Recurrent Unit);為參數(shù)。

在RNN的時間展開圖中,、、表示時間序列,表示在時刻的輸入樣本,表示該時刻的網(wǎng)絡(luò)狀態(tài)或記憶。網(wǎng)絡(luò)狀態(tài)的更新通過函數(shù)計算,通常使用如或等非線性函數(shù),計算公式為。這種機制使得RNN可以預(yù)測如句子中下一個單詞的概率分布等序列數(shù)據(jù)。

類型

簡單循環(huán)神經(jīng)網(wǎng)絡(luò)

Elman神經(jīng)網(wǎng)絡(luò)

為了提高對歷史數(shù)據(jù)的敏感性和處理動態(tài)信息的能力,Elman神經(jīng)網(wǎng)絡(luò)被開發(fā)出來。這種反饋型網(wǎng)絡(luò)通過將隱層輸出回饋到輸入層,提供了學(xué)習(xí)記憶的模式,增強了網(wǎng)絡(luò)的記憶功能、自適應(yīng)性和全局穩(wěn)定性。

Elman網(wǎng)絡(luò)結(jié)構(gòu)類似多層前饋神經(jīng)網(wǎng)絡(luò),包括輸入層、隱含層、承接層和輸出層。輸入層傳遞信號,輸出層進行線性加權(quán)。隱含層使用線性或非線性傳遞函數(shù),并可以調(diào)整其連接權(quán)。承接層由固定權(quán)值的單元組成,用于記憶隱含層前一時刻的輸出,這些輸出值經(jīng)過延遲后再次輸入到隱含層。

Elman神經(jīng)網(wǎng)絡(luò)的非線性狀態(tài)空間表達式為

表達式中包括輸出節(jié)點、中間節(jié)點、輸入節(jié)點和反饋狀態(tài);連接權(quán)值分別為承接層到隱含層?、輸入層到隱含層和隱含層到輸出層;和分別為輸出和隱含層神經(jīng)元傳遞函數(shù)

Jordan神經(jīng)網(wǎng)絡(luò)

另一種簡單的全局前向局部反饋型網(wǎng)絡(luò)是Jordan神經(jīng)網(wǎng)絡(luò),Jordan網(wǎng)絡(luò)的所有層都是遞歸結(jié)構(gòu)的,它的工作原理類似于Elman神經(jīng)網(wǎng)絡(luò)的工作原理。與Elman網(wǎng)絡(luò)不同之處是,Jordan神經(jīng)網(wǎng)絡(luò)從輸出層到隱含層有局部反饋,上下文層處于輸出層和第一隱含層之間,上下文層將輸出延遲作為第一隱含層的輸入,即。

雙向循環(huán)神經(jīng)網(wǎng)絡(luò)

許多序列學(xué)習(xí)任務(wù),尤其是序列到序列的任務(wù),需要捕捉序列中的雙向信息,雙向循環(huán)神經(jīng)網(wǎng)絡(luò)即為滿足這種需要而發(fā)明。雙向循環(huán)神經(jīng)網(wǎng)絡(luò)是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò),它結(jié)合了前置和后置的狀態(tài)來預(yù)測當(dāng)前狀態(tài)下的輸出標(biāo)簽。雙向循環(huán)神經(jīng)網(wǎng)絡(luò)由兩層循環(huán)神經(jīng)網(wǎng)絡(luò)組成,它們的輸入相同,只是信息傳遞的方向不同。

雙向循環(huán)網(wǎng)絡(luò)在向前層從時間步1到時間步T正向計算一遍,得到并保存每個時間步隱藏層的輸出;在向后層從時間步T到時間步1反向計算一遍,得到并保存每個時間步隱藏層的輸出。最后的輸出結(jié)果是對兩個方向的輸出進行匯總,從而達到同時利用過去的信息和未來的信息來解決當(dāng)前問題的目的。

各個狀態(tài)的計算公式如下所示:

表達式中包括當(dāng)前時間步;上一步時間步;時間步t的輸入記為;從前往后計算得到的隱藏層的狀態(tài)記為,從后往前計算得到的隱藏層的狀態(tài)記為;代表激活函數(shù),常見的有tanh、ReLU等;、、、是四個權(quán)重矩陣,每個權(quán)重矩陣都會通過網(wǎng)絡(luò)的反向傳播進行更新;表示將與兩部分拼接起來,是網(wǎng)絡(luò)最終的輸出。

深度循環(huán)神經(jīng)網(wǎng)絡(luò)

循環(huán)神經(jīng)網(wǎng)絡(luò)可以看作是可深可淺的網(wǎng)絡(luò),一方面如果把循環(huán)網(wǎng)絡(luò)按時間展開,長時間間隔的狀態(tài)之間的路徑很長,循環(huán)網(wǎng)絡(luò)可以看作是一個非常深的網(wǎng)絡(luò);從另一方面來說,同一時刻網(wǎng)絡(luò)輸入到輸出之間的路徑xt→yt這個網(wǎng)絡(luò)的深度是非常淺的,因此可以通過增加循環(huán)神經(jīng)網(wǎng)絡(luò)的深度從而增強循環(huán)神經(jīng)網(wǎng)絡(luò)的泛化能力。在循環(huán)神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上堆疊兩個以上的隱藏層,這樣就得到了深度循環(huán)神經(jīng)網(wǎng)絡(luò)。在深度循環(huán)神經(jīng)網(wǎng)絡(luò)中,較低的層起到了將原始輸入轉(zhuǎn)化為對更高層的隱狀態(tài)更合適的表示的作用。然而,增加深度可能會因為優(yōu)化困難而損害學(xué)習(xí)效果。在一般的情況下,更容易優(yōu)化較淺的結(jié)構(gòu),因此需要平衡深度循環(huán)網(wǎng)絡(luò)的層數(shù)和訓(xùn)練難易度,以取得最好的學(xué)習(xí)效果。

增加循環(huán)神經(jīng)網(wǎng)絡(luò)的深度主要是延長同一時刻網(wǎng)絡(luò)輸入到輸出之間的路徑xt→yt,比如增加隱狀態(tài)到輸出ht→yt,以及輸入到隱狀態(tài)xt→ht之間的路徑的深度。深度循環(huán)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖所示。

在時刻的第層的隱狀態(tài)的計算公式如下所示:

其中,第層網(wǎng)絡(luò)的輸入是第層網(wǎng)絡(luò)的輸出;表示當(dāng)前時間步;表示在時刻的第層的隱狀態(tài);表示激活函數(shù);表示權(quán)重矩陣;表示輸入層到隱藏層的權(quán)重矩陣;表示隱藏層到隱藏層的權(quán)重矩陣;表示偏重。

長短時記憶網(wǎng)絡(luò)

長短時記憶網(wǎng)絡(luò)是一種稱作長短時間記憶單元(Long Short-Temm Memory,LSTM)的特殊結(jié)構(gòu)時間循環(huán)神經(jīng)網(wǎng)絡(luò),它能夠根據(jù)輸入值和當(dāng)前隱含狀態(tài)選擇性地對所存儲信息進行“遺忘”,并組合新的信息結(jié)合成為新的記憶單元。通過在不同時間步調(diào)整模型權(quán)重,長短時記憶神經(jīng)網(wǎng)絡(luò)能夠根據(jù)損失函數(shù)保留對任務(wù)最有價值的信息。

各個控制門以及各個狀態(tài)的計算公式如下所示:

其中,是遺忘門,決定哪些信息被丟棄或保留;是輸入門,決定輸入信息能否輸入到當(dāng)前網(wǎng)絡(luò)隱層節(jié)點中;是輸出門,決定決定需要輸出什么信息;是隱藏狀態(tài);是候選狀態(tài);是候選內(nèi)部狀態(tài);和表示權(quán)重,表示偏重,矩陣表示logistic函數(shù),表示激活函數(shù),表示向量元素乘積。

門控循環(huán)單元

門控循環(huán)單元(GRU)是另一種具有門控機制的循環(huán)神經(jīng)網(wǎng)絡(luò),它類似于長短期記憶網(wǎng)絡(luò),但結(jié)構(gòu)更簡單,計算效率更高。門控循環(huán)單元比長短期記憶網(wǎng)絡(luò)訓(xùn)練更快,而且當(dāng)訓(xùn)練數(shù)據(jù)有限時,其在訓(xùn)練過程中需要更新的權(quán)重和參數(shù)較少。

各個控制門以及各個狀態(tài)的計算公式如下所示:

其中,是更新門,控制向記憶中寫入的信息,決定是否應(yīng)該用當(dāng)前輸入中的信息來更新記憶;是重置門,控制從記憶中刪除的信息,決定了記憶中哪些信息應(yīng)該被保留和傳遞;是候選隱藏狀態(tài);是最終隱藏狀態(tài);和表示權(quán)重,表示偏重,矩陣表示logistic函數(shù),表示激活函數(shù),表示向量元素乘積。

遞歸神經(jīng)網(wǎng)絡(luò)

遞歸神經(jīng)網(wǎng)絡(luò)(Recursive Neural Network,RecNN)是循環(huán)神經(jīng)網(wǎng)絡(luò)在有向無循環(huán)圖上的擴展。遞歸神經(jīng)網(wǎng)絡(luò)的一般結(jié)構(gòu)為樹狀的層次結(jié)構(gòu)。遞歸神經(jīng)網(wǎng)絡(luò)主要用來建模自然語言句子的語義。給定一個句子的語法結(jié)構(gòu)(一般為樹狀結(jié)構(gòu)),可以使用遞歸神經(jīng)網(wǎng)絡(luò)來按照句法的組合關(guān)系來合成一個句子的語義。句子中每個短語成分又可以分成一些子成分,即每個短語的語義都可以由它的子成分語義組合而來,并進而合成整句的語義。

在遞歸神經(jīng)網(wǎng)絡(luò)的一般結(jié)構(gòu)中,有三個隱藏層、和,其中由兩個輸入層和計算得到,由另外兩個輸入層和計算得到,由兩個隱藏層和計算得到。各個隱藏狀態(tài)的計算公式如下所示:

其中,代表遞歸神經(jīng)網(wǎng)絡(luò)的隱藏層;代表輸入層;代表非線性激活函數(shù);和是可學(xué)習(xí)的參數(shù)。

重要特性

權(quán)重共享:RNN的權(quán)重系數(shù)是共享的,即在一次迭代中,循環(huán)節(jié)點使用相同的權(quán)重系數(shù)處理所有的時間步,RNN能夠通過權(quán)重共享的方式,將過去時刻重要的信息編碼并傳入當(dāng)前時刻的神經(jīng)元,使模型具有了記憶能力,解決了傳統(tǒng)神經(jīng)網(wǎng)絡(luò)不能隨時間變化提取特征這一問題。

計算能力:一個循環(huán)單元間完全連接的RNN滿足通用近似定理,根據(jù)通用近似定理,兩層的前饋神經(jīng)網(wǎng)絡(luò)可以近似任意有界閉集上的任意連續(xù)函數(shù),因此,動力系統(tǒng)的兩個函數(shù)可以用兩層的全連接前饋網(wǎng)絡(luò)近似。此外,RNN具有圖靈完備(圖靈機器人 completeness)特性,所有的圖靈機都可以被一個由使用Sigmoid型激活函數(shù)的神經(jīng)元構(gòu)成的全連接循環(huán)網(wǎng)絡(luò)來進行模擬,因此,一個完全連接的循環(huán)神經(jīng)網(wǎng)絡(luò)可以近似解決所有的可計算問題。

記憶更新:RNN每一個時間的輸出不僅取決于當(dāng)前的輸入,還取決于過去的輸出,即過去的輸出等同于網(wǎng)絡(luò)的一個內(nèi)部的記憶,叫作內(nèi)部隱含狀態(tài),相關(guān)公式為:,在公式中,是上一時刻的隱含狀態(tài),是本時刻的輸入,是本時刻的隱含狀態(tài),即由上一時刻的隱含狀態(tài)和本時刻的輸入來共同更新新的記憶。

循環(huán)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練

神經(jīng)網(wǎng)絡(luò)的參數(shù)訓(xùn)練通常依賴于誤差反向傳播算法梯度下降算法、實時循環(huán)學(xué)習(xí)算法等。前饋網(wǎng)絡(luò)的反向傳播算法從最后的誤差開始,經(jīng)每個隱含層的輸出、權(quán)重和輸入反向移動,將一定比例的誤差分配給每個權(quán)重,方法是計算權(quán)重與誤差的偏導(dǎo)數(shù)。隨后,梯度下降算法會用這些偏導(dǎo)數(shù)對權(quán)重進行上、下調(diào)整以減少誤差。循環(huán)神經(jīng)網(wǎng)絡(luò)的參數(shù)同樣可以通過梯度下降算法進行學(xué)習(xí)。與反向傳播的BPTT算法不同的是,實時循環(huán)學(xué)習(xí)通過前向傳播的方式來計算梯度

隨時間反向傳播算法

前饋神經(jīng)網(wǎng)絡(luò)不同,循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)在處理時間序列數(shù)據(jù)時,不僅存在層間的空間關(guān)系,還包含時間維度上的聯(lián)系。為了在時間序列上計算梯度,RNN使用一種特殊的反向傳播方法——隨時間反向傳播(BPTT)。在BPTT中,將RNN沿時間軸展開,每個時間步驟都視為一個獨立的網(wǎng)絡(luò)層。這樣,RNN可以按照前饋網(wǎng)絡(luò)的方式更新權(quán)重,視整個序列為靜態(tài)輸入。

RNN通過展開轉(zhuǎn)換成前饋網(wǎng)絡(luò)結(jié)構(gòu),簡化了權(quán)重更新過程。盡管表面上看起來類似前饋網(wǎng)絡(luò),但RNN各時間步中的隱含層實際上是同一網(wǎng)絡(luò)的不同時間實例,且所有時間步共享相同的參數(shù)。當(dāng)處理長時間序列時,由于時間步數(shù)量增多,BPTT算法的計算量極大。為了減輕計算負擔(dān),可以采用截斷時間步的策略,控制反向傳播的深度。

實時循環(huán)學(xué)習(xí)算法

實時循環(huán)學(xué)習(xí)算法(Real-Time Recurrent Learning,RTRL)與隨時間反向傳播(BPTT)不同,它通過前向傳播的方式實時計算梯度。

假設(shè)循環(huán)神經(jīng)網(wǎng)絡(luò)中第時刻的狀態(tài)為

在RTRL中,循考慮環(huán)神經(jīng)網(wǎng)絡(luò)在某一時刻t的狀態(tài),并計算該狀態(tài)關(guān)于網(wǎng)絡(luò)參數(shù)的偏導(dǎo)數(shù)。

從第一個時刻開始,RTRL不僅計算網(wǎng)絡(luò)的隱狀態(tài),還按順序前向計算這些偏導(dǎo)數(shù)。每到一個時刻,如果存在監(jiān)督信息,即有相應(yīng)的損失函數(shù),就能計算出損失函數(shù)對這些偏導(dǎo)數(shù)的依賴。這使得在每個時間點,算法都能實時地計算出損失函數(shù)關(guān)于參數(shù)的梯度,并據(jù)此更新參數(shù)。這種方法允許參數(shù)的實時更新,無需等到序列結(jié)束,從而適用于在線和實時處理場景。

梯度下降算法

梯度下降算法(Gradient Descent)是神經(jīng)網(wǎng)絡(luò)訓(xùn)練中最常用的一種優(yōu)化算法。無論是經(jīng)典的神經(jīng)網(wǎng)絡(luò)還是深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),基本都可以采用梯度下降算法來進行網(wǎng)絡(luò)訓(xùn)練,其主要思想是通過不斷迭代找到目標(biāo)函數(shù)的最小值。根據(jù)處理的訓(xùn)練數(shù)據(jù)的不同,對網(wǎng)絡(luò)權(quán)重進行更新,梯度下降算法主要有以下三種形式。

優(yōu)化策略

為了讓讓算法能更快收斂,使得訓(xùn)練速度加快,在神經(jīng)網(wǎng)絡(luò)模型的搭建中,通常會制定相應(yīng)的優(yōu)化策略,優(yōu)化是神經(jīng)網(wǎng)絡(luò)建模中極其重要的環(huán)節(jié),它直接決定了模型的訓(xùn)練時間和投入產(chǎn)出的性價比

網(wǎng)絡(luò)正則化

正則化(Regularization)是一類通過限制模型復(fù)雜度,從而避免過擬合,提高泛化能力的方法,比如引入約束、增加先驗、提前停止等。在傳統(tǒng)的機器學(xué)習(xí)中,提高泛化能力的方法主要是限制模型復(fù)雜度,比如采用和正則化等方式。

和正則化是機器學(xué)習(xí)中最常用的正則化方法,通過約束參數(shù)的和范數(shù)來減小模型在訓(xùn)練數(shù)據(jù)集上的過擬合現(xiàn)象。通過加入和正則化,優(yōu)化問題可以寫為。

其中為損失函數(shù);為訓(xùn)練樣本數(shù)量;為待學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò);為其參數(shù);為范數(shù)函數(shù);的取值通常為代表和范數(shù);為正則化系數(shù)。

丟棄法

在訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)時,特別是在過度參數(shù)化(Over-Parameterization)時,和正則化的效果往往不如淺層機器學(xué)習(xí)模型中顯著,因此訓(xùn)練深度學(xué)習(xí)模型時,往往還會使用其他的正則化方法,比如丟棄法。當(dāng)訓(xùn)練一個深度神經(jīng)網(wǎng)絡(luò)時,可以隨機丟棄一部分神經(jīng)元(同時丟棄其對應(yīng)的連接邊)來避免過擬合,這種方法稱為丟棄法。

當(dāng)在循環(huán)神經(jīng)網(wǎng)絡(luò)上應(yīng)用丟棄法時,不能直接對每個時刻的隱狀態(tài)進行隨機丟棄,這樣會損害循環(huán)網(wǎng)絡(luò)在時間維度上的記憶能力。一種簡單的方法是對非時間維度的連接(即非循環(huán)連接)進行隨機丟失。

然而根據(jù)托馬斯·貝葉斯學(xué)習(xí)的解釋,丟棄法是一種對參數(shù)的采樣,每次采樣的參數(shù)需要在每個時刻保持不變。因此,在對循環(huán)神經(jīng)網(wǎng)絡(luò)上使用丟棄法時,需要對參數(shù)矩陣的每個元素進行隨機丟棄,并在所有時刻都使用相同的丟棄掩碼,這種方法稱為變分丟棄法。

參數(shù)初始化

神經(jīng)網(wǎng)絡(luò)的參數(shù)學(xué)習(xí)是一個非凸優(yōu)化問題。當(dāng)使用梯度下降法來進行優(yōu)化網(wǎng)絡(luò)參數(shù)時,參數(shù)初始值的選取十分關(guān)鍵,關(guān)系到網(wǎng)絡(luò)的優(yōu)化效率和泛化能力。參數(shù)初始化的方式通常有預(yù)訓(xùn)練初始化、隨機初始化和固定值初始化等。預(yù)訓(xùn)練初始化使用已有模型的參數(shù)作為新模型的起點,以加快學(xué)習(xí)速度。隨機初始化通過隨機數(shù)為模型參數(shù)設(shè)定起始值,保證訓(xùn)練時的多樣性和探索性。固定值初始化在需要時使用,將參數(shù)設(shè)定為特定值,以適應(yīng)模型對初值敏感的情況。

超參數(shù)優(yōu)化

在神經(jīng)網(wǎng)絡(luò)中,除了可學(xué)習(xí)的參數(shù)之外,還存在很多超參數(shù),這些超參數(shù)對網(wǎng)絡(luò)性能的影響也很大,不同的機器學(xué)習(xí)任務(wù)往往需要不同的超參數(shù)。常見的超參數(shù)有以下三類:

(1)網(wǎng)絡(luò)結(jié)構(gòu),包括神經(jīng)元之間的連接關(guān)系、層數(shù)、每層的神經(jīng)元數(shù)量、激活函數(shù)的類型等;

(2)優(yōu)化參數(shù),包括優(yōu)化方法、學(xué)習(xí)率、小批量的樣本數(shù)量等;

(3)正則化系數(shù),包括L1正則化、L2正則化、噪聲注入系數(shù)等。

對于超參數(shù)的配置,比較簡單的方法有網(wǎng)格搜索、隨機搜索、和神經(jīng)架構(gòu)搜索等。網(wǎng)格搜索(Grid Search)通過嘗試所有超參數(shù)的組合來尋址合適一組超參數(shù)配置。隨機搜索對超參數(shù)進行隨機組合,然后選取一個性能最好的配置。神經(jīng)架構(gòu)搜索利用一個控制器來生成另一個子網(wǎng)絡(luò)的架構(gòu)描述。

歸一化

歸一化(Normalization)方法泛指把數(shù)據(jù)特征轉(zhuǎn)換為相同尺度的方法,比如把數(shù)據(jù)特征映射到[0,1]或[?1,1]區(qū)間內(nèi),或者映射為服從均值為0、方差為1的標(biāo)準正態(tài)分布。常見的歸一化方法包括最小最大值歸一化、標(biāo)準化、白化病等。最小最大值歸一化通過縮放將每一個特征的取值范圍歸一到[0,1]或[?1,1]之間。標(biāo)準化將每一個維特征都調(diào)整為均值為0,方差為1。白化是用來降低輸入數(shù)據(jù)特征之間的冗余性。

層歸一化

層歸一化(Layer Normalization),是對一個中間層的所有神經(jīng)元進行歸一化。層歸一化定義為

其中,為第層神經(jīng)元的凈輸入,和分別代表縮放和平移的參數(shù)向量,和維數(shù)相同。

在循環(huán)神經(jīng)網(wǎng)絡(luò)中,層歸一化可以對循環(huán)神經(jīng)層進行歸一化操作。假設(shè)在時刻,循環(huán)神經(jīng)網(wǎng)絡(luò)的隱藏層為,其層歸一化的更新為

其中輸入為為第時刻的輸入,和為網(wǎng)絡(luò)參數(shù)。在標(biāo)準循環(huán)神經(jīng)網(wǎng)絡(luò)中,循環(huán)神經(jīng)層的凈輸入一般會隨著時間慢慢變大或變小,從而導(dǎo)致梯度爆炸或消失。而層歸一化的循環(huán)神經(jīng)網(wǎng)絡(luò)可以有效地緩解這種狀況。

梯度截斷

在基于梯度下降的優(yōu)化過程中,如果梯度突然增大,用大的梯度更新參數(shù)反而會導(dǎo)致其遠離最優(yōu)點。為了避免這種情況,當(dāng)梯度的模大于一定閾值時,就對梯度進行截斷,稱為梯度截斷(Gradient Clipping)。

在下圖中,曲面為只有一個隱藏神經(jīng)元的循環(huán)神經(jīng)網(wǎng)絡(luò)的損失函數(shù),其中和為參數(shù)。假如初始值為0.3,損失函數(shù)為。損失函數(shù)關(guān)于參數(shù)和的梯度在某個區(qū)域會突然變大。

梯度截斷是一種比較簡單的啟發(fā)式方法,把梯度的模限定在一個區(qū)間,當(dāng)梯度的模小于或大于這個區(qū)間時就進行截斷。一般截斷的方式有以下幾種:

按值截斷:在第次迭代時,梯度為,給定一個區(qū)間,如果一個參數(shù)的梯度小于時,就將其設(shè)為;如果大于時,就將其設(shè)為,相關(guān)公式為

按模截斷:按模截斷是將梯度的模截斷到一個給定的截斷閾值,如果,保持不變。如果,令。截斷閾值是一個超參數(shù),也可以根據(jù)一段時間內(nèi)的平均梯度來自動調(diào)整。在訓(xùn)練循環(huán)神經(jīng)網(wǎng)絡(luò)時,按模截斷是避免梯度爆炸問題的有效方法。實驗中發(fā)現(xiàn),訓(xùn)練過程對閾值并不十分敏感,通常一個小的閾值就可以得到很好的結(jié)果。

應(yīng)用模式

序列到類別模式

序列到類別模式主要用于序列數(shù)據(jù)的分類問題:輸入為序列,輸出為類別。比如在文本分類中,輸入數(shù)據(jù)為單詞的序列,輸出為該文本的類別。

假設(shè)一個樣本為一個長度為的序列,輸出為一個類別。可以將樣本按不同時刻輸入到循環(huán)神經(jīng)網(wǎng)絡(luò)中,并得到不同時刻的隱藏狀態(tài)。可以將看作整個序列的最終表示(或特征),并輸入給分類器進行分類(如圖a所示),即。其中,可以是簡單的線性分類器(比如Logistic回歸)或復(fù)雜的分類器(比如多層前饋神經(jīng)網(wǎng)絡(luò))。

除了將最后時刻的狀態(tài)作為整個序列的表示之外,還可以對整個序列的所有狀態(tài)進行平均,并用這個平均狀態(tài)來作為整個序列的表示(如圖b所示),即。

同步的序列到序列模式

同步的序列到序列模式主要用于序列標(biāo)注(序列 Labeling)任務(wù),即每一時刻都有輸入和輸出,輸入序列和輸出序列的長度相同。比如在詞性標(biāo)注(Part-of-Speech Tagging)中,每一個單詞都需要標(biāo)注其對應(yīng)的詞性標(biāo)簽。

在同步的序列到序列模式中,輸入為一個長度為的序列,輸出為序列樣本按不同時刻輸入到循環(huán)神經(jīng)網(wǎng)絡(luò)中,并得到不同時刻的隱狀態(tài)。每個時刻的隱狀態(tài)代表了當(dāng)前時刻和歷史的信息,并輸入給分類器得到當(dāng)前時刻的標(biāo)簽,即。

異步的序列到序列模式

異步的序列到序列模式也稱為主軸編碼器-解碼器(Encoder-Decoder)模型,即輸入序列和輸出序列不需要有嚴格的對應(yīng)關(guān)系,也不需要保持相同的長度。比如在機器翻譯中,輸入為源語言的單詞序列,輸出為目標(biāo)語言的單詞序列。

在異步的序列到序列模式中,輸入為長度為的序列,輸出為長度為的序列。異步的序列到序列模式一般通過先編碼后解碼的方式來實現(xiàn),先將樣本按不同時刻輸入到一個循環(huán)神經(jīng)網(wǎng)絡(luò)(編碼器)中,并得到其編碼,然后再使用另一個循環(huán)神經(jīng)網(wǎng)絡(luò)(解碼器),得到輸出序列。為了建立輸出序列之間的依賴關(guān)系,在解碼器中通常使用非線性的自回歸模型。令和分別為用作編碼器和解碼器的循環(huán)神經(jīng)網(wǎng)絡(luò),則編碼器-解碼器模型可以寫為

其中為分類器,為預(yù)測輸出的向量表示。在解碼器通常采用自回歸模型,每個時刻的輸入為上一時刻的預(yù)測結(jié)果。

挑戰(zhàn)

梯度消失和梯度爆炸:循環(huán)神經(jīng)網(wǎng)絡(luò)雖然理論上任意兩個時間步間均存在依賴,但在訓(xùn)練過程中并不能很好地學(xué)習(xí)到遠距離位置間的依賴,主要原因就在于梯度消失和梯度爆炸問題。梯度消失是指在RNN訓(xùn)練過程中,梯度攜帶的誤差通過梯度反向傳播更新網(wǎng)絡(luò)權(quán)值時,梯度趨近0,參數(shù)的反向傳播更新變得不再明顯,這將會使得長數(shù)據(jù)序列的學(xué)習(xí)變得困難。梯度爆炸是指在訓(xùn)練過程中,由于大的錯誤梯度累積,使得模型權(quán)值參數(shù)更新出現(xiàn)指數(shù)級的增長,梯度趨近無窮大,導(dǎo)致訓(xùn)練時間越長,模型的表現(xiàn)和準確率都變得更差。

激活函數(shù)較小或較遠:激活函數(shù)的導(dǎo)數(shù)通常為(0,1)之間的小數(shù),Sigmoid激活函數(shù)的導(dǎo)數(shù)值區(qū)間(0,1/4],更實用一些的tanh激活函數(shù)的導(dǎo)數(shù)值區(qū)間為(0,1],當(dāng)激活函數(shù)的導(dǎo)數(shù)值較小時,它的累乘會導(dǎo)致整體梯度值很小,使得模型的迭代優(yōu)化過程難以進行。而且,當(dāng)這兩個激活函數(shù)的輸入遠離原點時,函數(shù)圖像就會趨于平緩,導(dǎo)數(shù)值接近0,梯度消失問題難以避免。

權(quán)重矩陣特征值過大或過小:當(dāng)權(quán)重的取值超出了一定范圍,它的累乘就會導(dǎo)致梯度值呈指數(shù)增長,也就是梯度爆炸問題,使得模型的迭代優(yōu)化過程劇烈震蕩,難以收斂。當(dāng)權(quán)重矩陣的特征值大于1時,則可能發(fā)生梯度爆炸;而當(dāng)權(quán)重矩陣的最大特征值過小,同樣可能導(dǎo)致梯度消失。

信息傳遞的單向性:除梯度消失和梯度爆炸問題外,基本循環(huán)神經(jīng)網(wǎng)絡(luò)中信息傳遞的單向性也會導(dǎo)致部分信息的丟失。在語音識別中,由于協(xié)同發(fā)音,當(dāng)前聲音作為音素的正確解釋可能取決于未來幾個音素,甚至潛在的可能取決于未來的幾個詞,因為詞與附近的詞之間存在的語義依賴,如果當(dāng)前的詞有兩種聲學(xué)上合理的解釋,可能就要在更遠的未來和過去尋找信息區(qū)分它們。然而,基本循環(huán)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)決定其只能捕捉從前到后的單向信息。

應(yīng)用領(lǐng)域

自然語言處理

自然語言數(shù)據(jù)是典型的序列數(shù)據(jù),因此對序列數(shù)據(jù)學(xué)習(xí)有一定優(yōu)勢的循環(huán)神經(jīng)網(wǎng)絡(luò)在自然語言處理問題中有得到應(yīng)用。在語音識別中,循環(huán)神經(jīng)網(wǎng)絡(luò)可被應(yīng)用于端到端建模,例如有研究使用長短期記憶神經(jīng)網(wǎng)絡(luò)單元構(gòu)建的雙向深度循環(huán)神經(jīng)網(wǎng)絡(luò)成功進行了英語文集TIMIT的語音識別,其識別準確率超過了同等條件的隱馬爾可夫模型和深度前饋神經(jīng)網(wǎng)絡(luò)。

語音合成(speech synthesis)領(lǐng)域,有研究將多個雙向長短期記憶神經(jīng)網(wǎng)絡(luò)相組合建立了低延遲的語音合成系統(tǒng),成功將英語文本轉(zhuǎn)化為接近真實的語音輸出。循環(huán)神經(jīng)網(wǎng)絡(luò)也被用于端到端文本語音(Text-To-Speech,TTS)合成工具的開發(fā),例子包括Tacotron、Merlin等。

剩余使用壽命預(yù)測

剩余使用壽命(Remaining Useful Life,RUL)是指從當(dāng)前時間點到產(chǎn)品使用壽命結(jié)束之間的時間段。RUL預(yù)測是預(yù)測性維護(Predictive Maintenance)最重要的組成部分。準確的RUL預(yù)測有助于將計劃維護轉(zhuǎn)向預(yù)測性維護,有效減少維護成本和避免因重大設(shè)備故障帶來的災(zāi)難性后果。

準確的RUL預(yù)測有助于將計劃性維護轉(zhuǎn)變?yōu)轭A(yù)測性維護,有效減少維護成本并避免重大設(shè)備故障帶來的災(zāi)難性后果。在RUL預(yù)測的應(yīng)用中,往往需要使用傳感器收集有時間序列特征的數(shù)據(jù)。隨著RNN算法的改進、高效算力、與其他模型的結(jié)合以及基準數(shù)據(jù)集等多方面的推進,剩余使用壽命預(yù)測領(lǐng)域的魯棒性研究、泛化性研究和優(yōu)化預(yù)測模型將會取得新的突破。

超聲前列腺分割

基于循環(huán)神經(jīng)網(wǎng)絡(luò)的超聲前列腺分割算法可以先后通過先驗知識、每點處作定長法線的方式縮小邊界點的搜索范圍,避開前列腺內(nèi)外部的大量噪聲偽影,再將法線覆蓋的區(qū)域按序提取疊加形成窄帶序列,按正向和反向分別輸入到RNN中進行訓(xùn)練推導(dǎo),Bidirectional RNN同時學(xué)習(xí)前列腺邊界序列的歷史信息和未來信息來對邊界作合理推斷。將這種包含了雙向的上下文信息的輕量模型得到的新的經(jīng)過每一段重定位的窄帶序列反序列化到原圖上,這種分割方法實現(xiàn)了不錯的分割效果,精度高于大部分傳統(tǒng)深度學(xué)習(xí)模型。

火災(zāi)風(fēng)險預(yù)測

火災(zāi)風(fēng)險預(yù)測的基本思想是利用機器學(xué)習(xí)方法,將歷史火災(zāi)的發(fā)生與單位、建筑等多種特征關(guān)聯(lián)起來,采用循環(huán)神經(jīng)網(wǎng)絡(luò)算法進行建模分析,獲得單位及建筑等多種特征(如單位性質(zhì)、行業(yè)、職工人數(shù)、建筑年齡、建筑面積、耐火等級、消防車道數(shù)等)與其火災(zāi)風(fēng)險的數(shù)學(xué)模型,通過輸入歷史數(shù)據(jù)樣本不斷訓(xùn)練調(diào)整模型參數(shù),從而得到一個穩(wěn)定高效的火災(zāi)風(fēng)險預(yù)測模型。

實測結(jié)果表明,將循環(huán)神經(jīng)網(wǎng)絡(luò)算法應(yīng)用于火災(zāi)風(fēng)險預(yù)測模型訓(xùn)練,可以一次建模、有效預(yù)測火災(zāi)風(fēng)險。將模型預(yù)測的單位火災(zāi)風(fēng)險量化排序,與“雙隨機一公開”結(jié)合、優(yōu)化單位抽查規(guī)則,可以顯著提升日常消防監(jiān)督檢查的效率和精準度。未來將針對社會單位和住宅小區(qū)分別獨立建模,進一步提升算法模型擬合與火災(zāi)風(fēng)險預(yù)測性能。

參考資料 >

生活家百科家居網(wǎng)