概述
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks ,以下簡(jiǎn)稱RNN),它廣泛的用于自然語(yǔ)言處理中的語(yǔ)音識(shí)別,手寫書別以及機(jī)器翻譯等領(lǐng)域。 更多見 iii.run
而對(duì)于這類問題,RNN則比較的擅長(zhǎng)。那么RNN是怎么做到的呢?RNN假設(shè)我們的樣本是基于序列的。比如是從序列索引1到序列索引\tau的。對(duì)于這其中的任意序列索引號(hào)t,它對(duì)應(yīng)的輸入是對(duì)應(yīng)的樣本序列中的x^{(t)}。
而模型在序列索引號(hào)t位置的隱藏狀態(tài)h^{(t)},則由x^{(t)}和在t?1位置的隱藏狀態(tài)h^{(t?1)}共同決定。在任意序列索引號(hào)t,我們也有對(duì)應(yīng)的模型預(yù)測(cè)輸出o^{(t)}。
通過預(yù)測(cè)輸出o^{(t)}和訓(xùn)練序列真實(shí)輸出y^{(t)},以及損失函數(shù)L^{(t)},我們就可以用DNN類似的方法來(lái)訓(xùn)練模型,接著用來(lái)預(yù)測(cè)測(cè)試序列中的一些位置的輸出。
RNN模型

上圖中左邊是RNN模型沒有按時(shí)間展開的圖,如果按時(shí)間序列展開,則是上圖中的右邊部分。我們重點(diǎn)觀察右邊部分的圖。
這幅圖描述了在序列索引號(hào)t附近RNN的模型。其中:
x^{(t)}代表在序列索引號(hào)t時(shí)訓(xùn)練樣本的輸入。同樣的,x^{(t?1)} 和x^{(t+1)} 代表在序列索引號(hào)t?1和t+1時(shí)訓(xùn)練樣本的輸入。
h^{(t)}代表在序列索引號(hào)t時(shí)模型的隱藏狀態(tài)。h^{(t)}由x^{(t)}和h^{(t?1)}共同決定。
o^{(t)}代表在序列索引號(hào)t時(shí)模型的輸出。o^{(t)}只由模型當(dāng)前的隱藏狀態(tài)h^{(t)}決定。
L^{(t)}代表在序列索引號(hào)t時(shí)模型的損失函數(shù)。
y^{(t)}代表在序列索引號(hào)t時(shí)訓(xùn)練樣本序列的真實(shí)輸出。
U,W,V這三個(gè)矩陣是我們的模型的線性關(guān)系參數(shù),它在整個(gè)RNN網(wǎng)絡(luò)中是共享的,體現(xiàn)了RNN的模型的“循環(huán)反饋”的思想。
RNN前向傳播算法
對(duì)于任意一個(gè)序列索引t,隱藏狀態(tài)h^{(t)}由 輸入x^{(t)} 和 前一個(gè)隱藏狀態(tài)h^{(t-1)}得到。
hint: 我把隱藏狀態(tài)理解為時(shí)間序列中該時(shí)間事件的內(nèi)部真實(shí)狀態(tài)。
隱藏狀態(tài)
h^{(t)} = \sigma(z^{(t)}) = \sigma(Ux^{(t)} + Wh^{(t-1)} +b )
其中 \sigma 為RNN的激活函數(shù),主要為tanh,b為線性偏執(zhí)。模型的輸出
序列索引號(hào)t時(shí)模型的輸出o^{(t)}的表達(dá)式比較簡(jiǎn)單:
o^{(t)} = Vh^{(t)} +c最終預(yù)測(cè)輸出
在最終在序列索引號(hào)t時(shí)我們的預(yù)測(cè)輸出為:
\hat{y}^{(t)} = \sigma(o^{(t)})
通常由于RNN是識(shí)別類的分類模型,所以上面這個(gè)激活函數(shù)一般是softmax。
通過損失函數(shù)L^{(t)},比如對(duì)數(shù)似然損失函數(shù),我們可以量化模型在當(dāng)前位置的損失,即\hat{y}^{(t)}和y^{(t)}的差距。
RNN小結(jié)
RNN雖然理論上可以很漂亮的解決序列數(shù)據(jù)的訓(xùn)練,但是它也像DNN一樣有梯度消失時(shí)的問題,當(dāng)序列很長(zhǎng)的時(shí)候問題尤其嚴(yán)重。
因此,上面的RNN模型一般不能直接用于應(yīng)用領(lǐng)域。在語(yǔ)音識(shí)別,手寫書別以及機(jī)器翻譯等NLP領(lǐng)域?qū)嶋H應(yīng)用比較廣泛的是基于RNN模型的一個(gè)特例LSTM。