循環神經網絡初識(1)

寫在前面

最近學習了一些RNN的內容,但是由於筆者之前沒有接觸過這方面的知識,加之學完之後覺得RNN其實是一個複雜程度不輸於CNN的模塊,因此在階段學習之外進行總結一下,也算是重新鞏固一下相關的知識。


 

循環神經網絡結構

RNN網絡

RNN的提出很大程度上是爲了長序列的檢測問題,我們都知道,基於CNN的網絡的輸入一般都是一副當前的圖像,對於一個序列而言,CNN的網絡並不能很好的關聯起來,即當前的輸入沒有考慮到先前的信息。而RNN中的記憶單元剛還彌補了這個缺陷,記憶單元將上一個單元的內容保留下來,同時參與到當前的運算之中。

  1. 說道RNN,不得不提的就是它的摺疊模型(fold)和展開模型(unfold)(不得不說這兩個形容詞用的真是太恰當了!)
    一個2層的RNN的摺疊模型和展開模型如下:
    在這裏插入圖片描述在這裏插入圖片描述
    (emmm,圖片大小不同,各位看官湊合着看~)
    對於這樣的結構,筆者的第一個感覺是:恩?這參數沒有想象中的多啊。
    然後仔細一想,不對,這參數也太多了吧?

    第一個感覺是因爲整個網絡學習的參數其實不多,有W1,W2,U,V1,V2(都是全連接層),但是對於其展開之後,一個長度爲N的序列的模型將會有N×(W1+W2+U+V1+V2)個參數,對於比較大的N和隱含層而言,整個參數量還是很大的。

  2. 另一個必須要說的知識點就是前向傳播了,不同於不帶記憶單元的模型CNN,RNN在進行推理的時候一定是考慮前一個單元的輸出的,例如上面的2層RNN模型, 他的前向傳播公式如下:
    St+1=σ(UXt+1+W1St)Zt+1=σ(V1St+1+W2Zt) \overline{S_{t+1}} = \sigma{(U\overline{X}_{t+1}+W_1\overline{S}_{t})} \\ \overline{Z_{t+1}} = \sigma{(V_1\overline{S}_{t+1}+W_2\overline{Z}_{t})}

    其中σ\sigma爲sigmoid函數,急需注意的地方就是在進行本次推理的時候一定要加上上次對應層的狀態。

  3. 最後一點就是反向傳播,正如前向傳播的時候需要考慮上一時刻的狀態一樣,反向傳播的時候也要求必須考慮進後面的神經元的狀態,一定需要記得是:不要僅僅考慮同層的誤差傳播,高層的誤差傳播也要考慮在內!!!
    依舊以上圖中的2層的RNN模型爲例,我們來看t+1時刻對於最底層權重U的更新都需要什麼變量參與進來:

a. 最直接和U相連的變量是StSt+1\overline{S}_t, \overline{S}_{t+1}
b. 與StSt+1\overline{S}_t, \overline{S}_{t+1}相連的變量有ZtZt+1\overline{Z}_t, \overline{Z}_{t+1},同時,St\overline{S}_t在t+1時刻與St+1\overline{S}_{t+1}通過W1W_1關聯;
c. 在t+1時刻,與Zt+1\overline{Z}_{t+1}直接相關的變量爲yt+1\overline{y}_{t+1}
d. 在t+1時刻,Zt\overline{Z}_{t}Zt+1\overline{Z}_{t+1}通過W2W_2間接相關;

