神經網絡與深度學習概述 第八章 循環神經網絡RNN概述

RNN 是兩種神經網絡的縮寫,循環神經網絡(Recurrent Neural Network)遞歸神經網絡(Recursive Neural Network)。其實從廣義上來講循環神經網絡也是遞歸神經網絡,可以認為 Recurrent Neural Network 是時間遞歸神經網絡,Recursive Neural Network 是結構遞歸神經網絡。本文主要講解循環神經網絡,因此所說的 RNN 默認指循環神經網絡。

循環神經網絡的概念

考慮人類的思考步驟,或者叫思考時序,不會每一秒鐘都從頭開始思考。比如,當你看本文時,會根據以往學習的知識理解文章內容,你也會從上下文中產生聯想幫助你更好地理解文章。也就是說前後的輸入是有關聯的,再比如,我們輸入一句不完整的話,讓機器幫助我們判斷接下來最有可能出現的一個詞

“天氣預報說馬上要下大雨了,待會兒出門一定要記得帶_____。”

根據前面的內容判斷,要填入的詞很大可能是“雨傘”,這就是序列數據,也就是前後的輸入存在一定關聯關係

人類大腦思考的這一大特點,無法在傳統的神經網絡中找到類似的結構,這也是一般神經網絡的一個缺點。例如,假設你要將電影中每個時刻發生的事按時間歸類傳統的神經網絡目前還無法做到,因為這需要使用之前電影中出現的事件推理出後面發生的事情,而循環神經網絡可以解決這一問題。循環神經網絡的結果可以在網絡中循環,並能夠維持信息

循環神經網絡有迴路

循環神經網絡的單元如圖所示,它的輸入值是 xU輸入層到隱含層的權重s隱含層的輸出值V隱含層到輸出層的權重W 上個時刻隱含層的輸出值作為這個時刻輸入的權重o是輸出。也就是說信息通過迴路從網絡的目前狀態傳遞到下一個狀態時,同一個神經網絡單元需要不停地處理不同的輸入值和上一時刻自己產生的隱含層的輸出值,看上去循環神經單元就像是有迴路的一樣。

神經網絡與深度學習概述 第八章 循環神經網絡RNN概述

循環神經單元展開

循環神經網絡的展開

上圖的右邊即為循環神經網絡展開後的結果,這個鏈式結構揭示了與循環神經網絡密切相關的序列

  • RNN的正向傳遞

設隱含層和輸出層的激活函數都是 δ(x)

設模型的輸入為 x_t,則隱含層的輸入為:

h_t = U*x_t + W*s_t-1

隱含層的輸出為:

s_t = δ( h_t )

輸出層的輸入為:

net_t = V*s_t

輸出層的輸出為:

o_t = δ( net_t )

據此可以繼續往前一時刻推導,由此可以看出,循環神經網絡具有記憶性t 時刻的隱含層的輸入信息不僅包括該時刻的輸入,還包含了前面任意時刻的輸入信息

  • RNN的反向傳播

反向傳播過程和 BP 算法類似,採用鏈式求導法則更新網絡的權重,在此不做具體推導了,感興趣的讀者可以到網上查一查相關的資料。

RNN的梯度爆炸和梯度消失問題

一般的 RNN 不能很好的處理較長時間的序列信息,一個主要的原因是,RNN在訓練中很容易發生梯度爆炸梯度消失問題,導致訓練時梯度不能在較長序列中一直傳遞下去,從而使得 RNN 無法捕捉到長距離的影響

舉個例子,考慮一個語言模型試圖預測基於當前的下一個詞。如果我們試圖預測“明天會下____”這句話的最後一個字,那麼我們幾乎不需要任何進一步的語境就可以判斷下一個字是雨或雪。在這種情況下,如果相關的信息(這裡指的是“明天會下”)和我們需要填詞的位置之間的差距較小,那麼RNN就能學會利用過去的信息。

但有時,我們需要更多的上下文。試著預測“我在中國西南地區長大……(省略200個字),我能講一口流利的____。”的最後一個詞。最近的信息表明,下一個字可能是語言的名字,但如果我們想要縮小語言名字的範圍,則需要這個詞更多的上下文。我們發現,有時相關上下文信息和我們需要得到的這個詞的位置相距很遠。一般的 RNN 則無法解決這個問題。

  • 梯度消失

對於求偏導的結果,也就是梯度距離當前時刻越遠則會乘越多激活函數的導數,當激活函數是指數型時,對於本來就很小接近0的梯度再經過指數就更加小,基本忽略不計了,於是便接收不到遠距離的影響,因此 RNN 處理不了較長序列。

  • 梯度爆炸

對於求偏導的結果,也就是梯度,當梯度的值太大時,經過指數放大,則會產生梯度爆炸。

一般,梯度爆炸比較容易處理。因為梯度爆炸的時候,程序會出現NaN錯誤,通過設置一個梯度閾值,當梯度超過這個閾值的時候可以直接截取來解決梯度爆炸的問題。

對於梯度消失處理則稍微困難一些,目前主要有三種方法應對梯度消失問題:

  • 合理的初始化權重值。仔細挑選參數,使每個神經元儘可能不要取極大或極小值,以避開梯度消失的區域,但實踐中往往比較困難

  • 使用 ReLU 函數代替 Sigmoid 函數和 Tanh 函數作為激活函數

  • 使用其他結構的循環神經網絡,比如長短時記憶網絡(LSTM,Long Short-Term Memory)和Gated Recurrent Unit(GRU)等,後續對 LSTM 網絡將會有詳細介紹

ReLU 激活函數

ReLU(Rectified Linear Units)激活函數

當 x<0 時,y = 0


當 x >0 時,y = x

神經網絡與深度學習概述 第八章 循環神經網絡RNN概述

ReLU 激活函數

相比 Sigmoid 和 Tanh 函數,ReLU 激活函數的優點在於:

  • 梯度不飽和梯度計算公式為:1{x>0}。因此在反向傳播過程中,減輕了梯度消失的問題,神經網絡前幾層的參數也可以很快的更新

  • 計算速度快。正向傳播過程中,Sigmoid 和 Tanh函數計算激活值時需要計算指數,而 ReLU 函數僅需要設置閾值,如果x<0,f(x)=0,如果x>0,f(x)=x,加快了正向傳播的計算速度

  • 因此,ReLU激活函數可以極大地加快收斂速度,相比 Tanh 函數,收斂速度明顯加快,甚至可以加快好幾倍

相關推薦

推薦中...