1. 程式人生 > >迴圈神經網路(RNN)原理通俗解釋

迴圈神經網路(RNN)原理通俗解釋

1.RNN怎麼來的?

迴圈神經網路的應用場景比較多,比如暫時能寫論文,寫程式,寫詩,但是,(總是會有但是的),但是他們現在還不能正常使用,學習出來的東西沒有邏輯,所以要想真正讓它更有用,路還很遠。

這是一般的神經網路應該有的結構:
這裡寫圖片描述

既然我們已經有了人工神經網路和卷積神經網路,為什麼還要迴圈神經網路?
原因很簡單,無論是卷積神經網路,還是人工神經網路,他們的前提假設都是:元素之間是相互獨立的,輸入與輸出也是獨立的,比如貓和狗。
但現實世界中,很多元素都是相互連線的,比如股票隨時間的變化,一個人說了:我喜歡旅遊,其中最喜歡的地方是雲南,以後有機會一定要去 _____ .這裡填空,人應該都知道是填“雲南“。因為我們是根據上下文的內容推斷出來的,但機會要做到這一步就相當得難了。因此,就有了現在的迴圈神經網路,他的本質是:像人一樣擁有記憶的能力。

因此,他的輸出就依賴於當前的輸入和記憶。

2.RNN的網路結構及原理

它的網路結構如下:
這裡寫圖片描述
其中每個圓圈可以看作是一個單元,而且每個單元做的事情也是一樣的,因此可以摺疊呈左半圖的樣子。用一句話解釋RNN,就是一個單元結構重複使用

RNN是一個序列到序列的模型,假設 x t

1 , x t , x t + 1 是一個輸入:“我是中國“,那麼 o t 1 , o t 就應該對應”是”,”中國”這兩個,預測下一個詞最有可能是什麼?就是 o t + 1 應該是”人”的概率比較大。

因此,我們可以做這樣的定義:

X t : t o t : t S t : t 。因為我們當前時刻的輸出是由記憶和當前時刻的輸入決定的,就像你現在大四,你的知識是由大四學到的知識(當前輸入)和大三以及大三以前學到的東西的(記憶)的結合,RNN在這點上也類似,神經網路最擅長做的就是通過一系列引數把很多內容整合到一起,然後學習這個引數,因此就定義了RNN的基礎: S t = f ( U X t + W S t 1 ) 大家可能會很好奇,為什麼還要加一個 f ( ) 函式,其實這個函式是神經網路中的啟用函式,但為什麼要加上它呢?
舉個例子,假如你在大學學了非常好的解題方法,那你初中那時候的解題方法還要用嗎?顯然是不用了的。RNN的想法也一樣,既然我能記憶了,那我當然是只記重要的資訊啦,其他不重要的,就肯定會忘記,是吧。但是在神經網路中什麼最適合過濾資訊呀?肯定是啟用函式嘛,因此在這裡就套用一個啟用函式,來做一個非線性對映,來過濾資訊,這個啟用函式可能為tanh,也可為其他。

假設你大四快畢業了,要參加考研,請問你參加考研是不是先記住你學過的內容然後去考研,還是直接帶幾本書去參加考研呢?很顯然嘛,那RNN的想法就是預測的時候帶著當前時刻的記憶 S t 去預測。假如你要預測“我是中國“的下一個詞出現的概率,這裡已經很顯然了,運用softmax來預測每個詞出現的概率再合適不過了,但預測不能直接帶用一個矩陣來預測呀,所有預測的時候還要帶一個權重矩陣V,用公式表示為:

o t = s o f t m a x ( V S t ) 其中 o t 就表示時刻t的輸出。

RNN中的結構細節:
1.可以把 S t 當作隱狀態,捕捉了之前時間點上的資訊。就像你去考研一樣,考的時候記住了你能記住的所有資訊。
2. o t 是由當前時間以及之前所有的記憶得到的。就是你考研之後做的考試卷子,是用你的記憶得到的。
3.很可惜的是, S t 並不能捕捉之前所有時間點的資訊。就像你考研不能記住所有的英語單詞一樣。
4.和卷積神經網路一樣,這裡的網路中每個cell都共享了一組引數(U,V,W),這樣就能極大的降低計算量了。
5. o t 在很多情況下都是不存在的,因為很多工,比如文字情感分析,都是隻關注最後的結果的。就像考研之後選擇學校,學校不會管你到底怎麼努力,怎麼心酸的準備考研,而只關注你最後考了多少分。

3.RNN的改進1:雙向RNN

在有些情況,比如有一部電視劇,在第三集的時候才出現的人物,現在讓預測一下在第三集中出現的人物名字,你用前面兩集的內容是預測不出來的,所以你需要用到第四,第五集的內容來預測第三集的內容,這就是雙向RNN的想法。如圖是雙向RNN的圖解:
這裡寫圖片描述

S t 1 = f ( U 1 X t + W 1 S t 1 + b 1 ) : S t 2 = f ( U 2 X t + W 2 S t 1 + b 2 )