上述的相關性採用的是自下而上的方式,在back progagation中其實應該是自上而下的推理,因爲這裏模型比較簡單,序列也不長,這裏是爲了梳理公式的方便使用自下而上的推理方式。
根據上述的相關性,可以計算出在t+1時刻,誤差E對於U的梯度爲:
eU=eStStU+eSt+1St+1U(a)eSt=eZtZtSt+eSt+1St+1St(b)eSt+1=eZt+1Zt+1St+1(b)eZt+1=eyt+1yt+1Zt+1(c)eZt=eZt+1Zt+1Zt(d) \frac{\partial{e}}{\partial{U}}=\frac{\partial{e}}{\partial{\overline{S}_t}}\frac{\partial{\overline{S}_t}}{\partial{U}}+\frac{\partial{e}}{\partial{\overline{S}_{t+1}}}\frac{\partial{\overline{S}_{t+1}}}{\partial{U}} \quad (根據a) \\ \frac{\partial{e}}{\partial{\overline{S}_t}}=\frac{\partial{e}}{\partial{\overline{Z}_t}}\frac{\partial{\overline{Z}_t}}{\partial{\overline{S}_t}}+\frac{\partial{e}}{\partial{\overline{S}_{t+1}}}\frac{\partial{\overline{S}_{t+1}}}{\partial{\overline{S}_t}} \quad (根據b) \\ \frac{\partial{e}}{\partial{\overline{S}_{t+1}}}=\frac{\partial{e}}{\partial{\overline{Z}_{t+1}}}\frac{\partial{\overline{Z}_{t+1}}}{\partial{\overline{S}_{t+1}}} \quad (根據b) \\ \frac{\partial{e}}{\partial{\overline{Z}_{t+1}}}=\frac{\partial{e}}{\partial{y_{t+1}}}\frac{\partial{y_{t+1}}}{\partial{\overline{Z}_{t+1}}} \quad (根據c) \\ \frac{\partial{e}}{\partial{\overline{Z}_{t}}}=\frac{\partial{e}}{\partial{\overline{Z}_{t+1}}}\frac{\partial{\overline{Z}_{t+1}}}{\partial{\overline{Z}_{t}}} \quad (根據d)
所以把上述的b,c,d的分式帶入到a中就可以得到:
eU=eyt+1yt+1Zt+1Zt+1St+1St+1U+eyt+1yt+1Zt+1Zt+1ZtZtStStU+eyt+1yt+1Zt+1Zt+1St+1St+1StStU \frac{\partial{e}}{\partial{U}}=\frac{\partial{e}}{\partial{y_{t+1}}}\frac{\partial{y_{t+1}}}{\partial{\overline{Z}_{t+1}}}\frac{\partial{\overline{Z}_{t+1}}}{\partial{\overline{S}_{t+1}}}\frac{\partial{\overline{S}_{t+1}}}{\partial{U}}+\frac{\partial{e}}{\partial{y_{t+1}}}\frac{\partial{y_{t+1}}}{\partial{\overline{Z}_{t+1}}}\frac{\partial{\overline{Z}_{t+1}}}{\partial{\overline{Z}_{t}}}\frac{\partial{\overline{Z}_{t}}}{\partial{\overline{S}_{t}}}\frac{\partial{\overline{S}_{t}}}{\partial{U}}+\frac{\partial{e}}{\partial{y_{t+1}}}\frac{\partial{y_{t+1}}}{\partial{\overline{Z}_{t+1}}}\frac{\partial{\overline{Z}_{t+1}}}{\partial{\overline{S}_{t+1}}}\frac{\partial{\overline{S}_{t+1}}}{\partial{\overline{S}_t}}\frac{\partial{\overline{S}_{t}}}{\partial{U}}
如果對於上面的式子進行多個輸入的推廣的話,基於時間的反向傳播對於某個權重矩陣的偏導數可以寫作如下形式:
eWs=i=1NEyNyNSiSiWseWx=i=1NEyNyNSiSiWx \frac{\partial{e}}{\partial{W_s}} = \sum_{i=1}^{N}{\frac{\partial{E}}{\partial{y_N}}\frac{\partial{y_N}}{\partial{S_i}}\frac{\partial{S_i}}{\partial{W_s}}} \\ \frac{\partial{e}}{\partial{W_x}} = \sum_{i=1}^{N}{\frac{\partial{E}}{\partial{y_N}}\frac{\partial{y_N}}{\partial{S_i}}\frac{\partial{S_i}}{\partial{W_x}}}
其中Ws是隱含層之間的權值矩陣,而Wx是輸入與隱含層之間的權值矩陣。


 

LSTM網絡

LSTM的提出主要是爲了克服RNN網絡不能處理太長序列的問題,該結果一是因爲太久遠的信息會隨着經過激活函數的數量一次次的損失,二是因爲反向傳播時候的梯度消失。而LSTM結構在很大程度上解決了長期記憶消失的問題。
LSTM網絡就是由很多LSTM單元構成的一個循環神經網絡,LSTM單元如下:
在這裏插入圖片描述
與RNN單元不同的是,LSTM單元的隱含層是兩條線路,上面一條流過的數據稱爲Long Term Memory,下面一條流過的數據稱爲Short Term Memory,兩個memory之間會相互作用,保證對方的信息都是可用而且正確的。
LSTM單元主要由四個門,分別是學習門,遺忘門,記憶門和應用門,這四個門也是整個單元核心力量的體現。下面對這四個門進行簡單的介紹。

 

學習門(learn gate)

