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