導航:首頁 > 網路問題 > rnn網路是什麼

rnn網路是什麼

發布時間:2023-02-21 13:36:06

1. Pytorch_循環神經網路RNN

RNN是Recurrent Neural Networks的縮寫,即循環神經網路,它常用於解決序列問題。RNN有記憶功能,除了當前輸入,還把上下文環境作為預測的依據。它常用於語音識別、翻譯等場景之中。

RNN是序列模型的基礎,盡管能夠直接調用現成的RNN演算法,但後續的復雜網路很多構建在RNN網路的基礎之上,如Attention方法需要使用RNN的隱藏層數據。RNN的原理並不復雜,但由於其中包括循環,很難用語言或者畫圖來描述,最好的方法是自己手動編寫一個RNN網路。本篇將介紹RNN網路的原理及具體實現。

在學習循環神經網路之前,先看看什麼是序列。序列sequence簡稱seq,是有先後順序的一組數據。自然語言處理是最為典型的序列問題,比如將一句話翻譯成另一句話時,其中某個詞彙的含義不僅取決於它本身,還與它前後的多個單詞相關。類似的,如果想預測電影的情節發展,不僅與當前的畫面有關,還與當前的一系列前情有關。在使用序列模型預測的過程中,輸入是序列,而輸出是一個或多個預測值。

在使用深度學習模型解決序列問題時, 最容易混淆的是,序列與序列中的元素 。在不同的場景中,定義序列的方式不同,當分析單詞的感情色彩時,一個單詞是一個序列seq;當分析句子感情色彩時,一個句子是一個seq,其中的每個單詞是序列中的元素;當分析文章感情色彩時,一篇文章是一個seq。簡單地說,seq是最終使用模型時的輸入數據,由一系列元素組成。

當分析句子的感情色彩時,以句為seq,而句中包含的各個單詞的含義,以及單詞間的關系是具體分析的對象,此時,單詞是序列中的元素,每一個單詞又可有多維特徵。從單詞中提取特徵的方法將在後面的自然語言處理中介紹。

RNN有很多種形式,單個輸入單個輸入;多個輸入多個輸出,單個輸入多個輸出等等。

舉個最簡單的例子:用模型預測一個四字短語的感情色彩,它的輸入為四個元素X={x1,x2,x3,x4},它的輸出為單個值Y={y1}。字的排列順序至關重要,比如「從好變壞」和「從壞變好」,表達的意思完全相反。之所以輸入輸出的個數不需要一一對應,是因為中間的隱藏層,變向存儲中間信息。

如果把模型設想成黑盒,如下圖所示:

如果模型使用全連接網路,在每次迭代時,模型將計算各個元素x1,x2...中各個特徵f1,f2...代入網路,求它們對結果y的貢獻度。

RNN網路則要復雜一些,在模型內部,它不是將序列中所有元素的特徵一次性輸入模型,而是每一次將序列中單個元素的特徵輸入模型,下圖描述了RNN的數據處理過程,左圖為分步展示,右圖將所有時序步驟抽象成單一模塊。

第一步:將第一個元素x1的特徵f1,f2...輸入模型,模型根據輸入計算出隱藏層h。

第二步:將第二個元素x2的特徵輸入模型,模型根據輸入和上一步產生的h再計算隱藏層h,其它元素以此類推。

第三步:將最後一個元素xn的特徵輸入模型,模型根據輸入和上一步產生的h計算隱藏層h和預測值y。

隱藏層h可視為將序列中前面元素的特徵和位置通過編碼向前傳遞,從而對輸出y發生作用,隱藏層的大小決定了模型攜帶信息量的多少。隱藏層也可以作為模型的輸入從外部傳入,以及作為模型的輸出返回給外部調用。

本例仍使用上篇中的航空乘客序列數據,分別用兩種方法實現RNN:自己編寫程序實現RNN模型,以及調用Pytorch提供的RNN模型。前一種方法主要用於剖析原理,後一種用於展示常用的調用方法。

首先導入頭文件,讀取乘客數據,做歸一化處理,並將數據切分為測試集和訓練集,與之前不同的是加入了create_dataset函數,用於生成序列數據,序列的輸入部分,每個元素中包括兩個特徵:前一個月的乘客量prev和月份值mon,這里的月份值並不是關鍵特徵,主要用於在常式中展示如何使用多個特徵。

第一步:實現模型類,此例中的RNN模型除了全連接層,還生成了一個隱藏層,並在下一次前向傳播時將隱藏層輸出的數據與輸入數據組合後再代入模型運算。

第二步,訓練模型,使用全部數據訓練500次,在每次訓練時,內部for循環將序列中的每個元素代入模型,並將模型輸出的隱藏層和下一個元素一起送入下一次迭代。

第三步:預測和作圖,預測的過程與訓練一樣,把全部數據拆分成元素代入模型,並將每一次預測結果存儲在數組中,並作圖顯示。

需要注意的是,在訓練和預測過程中,每一次開始輸入新序列之前,都重置了隱藏層,這是由於隱藏層的內容只與當前序列相關,序列之間並無連續性。

程序輸出結果如下圖所示:

經過500次迭代,使用RNN的效果明顯優於上一篇中使用全連接網路的擬合效果,還可以通過調整超參數以及選擇不同特徵,進一步優化。

使用Pytorch提供的RNN模型,torch.nn.RNN類可直接使用,是循環網路最常用的解決方案。RNN,LSTM,GRU等循環網路都實現在同一源碼文件torch/nn/moles/rnn.py中。

第一步:創建模型,模型包含兩部分,第一部分是Pytorch提供的RNN層,第二部分是一個全連接層,用於將RNN的輸出轉換成輸出目標的維度。

Pytorch的RNN前向傳播允許將隱藏層數據h作為參數傳入模型,並將模型產生的h和y作為函數返回值。形如: pred, h_state = model(x, h_state)

什麼情況下需要接收隱藏層的狀態h_state,並轉入下一次迭代呢?當處理單個seq時,h在內部前向傳遞;當序列與序列之間也存在前後依賴關系時,可以接收h_state並傳入下一步迭代。另外,當模型比較復雜如LSTM模型包含眾多參數,傳遞會增加模型的復雜度,使訓練過程變慢。本例未將隱藏層轉到模型外部,這是由於模型內部實現了對整個序列的處理,而非處理單個元素,而每次代入的序列之間又沒有連續性。

第二步:訓練模型,與上例中把序列中的元素逐個代入模型不同,本例一次性把整個序列代入了模型,因此,只有一個for循環。

