一文搞懂RNN(循環神經網絡)基礎篇
1.神經網絡基礎
神經網絡可以當做是能夠擬合任意函數的黑盒子,只要訓練數據足夠,給定特定的x,就能得到希望的y,結構圖如下:
將神經網絡模型訓練好之后,在輸入層給定一個x,通過網絡之后就能夠在輸出層得到特定的y,那么既然有了這么強大的模型,為什么還需要RNN(循環神經網絡)呢?
2.為什么需要RNN(循環神經網絡)
他們都只能單獨的取處理一個個的輸入,前一個輸入和后一個輸入是完全沒有關系的。但是,某些任務需要能夠更好的處理序列的信息,即前面的輸入和后面的輸入是有關系的。
比如,當我們在理解一句話意思時,孤立的理解這句話的每個詞是不夠的,我們需要處理這些詞連接起來的整個序列; 當我們處理視頻的時候,我們也不能只單獨的去分析每一幀,而要分析這些幀連接起來的整個序列。
以nlp的一個最簡單詞性標注任務來說,將我 吃 蘋果 三個單詞標注詞性為 我/nn 吃/v 蘋果/nn。
那么這個任務的輸入就是:
我 吃 蘋果 (已經分詞好的句子)
這個任務的輸出是:
我/nn 吃/v 蘋果/nn(詞性標注好的句子)
對于這個任務來說,我們當然可以直接用普通的神經網絡來做,給網絡的訓練數據格式了就是我-> 我/nn 這樣的多個單獨的單詞->詞性標注好的單詞。
但是很明顯,一個句子中,前一個單詞其實對于當前單詞的詞性預測是有很大影響的,比如預測蘋果的時候,由于前面的吃是一個動詞,那么很顯然蘋果作為名詞的概率就會遠大于動詞的概率,因為動詞后面接名詞很常見,而動詞后面接動詞很少見。
所以為了解決一些這樣類似的問題,能夠更好的處理序列的信息,RNN就誕生了。
3.RNN結構
首先看一個簡單的循環神經網絡如,它由輸入層、一個隱藏層和一個輸出層組成:
不知道初學的同學能夠理解這個圖嗎,反正我剛開始學習的時候是懵逼的,每個結點到底代表的是一個值的輸入,還是說一層的向量結點集合,如何隱藏層又可以連接到自己,等等這些疑惑~這個圖是一個比較抽象的圖。
我們現在這樣來理解,如果把上面有W的那個帶箭頭的圈去掉,它就變成了最普通的全連接神經網絡。
x是一個向量,它表示輸入層的值(這里面沒有畫出來表示神經元節點的圓圈);s是一個向量,它表示隱藏層的值(這里隱藏層面畫了一個節點,你也可以想象這一層其實是多個節點,節點數與向量s的維度相同);
U是輸入層到隱藏層的權重矩陣,o也是一個向量,它表示輸出層的值;V是隱藏層到輸出層的權重矩陣。
那么,現在我們來看看W是什么。循環神經網絡的隱藏層的值s不僅僅取決于當前這次的輸入x,還取決于上一次隱藏層的值s。權重矩陣 W就是隱藏層上一次的值作為這一次的輸入的權重。
我們給出這個抽象圖對應的具體圖:
我們從上圖就能夠很清楚的看到,上一時刻的隱藏層是如何影響當前時刻的隱藏層的。
如果我們把上面的圖展開,循環神經網絡也可以畫成下面這個樣子:
現在看上去就比較清楚了,這個網絡在t時刻接收到輸入 之后,隱藏層的值是 ,輸出值是 。關鍵一點是, 的值不僅僅取決于 ,還取決于 。我們可以用下面的公式來表示循環神經網絡的計算方法:
用公式表示如下:
4.總結
好了,到這里大概講解了RNN最基本的幾個知識點,能夠幫助大家直觀的感受RNN和了解為什么需要RNN,后續總結它的反向求導知識點。
***給出RNN的總括圖: