一文搞懂RNN(循環神經網路)基礎篇
神經網路基礎
神經網路可以當做是能夠擬合任意函數的黑盒子,只要訓練數據足夠,給定特定的x,就能得到希望的y,結構圖如下:
將神經網路模型訓練好之後,在輸入層給定一個x,通過網路之後就能夠在輸出層得到特定的y,那麼既然有了這麼強大的模型,為什麼還需要RNN(循環神經網路)呢?
為什麼需要RNN(循環神經網路)
他們都只能單獨的取處理一個個的輸入,前一個輸入和後一個輸入是完全沒有關係的。但是,某些任務需要能夠更好的處理序列的信息,即前面的輸入和後面的輸入是有關係的。
比如,當我們在理解一句話意思時,孤立的理解這句話的每個詞是不夠的,我們需要處理這些詞連接起來的整個序列; 當我們處理視頻的時候,我們也不能只單獨的去分析每一幀,而要分析這些幀連接起來的整個序列。
以nlp的一個最簡單詞性標註任務來說,將我 吃 蘋果 三個單詞標註詞性為 我/nn 吃/v 蘋果/nn。
那麼這個任務的輸入就是:
我 吃 蘋果 (已經分詞好的句子)
這個任務的輸出是:
我/nn 吃/v 蘋果/nn(詞性標註好的句子)
對於這個任務來說,我們當然可以直接用普通的神經網路來做,給網路的訓練數據格式了就是我-> 我/nn 這樣的多個單獨的單詞->詞性標註好的單詞。
但是很明顯,一個句子中,前一個單詞其實對於當前單詞的詞性預測是有很大影響的,比如預測蘋果的時候,由於前面的吃是一個動詞,那麼很顯然蘋果作為名詞的概率就會遠大於動詞的概率,因為動詞後面接名詞很常見,而動詞後面接動詞很少見。
所以為了解決一些這樣類似的問題,能夠更好的處理序列的信息,RNN就誕生了。
RNN結構
首先看一個簡單的循環神經網路如,它由輸入層、一個隱藏層和一個輸出層組成:
不知道初學的同學能夠理解這個圖嗎,反正我剛開始學習的時候是懵逼的,每個結點到底代表的是一個值的輸入,還是說一層的向量結點集合,如何隱藏層又可以連接到自己,等等這些疑惑~這個圖是一個比較抽象的圖。
我們現在這樣來理解,如果把上面有W的那個帶箭頭的圈去掉,它就變成了最普通的全連接神經網路。x是一個向量,它表示輸入層的值(這裡面沒有畫出來表示神經元節點的圓圈);s是一個向量,它表示隱藏層的值(這裡隱藏層面畫了一個節點,你也可以想像這一層其實是多個節點,節點數與向量s的維度相同);
U是輸入層到隱藏層的權重矩陣,o也是一個向量,它表示輸出層的值;V是隱藏層到輸出層的權重矩陣。
那麼,現在我們來看看W是什麼。循環神經網路的隱藏層的值s不僅僅取決於當前這次的輸入x,還取決於上一次隱藏層的值s。權重矩陣 W就是隱藏層上一次的值作為這一次的輸入的權重。
我們給出這個抽象圖對應的具體圖:
我們從上圖就能夠很清楚的看到,上一時刻的隱藏層是如何影響當前時刻的隱藏層的。
如果我們把上面的圖展開,循環神經網路也可以畫成下面這個樣子:
現在看上去就比較清楚了,這個網路在t時刻接收到輸入 之後,隱藏層的值是 ,輸出值是 。關鍵一點是, 的值不僅僅取決於 ,還取決於 。我們可以用下面的公式來表示循環神經網路的計算方法:
用公式表示如下:
總結
好了,到這裡大概講解了RNN最基本的幾個知識點,能夠幫助大家直觀的感受RNN和了解為什麼需要RNN,後續總結它的反向求導知識點。
最後給出RNN的總括圖:
致謝:夏沖和實驗室的小夥伴們 參考:零基礎入門深度學習(5) - 循環神經網路(多謝這麼好的資料)
推薦閱讀:
※李宏毅機器學習2016 第十四講 深度自編碼器
※除了啤酒和尿布,關聯規則分析究竟還有哪些實際應用?
※Gradient Boosting
※機器學習實戰之決策樹(三)
※某熊周刊系列:一周推薦外文技術資料(2.5)
TAG:机器学习 | 深度学习DeepLearning | 自然语言处理 |