Pythorch支持批量處理,前向傳遞時輸入數據格式是[seq_len, batch_size, input_dim),本例中輸入數據的維度是[100, 1, 2],input_dim是每個元素的特徵數,batch_size是訓練的序列個數,seq_len是序列的長度,這里使用70%作為訓練數據,seq_len為100。如果數據維度的順序與要求不一致,一般使用transpose轉換。

第三步:預測和作圖,將全部數據作為序列代入模型,並用預測值作圖。

程序輸出結果如下圖所示:

可以看到,經過500次迭代,在前100個元素的訓練集上擬合得很好,但在測試集效果較差,可能存在過擬合。

2. 從動圖中理解 RNN,LSTM 和 GRU

遞歸神經網路(RNNs)是一類常用的序列數據人工神經網路。三種最常見的遞歸神經網路類型分別是:

要指出的一點是,我將使用"RNNS"來統稱本質上是遞歸神經網路結構,"vanilla RNN"來指代在圖一所展示的最簡單的循環神經網路結構.

有很多關於遞歸神經網路的圖解.

我個人最喜歡的一個是Michael Nguyen發表在《走向數據科學》(Towards Data Science)的這篇文章,因為他不僅給我們提供了對這些模型的直覺,更重要的是這些漂亮的插圖,使我們更容易理解。但我發表這篇文章的動機是為了更好地理解這些單元中發生了什麼,節點是如何共享的,以及它們是如何轉換為輸出節點。這里,我也受到了Michael的動畫啟發。

本文研究了vanilla RNN、LSTM和GRU單元。這是一個簡短的概述,是為那些讀過關於這些主題的文章的人准備的。(我建議在閱讀本文之前先閱讀Michael的文章),需要注意的是,以下動畫是按順序引導的,但在向量化的機器計算過程中並不反映時間上的順序。

下面是我用來做說明的圖例:

圖0:動畫圖例

在我的動畫中,我使用了大小為3(綠色)的輸入和2個隱藏單元(紅色),批量大小為1。

讓我們開始吧!

圖1:vanilla RNN 示意動畫

圖2:LSTM 示意動畫

注意,單元狀態的維度與隱藏狀態的維度相同。

圖3:GRU 示意動畫

希望這些動畫能以某種方式幫助你!以下是靜態圖像中的概況:

圖4:Vanilla RNN 單元

圖5:LSTM 單元

圖6:GRU 單元

一個提醒:我使用Google繪圖來創建的這些示意圖。

想要繼續查看該篇文章相關鏈接和參考文獻?雷鋒網雷鋒網雷鋒網

點擊【從動圖中理解 RNN,LSTM 和 GRU】即可訪問!

今日資源推薦: CCF-GAIR | 張大鵬教授演講 PPT:生物特徵識別的新進展 - 紀念中國人工智慧40年

非常高興受邀參加本次會議,讓我有機會匯報我的最新工作。今天我的講題是「紀念中國人工智慧40周年」,而我本人是中國學位法公布後首屆入學的研究生,也是哈工大畢業的首個計算機博士,從 1980 年入學開始算起,我基本見證了中國人工智慧這 40 年的發展歷程。

這是我研究生期間所能找到最早的一篇論文,選題與指紋識別有關。 1984 年,陳光熙教授是我的博士生導師,圖片展示的是當年哈工大進行博士學位論文答辯的場景。

點擊鏈接獲取:https://ai.yanxishe.com/page/resourceDetail/905

3. 循環神經網路(RNN)淺析

RNN是兩種神經網路模型的縮寫,一種是遞歸神經網路(Recursive Neural Network),一種是循環神經網路(Recurrent Neural Network)。雖然這兩種神經網路有著千絲萬縷的聯系,但是本文主要討論的是第二種神經網路模型——循環神經網路(Recurrent Neural Network)。

循環神經網路是指一個隨著時間的推移,重復發生的結構。在自然語言處理(NLP),語音圖像等多個領域均有非常廣泛的應用。RNN網路和其他網路最大的不同就在於RNN能夠實現某種「記憶功能」,是進行時間序列分析時最好的選擇。如同人類能夠憑借自己過往的記憶更好地認識這個世界一樣。RNN也實現了類似於人腦的這一機制,對所處理過的信息留存有一定的記憶,而不像其他類型的神經網路並不能對處理過的信息留存記憶。

循環神經網路的原理並不十分復雜,本節主要從原理上分析RNN的結構和功能,不涉及RNN的數學推導和證明,整個網路只有簡單的輸入輸出和網路狀態參數。一個典型的RNN神經網路如圖所示:

由上圖可以看出:一個典型的RNN網路包含一個輸入x,一個輸出h和一個神經網路單元A。和普通的神經網路不同的是,RNN網路的神經網路單元A不僅僅與輸入和輸出存在聯系,其與自身也存在一個迴路。這種網路結構就揭示了RNN的實質:上一個時刻的網路狀態信息將會作用於下一個時刻的網路狀態。如果上圖的網路結構仍不夠清晰,RNN網路還能夠以時間序列展開成如下形式:

等號右邊是RNN的展開形式。由於RNN一般用來處理序列信息,因此下文說明時都以時間序列來舉例,解釋。等號右邊的等價RNN網路中最初始的輸入是x0,輸出是h0,這代表著0時刻RNN網路的輸入為x0,輸出為h0,網路神經元在0時刻的狀態保存在A中。當下一個時刻1到來時,此時網路神經元的狀態不僅僅由1時刻的輸入x1決定,也由0時刻的神經元狀態決定。以後的情況都以此類推,直到時間序列的末尾t時刻。

上面的過程可以用一個簡單的例子來論證:假設現在有一句話「I want to play basketball」,由於自然語言本身就是一個時間序列,較早的語言會與較後的語言存在某種聯系,例如剛才的句子中「play」這個動詞意味著後面一定會有一個名詞,而這個名詞具體是什麼可能需要更遙遠的語境來決定,因此一句話也可以作為RNN的輸入。回到剛才的那句話,這句話中的5個單詞是以時序出現的,我們現在將這五個單詞編碼後依次輸入到RNN中。首先是單詞「I」,它作為時序上第一個出現的單詞被用作x0輸入,擁有一個h0輸出,並且改變了初始神經元A的狀態。單詞「want」作為時序上第二個出現的單詞作為x1輸入,這時RNN的輸出和神經元狀態將不僅僅由x1決定,也將由上一時刻的神經元狀態或者說上一時刻的輸入x0決定。之後的情況以此類推,直到上述句子輸入到最後一個單詞「basketball」。

接下來我們需要關注RNN的神經元結構:

