本文將討論:循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks ,以下簡稱RNN),它廣泛的用于自然語言處理中的語音識(shí)別,手寫書別以及機(jī)器翻譯等領(lǐng)域。
1. RNN概述
在前面講到的DNN和CNN中,訓(xùn)練樣本的輸入和輸出是比較的確定的。但是有一類問題DNN和CNN不好解決,就是訓(xùn)練樣本輸入是連續(xù)的序列,且序列的長短不一,比如基于時(shí)間的序列:一段段連續(xù)的語音,一段段連續(xù)的手寫文字。這些序列比較長,且長度不一,比較難直接的拆分成一個(gè)個(gè)獨(dú)立的樣本來通過DNN/CNN進(jìn)行訓(xùn)練。
而對(duì)于這類問題,RNN則比較的擅長。那么RNN是怎么做到的呢?RNN假設(shè)我們的樣本是基于序列的。比如是從序列索引 1 到序列索引 T 的。對(duì)于這其中的任意序列索引號(hào) t,它對(duì)應(yīng)的輸入是對(duì)應(yīng)的樣本序列中的。而模型在序列索引號(hào) t 位置的隱藏狀態(tài)
,則由
共同決定。在任意序列索引號(hào) t,我們也有對(duì)應(yīng)的模型預(yù)測輸出
。通過預(yù)測輸出
和訓(xùn)練序列真實(shí)輸出
,以及損失函數(shù)
,我們就可以用DNN類似的方法來訓(xùn)練模型,接著用來預(yù)測測試序列中的一些位置的輸出。
下面我們來看看RNN的模型。
2. RNN模型
RNN模型有比較多的變種,這里介紹最主流的RNN模型結(jié)構(gòu)如下:
上圖中左邊是RNN模型沒有按時(shí)間展開的圖,如果按時(shí)間序列展開,則是上圖中的右邊部分。我們重點(diǎn)觀察右邊部分的圖。
這幅圖描述了在序列索引號(hào)t附近RNN的模型。其中:
1)和
代表在序列索引號(hào) t?1 和 t+1 時(shí)訓(xùn)練樣本的輸入。
2)
3)
4)
5)代表在序列索引號(hào) t 時(shí)訓(xùn)練樣本序列的真實(shí)輸出。
6)U,W,V這三個(gè)矩陣是我們的模型的線性關(guān)系參數(shù),它在整個(gè)RNN網(wǎng)絡(luò)中是共享的,這點(diǎn)和DNN很不相同。 也正因?yàn)槭枪蚕砹耍w現(xiàn)了RNN的模型的“循環(huán)反饋”的思想。
3. RNN前向傳播算法
有了上面的模型,RNN的前向傳播算法就很容易得到了。
對(duì)于任意一個(gè)序列索引號(hào)t,我們隱藏狀態(tài)
其中 σ 為RNN的激活函數(shù),一般為 tanh, b為線性關(guān)系的偏倚。
序列索引號(hào) t 時(shí)模型的輸出
?+ c
在最終在序列索引號(hào) t 時(shí)我們的預(yù)測輸出為:
通常由于RNN是識(shí)別類的分類模型,所以上面這個(gè)激活函數(shù)一般是softmax。
通過損失函數(shù)
4. RNN反向傳播算法推導(dǎo)
有了RNN前向傳播算法的基礎(chǔ),就容易推導(dǎo)出RNN反向傳播算法的流程了。RNN反向傳播算法的思路和DNN是一樣的,即通過梯度下降法一輪輪的迭代,得到合適的RNN模型參數(shù) U,W,V,b,c 。由于我們是基于時(shí)間反向傳播,所以RNN的反向傳播有時(shí)也叫做BPTT(back-propagation through time)。當(dāng)然這里的BPTT和DNN也有很大的不同點(diǎn),即這里所有的 U,W,V,b,c 在序列的各個(gè)位置是共享的,反向傳播時(shí)我們更新的是相同的參數(shù)。
為了簡化描述,這里的損失函數(shù)我們?yōu)榻徊骒負(fù)p失函數(shù),輸出的激活函數(shù)為softmax函數(shù),隱藏層的激活函數(shù)為tanh函數(shù)。
對(duì)于RNN,由于我們在序列的每個(gè)位置都有損失函數(shù),因此最終的損失 L 為:
其中 V,c,的梯度計(jì)算是比較簡單的:
但是 W,U,b 的梯度計(jì)算就比較的復(fù)雜了。從RNN的模型可以看出,在反向傳播時(shí),在在某一序列位置t的梯度損失由當(dāng)前位置的輸出對(duì)應(yīng)的梯度損失和序列索引位置 t+1 時(shí)的梯度損失兩部分共同決定。對(duì)于 W 在某一序列位置t的梯度損失需要反向傳播一步步的計(jì)算。我們定義序列索引 t 位置的隱藏狀態(tài)的梯度為:
這樣我們可以像DNN一樣從遞推
?。
對(duì)于,由于它的后面沒有其他的序列索引了,因此有:
有了
除了梯度表達(dá)式不同,RNN的反向傳播算法和DNN區(qū)別不大,因此這里就不再重復(fù)總結(jié)了。
5. RNN小結(jié)
上面總結(jié)了通用的RNN模型和前向反向傳播算法。當(dāng)然,有些RNN模型會(huì)有些不同,自然前向反向傳播的公式會(huì)有些不一樣,但是原理基本類似。
RNN雖然理論上可以很漂亮的解決序列數(shù)據(jù)的訓(xùn)練,但是它也像DNN一樣有梯度消失時(shí)的問題,當(dāng)序列很長的時(shí)候問題尤其嚴(yán)重。因此,上面的RNN模型一般不能直接用于應(yīng)用領(lǐng)域。在語音識(shí)別,手寫書別以及機(jī)器翻譯等NLP領(lǐng)域?qū)嶋H應(yīng)用比較廣泛的是基于RNN模型的一個(gè)特例LSTM,下一篇我們就來討論LSTM模型。
-
循環(huán)神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
0文章
38瀏覽量
3066
原文標(biāo)題:循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)模型與前向反向傳播算法
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
神經(jīng)網(wǎng)絡(luò)教程(李亞非)
【案例分享】基于BP算法的前饋神經(jīng)網(wǎng)絡(luò)
手動(dòng)設(shè)計(jì)一個(gè)卷積神經(jīng)網(wǎng)絡(luò)(前向傳播和反向傳播)

評(píng)論