學習門在LSTM單元中的位置如下。
在這裏插入圖片描述
學習門在整個單元的運行中是一個很重要的地方,因爲在該處信息將經過學習和篩選的過程。
學習門的步驟如下圖所示:
在這裏插入圖片描述
短期記憶和當前的輸入會通過一個sigmoid函數生成一個權值向量ii,權值高則表示該部分信息要被保留,權值低表明該部分信息要被忽略;同樣,短期記憶與當前的輸入經過concat操作之後會經過一個激活單元,表示對新的短期記憶進行了學習,得到了向量NN;之後將兩者想乘就得到了新的記憶(不是長期也不是短期)。

 

遺忘門(forget gate)

遺忘門在LSTM單元中的位置如下。
在這裏插入圖片描述
遺忘門的操作和原理都很簡單,就是根據當前的信息和短期記憶來決定哪些長期記憶是要被遺忘掉的。
遺忘門的步驟如下:
在這裏插入圖片描述
短期記憶和當前的輸入經過一個全連接和激活函數之後得到權值向量ff,之後和短期記憶進行向量想乘,得到新的記憶(注意這時的記憶依然是一個暫時的記憶,既不是短期的,也不是長期的)。

 

記憶門(Remember Gate)

記憶門在LSTM單元中的位置如下。
在這裏插入圖片描述
可以看到,記憶門的操作相當的簡單,僅僅是將學習門和遺忘門得到的兩個暫時性的記憶加在一起得到新的長期記憶,這裏不再贅述。

 

應用門(Use Gate)

應用門在LSTM單元中的位置如下。
在這裏插入圖片描述
可以看到,應用門類似於學習門,不過學習門是對短期的東西學習之後進行了篩選過濾,而應用門是對長期的東西進行了學習和過濾,產生新的短期記憶。
應用門的步驟如下:
在這裏插入圖片描述
上圖中t-1時刻的長期記憶應該經過了遺忘門和應用門,即輸入是新的長期記憶,也就是說U的公式應該爲Ut=tanh(WuLTMt+bu)U_t=tanh(W_uLTM_t+b_u)

 

小結LSTM

其實筆者在學習這部分的時候,每個門的東西其實都是可以看明白的,但是實際應用中,這些門到底是如何進行信息的保留和篩選的其實不是很明白,但是其實稍微舉個例子就會明白很多,比如下面這個例子:
我們的網絡在處理一個長視頻,視頻的前半段是關於細胞的,後半段是關於野生動物的,現在時刻t處於視頻的後半段,此時長期記憶中還保留着前半段一些關於細胞的事情,短期記憶已經完全是關於野生動物的了,對於當前的輸入EtE_t

  • 經過學習門之後,短期記憶和當前輸入的集合中的一些部分會被刪除掉,例如之前的某些時刻網絡記得了一些樹的信息(因爲介紹野生動物,樹必然會存在,但是次數一定不會很多),而此時輸入的是一隻猴子,那麼經過學習門之後,猴子的信息添加進(如果之前就有猴子的信息,那麼猴子的信息會被保留)暫時的短期記憶A中(此時其他的動物的權重怎麼變化還不好說),而樹的信息會被削弱;
  • 經過遺忘門之後,因爲短期記憶和當前看到的東西都是關於動物的,因此長期記憶中細胞的部分會被進一步的削弱,而動物部分的信息會被儘量保留,此時生成暫時的長期記憶B;
  • 經過記憶門之後,將暫時的記憶A和長期的記憶B相加,得到新的長期記憶,這個地方很重要,因爲隨着時間的向前推移,長期記憶一定要儘量加入當前時刻的輸入;
  • 最後,經過應用門,長期記憶會根據短期記憶和當前的輸入來從中選出一些作爲新的短期記憶,比如當前輸入的是一個猴子,且短期記憶中動物的比重都比較大,那麼新的短期記憶中可能就會把長期記憶中關於植物和細胞的部分都刪除掉,只剩下一些動物的信息。

當然,上述的過程其實都是筆者YY的想象,對於網絡真正運行的時候,其內部的數據流形式一定不是這麼簡單的,因爲對於目前的深度學習框架而言,長期記憶的隱含層和短期記憶的隱含層的單元數都是一樣的,所以筆者目前對於其內部的流動也不是特別的清晰,只能先總結到這個程度。


總結

以上就是初學RNN時候的一些總結,鑑於知識越來越多,很多東西學了一遍不總結真的跟沒學一樣,以後還是要勤於總結。一個比較好的帖子可以參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章