上圖依然是一個RNN神經網路的時序展開模型,中間t時刻的網路模型揭示了RNN的結構。可以看到,原始的RNN網路的內部結構非常簡單。神經元A在t時刻的狀態僅僅是t-1時刻神經元狀態與t時刻網路輸入的雙曲正切函數的值,這個值不僅僅作為該時刻網路的輸出,也作為該時刻網路的狀態被傳入到下一個時刻的網路狀態中,這個過程叫做RNN的正向傳播(forward propagation)。註:雙曲正切函數的解析式如下:

雙曲正切函數的求導如下:

雙曲正切函數的圖像如下所示:

這里就帶來一個問題:為什麼RNN網路的激活函數要選用雙曲正切而不是sigmod呢?(RNN的激活函數除了雙曲正切,RELU函數也用的非常多)原因在於RNN網路在求解時涉及時間序列上的大量求導運算,使用sigmod函數容易出現梯度消失,且sigmod的導數形式較為復雜。事實上,即使使用雙曲正切函數,傳統的RNN網路依然存在梯度消失問題,無法「記憶」長時間序列上的信息,這個bug直到LSTM上引入了單元狀態後才算較好地解決。

這一節主要介紹與RNN相關的數學推導,由於RNN是一個時序模型,因此其求解過程可能和一般的神經網路不太相同。首先需要介紹一下RNN完整的結構圖,上一節給出的RNN結構圖省去了很多內部參數,僅僅作為一個概念模型給出。

上圖表明了RNN網路的完整拓撲結構,從圖中我們可以看到RNN網路中的參數情況。在這里我們只分析t時刻網路的行為與數學推導。t時刻網路迎來一個輸入xt,網路此時刻的神經元狀態st用如下式子表達:

t時刻的網路狀態st不僅僅要輸入到下一個時刻t+1的網路狀態中去,還要作為該時刻的網路輸出。當然,st不能直接輸出,在輸出之前還要再乘上一個系數V,而且為了誤差逆傳播時的方便通常還要對輸出進行歸一化處理,也就是對輸出進行softmax化。因此,t時刻網路的輸出ot表達為如下形式:

為了表達方便,筆者將上述兩個公式做如下變換:

以上,就是RNN網路的數學表達了,接下來我們需要求解這個模型。在論述具體解法之前首先需要明確兩個問題:優化目標函數是什麼?待優化的量是什麼?

只有在明確了這兩個問題之後才能對模型進行具體的推導和求解。關於第一個問題,筆者選取模型的損失函數作為優化目標;關於第二個問題,我們從RNN的結構圖中不難發現:只要我們得到了模型的U,V,W這三個參數就能完全確定模型的狀態。因此該優化問題的優化變數就是RNN的這三個參數。順便說一句,RNN模型的U,V,W三個參數是全局共享的,也就是說不同時刻的模型參數是完全一致的,這個特性使RNN得參數變得稍微少了一些。

不做過多的討論,RNN的損失函數選用交叉熵(Cross Entropy),這是機器學習中使用最廣泛的損失函數之一了,其通常的表達式如下所示:

上面式子是交叉熵的標量形式,y_i是真實的標簽值,y_i*是模型給出的預測值,最外面之所以有一個累加符號是因為模型輸出的一般都是一個多維的向量,只有把n維損失都加和才能得到真實的損失值。交叉熵在應用於RNN時需要做一些改變:首先,RNN的輸出是向量形式,沒有必要將所有維度都加在一起,直接把損失值用向量表達就可以了;其次,由於RNN模型處理的是序列問題,因此其模型損失不能只是一個時刻的損失,應該包含全部N個時刻的損失。

故RNN模型在t時刻的損失函數寫成如下形式:

全部N個時刻的損失函數(全局損失)表達為如下形式:

需要說明的是:yt是t時刻輸入的真實標簽值,ot為模型的預測值,N代表全部N個時刻。下文中為了書寫方便,將Loss簡記為L。在結束本小節之前,最後補充一個softmax函數的求導公式:

由於RNN模型與時間序列有關,因此不能直接使用BP(back propagation)演算法。針對RNN問題的特殊情況,提出了BPTT演算法。BPTT的全稱是「隨時間變化的反向傳播演算法」(back propagation through time)。這個方法的基礎仍然是常規的鏈式求導法則,接下來開始具體推導。雖然RNN的全局損失是與全部N個時刻有關的,但為了簡單筆者在推導時只關注t時刻的損失函數。

首先求出t時刻下損失函數關於o_t*的微分:

求出損失函數關於參數V的微分:

因此,全局損失關於參數V的微分為:

求出t時刻的損失函數關於關於st*的微分:

求出t時刻的損失函數關於s_t-1*的微分:

求出t時刻損失函數關於參數U的偏微分。注意:由於是時間序列模型,因此t時刻關於U的微分與前t-1個時刻都有關,在具體計算時可以限定最遠回溯到前n個時刻,但在推導時需要將前t-1個時刻全部帶入:

因此,全局損失關於U的偏微分為:

求t時刻損失函數關於參數W的偏微分,和上面相同的道理,在這里仍然要計算全部前t-1時刻的情況:

因此,全局損失關於參數W的微分結果為:

至此,全局損失函數關於三個主要參數的微分都已經得到了。整理如下:

接下來進一步化簡上述微分表達式,化簡的主要方向為t時刻的損失函數關於ot的微分以及關於st*的微分。已知t時刻損失函數的表達式,求關於ot的微分:

softmax函數求導:

因此:

又因為:

且:

有了上面的數學推導,我們可以得到全局損失關於U,V,W三個參數的梯度公式:

由於參數U和W的微分公式不僅僅與t時刻有關,還與前面的t-1個時刻都有關,因此無法寫出直接的計算公式。不過上面已經給出了t時刻的損失函數關於s_t-1的微分遞推公式,想來求解這個式子也是十分簡單的,在這里就不贅述了。

以上就是關於BPTT演算法的全部數學推導。從最終結果可以看出三個公式的偏微分結果非常簡單,在具體的優化過程中可以直接帶入進行計算。對於這種優化問題來說,最常用的方法就是梯度下降法。針對本文涉及的RNN問題,可以構造出三個參數的梯度更新公式:

依靠上述梯度更新公式就能夠迭代求解三個參數,直到三個參數的值發生收斂。

這是筆者第一次嘗試推導RNN的數學模型,在推導過程中遇到了非常多的bug。非常感謝互聯網上的一些公開資料和博客,給了我非常大的幫助和指引。接下來筆者將嘗試實現一個單隱層的RNN模型用於實現一個語義預測模型。

4. 循環神經網路(RNN)簡介

循環神經網路英文名稱為 ( Recurrent Neural Network, RNN ),其通過使用帶自反饋的神經元,能夠處理任意長度的 時序 數據。

給定輸入時序序列

式中, 表示一段時序數據, 為時間長度

以一段英文段落為例,其時序數據可以表示為:

若是一段視頻,將其每一幀通過CNN網路處理得到相應的編碼向量

循環神經網路通過以下公式更新隱藏層的活性值

循環神經網路圖示

RNN的基本模型如下圖所示,為便於理解,圖中將RNN的模型展開,按照時序方向對其前向傳播流程進行介紹

RNN的基本模型

利用數學表達式整個過程可以變得更加清晰,RNN的前向傳播公式如下:

將上述過程整合到一個RNN cell中,可以表示為如下圖所示的過程:

RNN的前向傳播示意圖

缺陷:

沒有利用到模型後續的信息,可以通過雙向RNN網路進行優化

RNN主要有兩種計算梯度的方式:隨時間反向傳播(BPTT)和實時循環學習法(RTRL)演算法

本文中主要介紹隨時間反向傳播的方法 ( BackPropagation Through Time

RNN的損失函數與任務有關,對於同步的序列對序列任務,其loss可以用交叉熵公式表示

然後通過BPTT演算法便可以進行梯度的反向傳播計算

梯度爆炸的解決方法:梯度修剪

梯度消失的解決方法:增加長程依賴 LSTM,GRU

GRU的基本思路:增加相關門(Relate Gate)和更新門(Update Gate),進而使得RNN單元具有記憶能力

首先從數學角度對GRU的前向傳播過程進行介紹,具體公式如下:

公式中各變數的含義:

將上述數學公式轉化為圖像,可得

GRU Cell的前向傳播流程

LSTM意為長短時記憶網路 (Long Short-Term Memory Network,LSTM) ,可以有效地解決簡單神經網路的梯度消失和爆炸問題

在LSTM中,與GRU主要有兩點不同

同樣,先從數學公式入手,對LSTM的前向傳播過程進行了解

基於數學公式的過程,可將LSTM CELL的前向傳播過程總結為(圖片借用於nndl):

LSTM Cell的前向傳播示意圖

從上圖中可以看出,LSTM在前向傳播的過程中傳輸了兩個狀態:內部狀態 以及外部狀態 ,在整個傳播過程中 外部狀態(隱狀態) 每個時刻都會被重寫,因此可以看作一種 短時記憶 ,而 內部狀態 可以在某個時刻捕捉一些關鍵信息,並將此信息保存一段時間間隔,可以看作一種 長時記憶 (長的短時記憶)

此外,在LSTM網路初始化訓練的時候,需要手動將遺忘門的數值設置的大一些,否則在參數初始化的時候,遺忘門的數據會被初始化為一個很小的值,前一時刻的內部狀態 大部分都會丟失,這樣網路很難獲取到長距離的依賴信息,並且相鄰時間間隔的梯度會非常小,導致 梯度彌散 問題,因此遺忘門的 偏置變數 的初始值 一般很大,取 1或2

將 設置為1即可,但是長度非常的大的時候會造成記憶單元的飽和,降低性能

三個門不僅依賴於 和 ,也依賴於

將兩者合並為一個門,即:

首先,我們要理解什麼是深層的RNN,對於單個的RNN cell,若將其在時間維度上展開,其深度與時間維度的長度成正比,但若將一個RNN cell看作為單個從 的映射函數,則單個cell實際上是很淺顯的一層,因此深層循環神經網路要做的就是把多個RNN cell組合起來,換句話說,就是增加從輸入 到輸出 的路徑,使得網路的深度更深。

如何增加從輸入 到輸出 的路徑呢?兩種途徑:

堆疊循環神經網路示意圖

將網路帶入到實際應用場景中:假如我們要翻譯一段句子

在這里,is和are實際上是由後面的Lucy和they所決定的,而這種單向的按照時序進行傳播的方式沒有利用到後面的信息。因此誕生了雙向循環網路

雙向循環神經網路示意圖

雙向循環神經網路實際上就是簡單的雙層循環神經網路,只不過第二層網路的傳播方式為按時序的逆向傳播,其傳播公式為:

5. 循環神經網路(RNN)的應用

循環神經網路(RNN)是目前深度學習最有前景的工具之一,它解決了傳統神經網路不能共享從數據中共享位置的特徵的問題。目前,RNN已經有了不少有意思的應用:

語音識別 :輸入的語音數據,生成相應的語音文本信息。比如微信的語音轉文字功能。

機器翻譯 :不同語言之間的相互轉換。像有道翻譯、騰訊翻譯官等。最近微軟據說實現了中翻英媲美人類的水平

音樂生成 :使用RNN網路生成音樂,一般會用到RNN中的LSTM演算法(該演算法可以解決RNN網路中相距較遠的節點梯度消失的問題)。下面這個github項目實現了jazz音樂的生成。
deepjazz

文本生成 :利用RNN亦可以生成某種風格的文字。有興趣的可以看一下一下兩個github項目
numpy實現字元層面的文本生成器
keras實現特定作家風格的文本

情感分類 :輸入文本或者語音的評論數據,輸出相應的打分數據。

DNA序列分析 :輸入的DNA序列,輸出蛋白質表達的子序列。

視頻行為識別 :識別輸入的視頻幀序列中的人物行為。

實體名字識別 :從文本中識別實體的名字。

6. 理解 LSTM 網路

作者 : Christopher Olah (OpenAI)
譯者 :朱小虎 Xiaohu (Neil) Zhu(CSAGI / University AI)
原文鏈接 : https://colah.github.io/posts/2015-08-Understanding-LSTMs/

術語 : 循環神經網路(Recurrent Neural Network, 簡稱 RNN); 長短期記憶(Long Short-Term Memory, 簡稱 LSTM); 門限循環單元(Gated Recurrent Unit, 簡稱 GRU)

人類並不是每時每刻都從一片空白的大腦開始他們的思考。在你閱讀這篇文章時候,你都是基於自己已經擁有的對先前所見詞的理解來推斷當前詞的真實含義。我們不會將所有的東西都全部丟棄,然後用空白的大腦進行思考。我們的思想擁有持久性。

傳統的神經網路並不能做到這點,看起來也像是一種巨大的弊端。例如,假設你希望對電影中的每個時間點的時間類型進行分類。傳統的神經網路應該很難來處理這個問題——使用電影中先前的事件推斷後續的事件。

RNN 解決了這個問題。RNN 是包含循環的網路,允許信息的持久化。

在上面的示例圖中,神經網路的模塊, ,正在讀取某個輸入 ,並輸出一個值 。循環可以使得信息可以從當前步傳遞到下一步。

這些循環使得 RNN 看起來非常神秘。然而,如果你仔細想想,這樣也不比一個正常的神經網路難於理解。RNN 可以被看做是同一神經網路的多次復制,每個神經網路模塊會把消息傳遞給下一個。所以,如果我們將這個循環展開:

鏈式的特徵揭示了 RNN 本質上是與序列和列表相關的。他們是對於這類數據的最自然的神經網路架構。

並且 RNN 也已經被人們應用了!在過去幾年中,應用 RNN 在語音識別,語言建模,翻譯,圖片描述等問題上已經取得一定成功,並且這個列表還在增長。我建議大家參考 Andrej Karpathy 的博客文章—— The Unreasonable Effectiveness of Recurrent Neural Networks 來看看更豐富有趣的 RNN 的成功應用。

而這些成功應用的關鍵之處就是 LSTM 的使用,這是一種特別的 RNN,比標準的 RNN 在很多的任務上都表現得更好。幾乎所有的令人振奮的關於 RNN 的結果都是通過 LSTM 達到的。這篇博文也會就 LSTM 進行展開。

RNN 的關鍵點之一就是他們可以用來連接先前的信息到當前的任務上,例如使用過去的視頻段來推測對當前段的理解。如果 RNN 可以做到這個,他們就變得非常有用。但是真的可以么?答案是,還有很多依賴因素。

有時候,我們僅僅需要知道先前的信息來執行當前的任務。例如,我們有一個語言模型用來基於先前的詞來預測下一個詞。如果我們試著預測 「the clouds are in the sky」 最後的詞,我們並不需要任何其他的上下文 —— 因此下一個詞很顯然就應該是 sky。在這樣的場景中,相關的信息和預測的詞位置之間的間隔是非常小的,RNN 可以學會使用先前的信息。

但是同樣會有一些更加復雜的場景。假設我們試著去預測「I grew up in France... I speak fluent French」最後的詞。當前的信息建議下一個詞可能是一種語言的名字,但是如果我們需要弄清楚是什麼語言,我們是需要先前提到的離當前位置很遠的 France 的上下文的。這說明相關信息和當前預測位置之間的間隔就肯定變得相當的大。

不幸的是,在這個間隔不斷增大時,RNN 會喪失學習到連接如此遠的信息的能力。

在理論上,RNN 絕對可以處理這樣的 長期依賴 問題。人們可以仔細挑選參數來解決這類問題中的最初級形式,但在實踐中,RNN 肯定不能夠成功學習到這些知識。 Bengio, et al. (1994) 等人對該問題進行了深入的研究,他們發現一些使訓練 RNN 變得非常困難的相當根本的原因。

然而,幸運的是,LSTM 並沒有這個問題!

Long Short Term 網路—— 一般就叫做 LSTM ——是一種 RNN 特殊的類型,可以學習長期依賴信息。LSTM 由 Hochreiter & Schmidhuber (1997) 提出,並在近期被 Alex Graves 進行了改良和推廣。在很多問題,LSTM 都取得相當巨大的成功,並得到了廣泛的使用。

LSTM 通過刻意的設計來避免長期依賴問題。記住長期的信息在實踐中是 LSTM 的默認行為,而非需要付出很大代價才能獲得的能力!

所有 RNN 都具有一種重復神經網路模塊的鏈式的形式。在標準的 RNN 中,這個重復的模塊只有一個非常簡單的結構,例如一個 tanh 層。

LSTM 同樣是這樣的結構,但是重復的模塊擁有一個不同的結構。不同於 單一神經網路層,這里是有四個,以一種非常特殊的方式進行交互。

不必擔心這里的細節。我們會一步一步地剖析 LSTM 解析圖。現在,我們先來熟悉一下圖中使用的各種元素的圖標。

在上面的圖例中,每一條黑線傳輸著一整個向量,從一個節點的輸出到其他節點的輸入。粉色的圈代表按位 pointwise 的操作,諸如向量的和,而黃色的矩陣就是學習到的神經網路層。合在一起的線表示向量的連接,分開的線表示內容被復制,然後分發到不同的位置。

LSTM 的關鍵就是細胞狀態,水平線在圖上方貫穿運行。

細胞狀態類似於傳送帶。直接在整個鏈上運行,只有一些少量的線性交互。信息在上面流傳保持不變會很容易。

LSTM 有通過精心設計的稱作為「門」的結構來去除或者增加信息到細胞狀態的能力。門是一種讓信息選擇式通過的方法。他們包含一個 sigmoid 神經網路層和一個按位的乘法操作。

Sigmoid 層輸出 到 之間的數值,描述每個部分有多少量可以通過。 代表「不許任何量通過」, 就指「允許任意量通過」!

LSTM 擁有三個門,來保護和控制細胞狀態。

在我們 LSTM 中的第一步是決定我們會從細胞狀態中丟棄什麼信息。這個決定通過一個稱為 忘記門層 完成。該門會讀取 和 ,輸出一個在 到 之間的數值給每個在細胞狀態 中的數字。 表示「完全保留」, 表示「完全舍棄」。

讓我們回到語言模型的例子中來基於已經看到的預測下一個詞。在這個問題中,細胞狀態可能包含當前 主語 的性別,因此正確的 代詞 可以被選擇出來。當我們看到新的 主語 ,我們希望忘記舊的 主語

下一步是確定什麼樣的新信息被存放在細胞狀態中。這里包含兩個部分。第一, sigmoid 層稱 「輸入門層」 決定什麼值我們將要更新。然後,一個 tanh 層創建一個新的候選值向量, ,會被加入到狀態中。下一步,我們會講這兩個信息來產生對狀態的更新。

在我們語言模型的例子中,我們希望增加新的主語的性別到細胞狀態中,來替代舊的需要忘記的主語。

現在是更新舊細胞狀態的時間了, 更新為 。前面的步驟已經決定了將會做什麼,我們現在就是實際去完成。

我們把舊狀態與 相乘,丟棄掉我們確定需要丟棄的信息。接著加上 。這就是新的候選值,根據我們決定更新每個狀態的程度進行變化。

在語言模型的例子中,這就是我們實際根據前面確定的目標,丟棄舊代詞的性別信息並添加新的信息的地方。

最終,我們需要確定輸出什麼值。這個輸出將會基於我們的細胞狀態,但是也是一個過濾後的版本。首先,我們運行一個 sigmoid 層來確定細胞狀態的哪個部分將輸出出去。接著,我們把細胞狀態通過 tanh 進行處理(得到一個在 到 之間的值)並將它和 sigmoid 門的輸出相乘,最終我們僅僅會輸出我們確定輸出的那部分。

在語言模型的例子中,因為他就看到了一個 代詞 ,可能需要輸出與一個 動詞 相關的信息。例如,可能輸出是否代詞是單數還是負數,這樣如果是動詞的話,我們也知道動詞需要進行的詞形變化。

我們到目前為止都還在介紹正常的 LSTM。但是不是所有的 LSTM 都長成一個樣子的。實際上,幾乎所有包含 LSTM 的論文都採用了微小的變體。差異非常小,但是也值得拿出來講一下。

其中一個流形的 LSTM 變體,就是由 Gers & Schmidhuber (2000) 提出的,增加了 「peephole connection」。是說,我們讓 門層 也會接受細胞狀態的輸入。

上面的圖例中,我們增加了 peephole 到每個門上,但是許多論文會加入部分的 peephole 而非所有都加。

另一個變體是通過使用 coupled 忘記和輸入門。不同於之前是分開確定什麼忘記和需要添加什麼新的信息,這里是一同做出決定。我們僅僅會當我們將要輸入在當前位置時忘記。我們僅僅輸入新的值到那些我們已經忘記舊的信息的那些狀態 。

另一個改動較大的變體是 Gated Recurrent Unit (GRU),這是由 Cho, et al. (2014) 提出。它將忘記門和輸入門合成了一個單一的 更新門。同樣還混合了細胞狀態和隱藏狀態,和其他一些改動。最終的模型比標準的 LSTM 模型要簡單,也是非常流行的變體。

這里只是部分流行的 LSTM 變體。當然還有很多其他的,如 Yao, et al. (2015) 提出的 Depth Gated RNN。還有用一些完全不同的觀點來解決長期依賴的問題,如 Koutnik, et al. (2014) 提出的 Clockwork RNN。

要問哪個變體是最好的?其中的差異性真的重要嗎? Greff, et al. (2015) 給出了流行變體的比較,結論是他們基本上是一樣的。 Jozefowicz, et al. (2015) 則在超過 1 萬種 RNN 架構上進行了測試,發現一些架構在某些任務上也取得了比 LSTM 更好的結果。

剛開始,我提到通過 RNN 得到重要的結果。本質上所有這些都可以使用 LSTM 完成。對於大多數任務確實展示了更好的性能!

由於 LSTM 一般是通過一系列的方程表示的,使得 LSTM 有一點令人費解。然而本文中一步一步地解釋讓這種困惑消除了不少。

LSTM 是我們在 RNN 中獲得的重要成功。很自然地,我們也會考慮:哪裡會有更加重大的突破呢?在研究人員間普遍的觀點是:「Yes! 下一步已經有了——那就是 注意力 !」 這個想法是讓 RNN 的每一步都從更加大的信息集中挑選信息。例如,如果你使用 RNN 來產生一個圖片的描述,可能會選擇圖片的一個部分,根據這部分信息來產生輸出的詞。實際上, Xu, et al. (2015) 已經這么做了——如果你希望深入探索 注意力 可能這就是一個有趣的起點!還有一些使用注意力的相當振奮人心的研究成果,看起來有更多的東西亟待探索……
注意力也不是 RNN 研究領域中唯一的發展方向。例如, Kalchbrenner, et al. (2015) 提出的 Grid LSTM 看起來也是很有前途。使用生成模型的 RNN,諸如 Gregor, et al. (2015) Chung, et al. (2015) 和 Bayer & Osendorfer (2015) 提出的模型同樣很有趣。在過去幾年中,RNN 的研究已經相當的燃,而研究成果當然也會更加豐富!

I』m grateful to a number of people for helping me better understand LSTMs, commenting on the visualizations, and providing feedback on this post.
I』m very grateful to my colleagues at Google for their helpful feedback, especially Oriol Vinyals , Greg Corrado , Jon Shlens , Luke Vilnis , and Ilya Sutskever . I』m also thankful to many other friends and colleagues for taking the time to help me, including Dario Amodei , and Jacob Steinhardt . I』m especially thankful to Kyunghyun Cho for extremely thoughtful correspondence about my diagrams.
Before this post, I practiced explaining LSTMs ring two seminar series I taught on neural networks. Thanks to everyone who participated in those for their patience with me, and for their feedback.

7. CNN(卷積神經網路)、RNN(循環神經網路)、DNN(深度神經網路)的內部網路結構有什麼區別

如下:

1、DNN:存在著一個問題——無法對時間序列上的變化進行建模。然而,樣本出現的時間順序對於自然語言處理、語音識別、手寫體識別等應用非常重要。對了適應這種需求,就出現了另一種神經網路結構——循環神經網路RNN。

2、CNN:每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被稱為前向神經網路。

3、RNN:神經元的輸出可以在下一個時間戳直接作用到自身,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出!

介紹

神經網路技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是Rosenblatt。

在實際應用中,所謂的深度神經網路DNN,往往融合了多種已知的結構,包括卷積層或是LSTM單元。

8. 循環神經網路

花書中關於RNN的內容記錄於 https://www.jianshu.com/p/206090600f13 。

在前饋神經網路中,信息的傳遞是單向的,這種限制雖然使得網路變得更容易學習,但在一定程度上也減弱了神經網路模型的能力。在生物神經網路中,神經元之間的連接關系要復雜的多。 前饋神經網路可以看作是一個復雜的函數,每次輸入都是獨立的,即網路的輸出只依賴於當前的輸入。但是在很多現實任務中,網路的輸入不僅和當前時刻的輸入相關,也和其過去一段時間的輸出相關 。因此,前饋網路難以處理時序數據,比如視頻、語音、文本等。時序數據的長度一般是不固定的,而前饋神經網路要求輸入和輸出的維數都是固定的,不能任意改變。因此,當處理這一類和時序相關的問題時,就需要一種能力更強的模型。

循環神經網路(Recurrent Neural Network,RNN)是一類具有短期記憶能力的神經網路。在循環神經網路中,神經元不但可以接受其它神經元的信息,也可以接受自身的信息,形成具有環路的網路結構。 和前饋神經網路相比,循環神經網路更加符合生物神經網路的結構。循環神經網路已經被廣泛應用在語音識別、語言模型以及自然語言生成等任務上。循環神經網路的參數學習可以通過 隨時間反向傳播演算法 來學習。

為了處理這些時序數據並利用其歷史信息,我們需要讓網路具有短期記憶能力。而前饋網路是一個靜態網路,不具備這種記憶能力。

一種簡單的利用歷史信息的方法是建立一個額外的延時單元,用來存儲網路的歷史信息(可以包括輸入、輸出、隱狀態等)。比較有代表性的模型是延時神經網路。

延時神經網路是在前饋網路中的非輸出層都添加一個延時器,記錄最近幾次神經元的輸出。在第 個時刻,第 層神經元和第 層神經元的最近 次輸出相關,即:

延時神經網路在時間維度上共享權值,以降低參數數量。因此對於序列輸入來講,延時神經網路就相當於卷積神經網路

自回歸模型(Autoregressive Model,AR) 是統計學上常用的一類時間序列模型,用一個變數 的歷史信息來預測自己:

其中 為超參數, 為參數, 為第 個時刻的雜訊,方差 和時間無關。

有外部輸入的非線性自回歸模型(Nonlinear Autoregressive with ExogenousInputs Model,NARX) 是自回歸模型的擴展,在每個時刻 都有一個外部輸入 ,產生一個輸出 。NARX通過一個延時器記錄最近幾次的外部輸入和輸出,第 個時刻的輸出 為:

其中 表示非線性函數,可以是一個前饋網路, 和 為超參數。

循環神經網路通過使用帶自反饋的神經元,能夠處理任意長度的時序數據。

給定一個輸入序列 ,循環神經網路通過下面
公式更新帶反饋邊的隱藏層的活性值 :

其中 , 為一個非線性函數,也可以是一個前饋網路。

從數學上講,上式可以看成一個動力系統。動力系統(Dynamical System)是一個數學上的概念,指 系統狀態按照一定的規律隨時間變化的系統 。具體地講,動力系統是使用一個函數來描述一個給定空間(如某個物理系統的狀態空間)中所有點隨時間的變化情況。因此, 隱藏層的活性值 在很多文獻上也稱為狀態(State)或隱狀態(Hidden States) 。理論上,循環神經網路可以近似任意的非線性動力系統。

簡單循環網路(Simple Recurrent Network,SRN)是一個非常簡單的循環神經網路,只有一個隱藏層的神經網路。

在一個兩層的前饋神經網路中,連接存在相鄰的層與層之間,隱藏層的節點之間是無連接的。而 簡單循環網路增加了從隱藏層到隱藏層的反饋連接

假設在時刻 時,網路的輸入為 ,隱藏層狀態(即隱藏層神經元活性值) 不僅和當前時刻的輸入 相關,也和上一個時刻的隱藏層狀態 相關:

其中 為隱藏層的凈輸入, 是非線性激活函數,通常為Logistic函數或Tanh函數, 為狀態-狀態權重矩陣, 為狀態-輸入權重矩陣, 為偏置。上面兩式也經常直接寫為:

如果我們把每個時刻的狀態都看作是前饋神經網路的一層的話,循環神經網路可以看作是在時間維度上權值共享的神經網路 。下圖給出了按時間展開的循環神經網路。

由於循環神經網路具有短期記憶能力,相當於存儲裝置,因此其計算能力十分強大。 前饋神經網路可以模擬任何連續函數,而循環神經網路可以模擬任何程序。

定義一個完全連接的循環神經網路,其輸入為 ,輸出為 :

其中 為隱狀態, 為非線性激活函數, 和 為網路參數。

這樣一個完全連接的循環神經網路可以近似解決所有的可計算問題

循環神經網路可以應用到很多不同類型的機器學習任務。根據這些任務的特點可以分為以下幾種模式: 序列到類別模式、同步的序列到序列模式、非同步的序列到序列模式

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

假設一個樣本 為一個長度為 的序列,輸出為一個類別 。我們可以將樣本 按不同時刻輸入到循環神經網路中,並得到不同時刻的隱藏狀態 。我們可以將 看作整個序列的最終表示(或特徵),並輸入給分類器 進行分類:

其中 可以是簡單的線性分類器(比如Logistic 回歸)或復雜的分類器(比如多層前饋神經網路)

除了將最後時刻的狀態作為序列表示之外,我們還可以對整個序列的所有狀態進行平均,並用這個平均狀態來作為整個序列的表示:

同步的序列到序列模式 主要用於序列標注(Sequence Labeling)任務,即每一時刻都有輸入和輸出,輸入序列和輸出序列的長度相同 。比如詞性標注(Partof-Speech Tagging)中,每一個單詞都需要標注其對應的詞性標簽。

輸入為序列 ,輸出為序列 。樣本 按不同時刻輸入到循環神經網路中,並得到不同時刻的隱狀態 。每個時刻的隱狀態 代表當前和歷史的信息,並輸入給分類器 得到當前時刻的標簽 。

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

在非同步的序列到序列模式中,輸入為長度為 的序列 ,輸出為長度為 的序列 。經常通過 先編碼後解碼 的方式來實現。先將樣本 按不同時刻輸入到一個循環神經網路(編碼器)中,並得到其編碼 。然後再使用另一個循環神經網路(解碼器)中,得到輸出序列 。為了建立輸出序列之間的依賴關系,在解碼器中通常使用非線性的自回歸模型。

其中 分別為用作編碼器和解碼器的循環神經網路, 為分類器, 為預測輸出 的向量表示。

循環神經網路的參數可以通過梯度下降方法來進行學習。給定一個訓練樣本 ,其中 為長度是 的輸入序列, 是長度為 的標簽序列。即在每個時刻 ,都有一個監督信息 ,我們定義時刻 的損失函數為:

其中 為第 時刻的輸出, 為可微分的損失函數,比如交叉熵。那麼整個序列上損失函數為:

整個序列的損失函數 關於參數 的梯度為:

即每個時刻損失 對參數 的偏導數之和。

循環神經網路中存在一個遞歸調用的函數 ,因此其計算參數梯度的方式和前饋神經網路不太相同。在循環神經網路中主要有兩種計算梯度的方式: 隨時間反向傳播(BPTT)和實時循環學習(RTRL)演算法。

隨時間反向傳播(Backpropagation Through Time,BPTT) 演算法的主要思想是通過類似前饋神經網路的錯誤反向傳播演算法來進行計算梯度。

BPTT演算法將循環神經網路看作是一個展開的多層前饋網路,其中「每一層」對應循環網路中的「每個時刻」。在「展開」的前饋網路中,所有層的參數是共享的,因此參數的真實梯度是將所有「展開層」的參數梯度之和

因為參數 和隱藏層在每個時刻 的凈輸入 有關,因此第 時刻的損失函數 關於參數 的梯度為:

其中 表示「直接」偏導數,即公式 中保持 不變,對 求偏導數,得到:

其中 為第 時刻隱狀態的第 維; 除了第 個值為 外,其餘都為 的行向量。

定義誤差項 為第 時刻的損失對第 時刻隱藏神經層的凈輸入 的導數,則:

從而:

寫成矩陣形式為:

由此得到整個序列的損失函數 關於參數 的梯度:

同理可得, 關於權重 和偏置 的梯度為:

在BPTT演算法中,參數的梯度需要在一個完整的「前向」計算和「反向」計算後才能得到並進行參數更新。如下圖所示。

與反向傳播的BPTT演算法不同的是,實時循環學習(Real-Time Recurrent Learning)是通過前向傳播的方式來計算梯度。

假設循環神經網路中第 時刻的狀態 為:

其關於參數 的偏導數為:

RTRL演算法從第1 個時刻開始,除了計算循環神經網路的隱狀態之外,還依次前向計算偏導數 。

兩種學習演算法比較:

RTRL演算法和BPTT演算法都是基於梯度下降的演算法,分別通過前向模式和反向模式應用鏈式法則來計算梯度。 在循環神經網路中,一般網路輸出維度遠低於輸入維度,因此BPTT演算法的計算量會更小,但BPTT演算法需要保存所有時刻的中間梯度,空間復雜度較高。RTRL演算法不需要梯度回傳,因此非常適合於需要在線學習或無限序列的任務中

循環神經網路在學習過程中的主要問題是由於 梯度消失或爆炸問題 ,很難建模長時間間隔(Long Range)的狀態之間的依賴關系。

在BPTT演算法中,我們有:

如果定義 ,則:

若 ,當 時, ,會造成系統不穩定,稱為梯度爆炸問題;相反,若 ,當 時, ,會出現和深度前饋神經網路類似的梯度消失問題。

雖然簡單循環網路理論上可以建立長時間間隔的狀態之間的依賴關系,但是由於梯度爆炸或消失問題,實際上只能學習到短期的依賴關系。這樣,如果t時刻的輸出 依賴於 時刻的輸入 ,當間隔 比較大時,簡單神經網路很難建模這種長距離的依賴關系,稱為 長程依賴問題(Long-Term dependencies Problem)

一般而言,循環網路的梯度爆炸問題比較容易解決,一般 通過權重衰減或梯度截斷來避免。 權重衰減是通過給參數增加 或 范數的正則化項來限制參數的取值范圍,從而使得 。梯度截斷是另一種有效的啟發式方法,當梯度的模大於一定閾值時,就將它截斷成為一個較小的數。

梯度消失是循環網路的主要問題。除了使用一些優化技巧外,更有效的方式就是改變模型,比如讓 ,同時使用 ,即:

其中 是一個非線性函數, 為參數。

上式中, 和 之間為線性依賴關系,且權重系數為1,這樣就不存在梯度爆炸或消失問題。但是,這種改變也丟失了神經元在反饋邊上的非線性激活的性質,因此也降低了模型的表示能力。

為了避免這個缺點,我們可以採用一種更加有效的改進策略:

這樣 和 之間為既有線性關系,也有非線性關系,並且可以緩解梯度消失問題。但這種改進依然存在兩個問題:

為了解決這兩個問題,可以通過引入 門控機制 來進一步改進模型。

為了改善循環神經網路的長程依賴問題,一種非常好的解決方案是引入門控機制來控制信息的累積速度,包括 有選擇地加入新的信息,並有選擇地遺忘之前累積的信息 。這一類網路可以稱為基於門控的循環神經網路(Gated RNN)。本節中,主要介紹兩種基於門控的循環神經網路: 長短期記憶網路和門控循環單元網路。

長短期記憶(Long Short-Term Memory,LSTM)網路 是循環神經網路的一個變體,可以有效地解決簡單循環神經網路的梯度爆炸或消失問題。

在 基礎上,LSTM網路主要改進在以下兩個方面:

其中 和 三個門(gate)來控制信息傳遞的路徑; 為向量元素乘積; 為上一時刻的記憶單元; 是通過非線性函數得到的候選狀態:

在每個時刻 ,LSTM網路的內部狀態 記錄了到當前時刻為止的歷史信息。

在數字電路中,門(Gate)為一個二值變數{0, 1},0代表關閉狀態,不許任何信息通過;1代表開放狀態,允許所有信息通過。LSTM網路中的「門」是一種「軟」門,取值在(0, 1) 之間,表示 以一定的比例運行信息通過 。LSTM網路中三個門的作用為:

(1)遺忘門 控制上一個時刻的內部狀態 需要遺忘多少信息。
(2)輸入門 控制當前時刻的候選狀態 有多少信息需要保存。
(3)輸出門

9. DNN、RNN、CNN分別是什麼意思

DNN(深度神經網路),是深度學習的基礎。

DNN可以理解為有很多隱藏層的神經網路。這個很多其實也沒有什麼度量標准, 多層神經網路和深度神經網路DNN其實也是指的一個東西,當然,DNN有時也叫做多層感知機(Multi-Layer perceptron,MLP)。

從DNN按不同層的位置劃分,DNN內部的神經網路層可以分為三類,輸入層,隱藏層和輸出層,如下圖示例,一般來說第一層是輸出層,最後一層是輸出層,而中間的層數都是隱藏層。

CNN(卷積神經網路),是一種前饋型的神經網路,目前深度學習技術領域中非常具有代表性的神經網路之一。

CNN在大型圖像處理方面有出色的表現,目前已經被大范圍使用到圖像分類、定位等領域中。相比於其他神經網路結構,卷積神經網路需要的參數相對較少,使的其能夠廣泛應用。

RNN(循環神經網路),一類用於處理序列數據的神經網路,RNN最大的不同之處就是在層之間的神經元之間也建立的權連接。

從廣義上來說,DNN被認為包含了CNN、RNN這些具體的變種形式。在實際應用中,深度神經網路DNN融合了多種已知的結構,包含卷積層或LSTM單元,特指全連接的神經元結構,並不包含卷積單元或時間上的關聯。

閱讀全文

與rnn網路是什麼相關的資料

熱點內容
電腦關掉網路通信 瀏覽:560
催乳師網路培訓哪裡不錯 瀏覽:597
網路彩票500公司在哪裡 瀏覽:761
路由器哪個網路都可以用嗎 瀏覽:900
網路設置許可權在哪裡找 瀏覽:520
香信找回密碼網路異常 瀏覽:756
索尼系統usb共享網路 瀏覽:89
計算機網路畢設ppt 瀏覽:852
移動網路部累不累 瀏覽:123
蘋果13系統無線網路慢 瀏覽:35
緩存網路上可共享的資源 瀏覽:81
手機wifi都上不了網路連接不上怎麼辦 瀏覽:43
p40電信網路慢怎麼設置 瀏覽:412
網路安全模式安裝 瀏覽:769
電腦登陸軟體顯示網路異常 瀏覽:425
ins登上了連接不到網路 瀏覽:677
無線網路電信和聯通的哪個好 瀏覽:590
二年級網路安全手抄報簡單內容 瀏覽:839
網路電視哪裡看越獄 瀏覽:627
蘋果美團網路錯誤 瀏覽:892

友情鏈接