1,序列模型應(yīng)用
輸入或者輸出中包含有序列數(shù)據(jù)的模型叫做序列模型。以循環(huán)神經(jīng)網(wǎng)絡(luò)RNN為基礎(chǔ)建立的序列模型在自然語(yǔ)言處理,語(yǔ)音識(shí)別等領(lǐng)域中引起了巨大的變革。以下是一些序列模型的典型應(yīng)用:
語(yǔ)音識(shí)別: 輸入輸出都為序列。
音樂(lè)生成: 輸出為序列。
情感分析:輸入為序列。
DNA序列分析:輸入為序列。
機(jī)器翻譯:輸入輸出都為序列。
視頻行為識(shí)別:輸入為序列。
命名實(shí)體識(shí)別:輸入輸出都為序列。
2. Notation數(shù)學(xué)符號(hào)
下面以一個(gè)人名實(shí)體識(shí)別為例講述表示符號(hào),給出一句話X,識(shí)別里面所有的人名,為了使說(shuō)明簡(jiǎn)單,這里的輸出Y只簡(jiǎn)單標(biāo)識(shí)每個(gè)單詞是否為人名,這種表示方式并不是很好,有一些復(fù)雜的輸出方式可以指出一個(gè)人名從哪里開(kāi)始到哪里結(jié)束。

上圖輸入中有9個(gè)單詞,那么第一步就是要把單詞劃分開(kāi),表示如下-以下<t>表示上標(biāo):
x<t> :表示第t個(gè)單詞;
Tx:表示輸入的單詞總數(shù),這里Tx=9;
y<t>:為第t個(gè)單詞的輸出;
Ty:為輸出總數(shù),,這里Ty=9;
以上是對(duì)單個(gè)樣本的表示,若有i個(gè)樣本的話,第i個(gè)樣本表示如下-以下(i)、<t>表示上標(biāo):
x(i)<t>: 表示第i個(gè)樣本的第t個(gè)單詞;
T(i)x:表示第i個(gè)樣本的輸入的單詞總數(shù);
y(i)<t>:為第i個(gè)版本的第t個(gè)單詞的輸出;
T(i)y:為第i個(gè)樣本的輸出總數(shù);
如何表示一個(gè)單詞??
1. 首先建立一個(gè)詞匯表vocabulary,也就是將表示方法中所有要用到的詞列成一列
? 如下圖,建立一個(gè)長(zhǎng)度為10,000的詞表,這對(duì)實(shí)際中的NLP來(lái)說(shuō)太小了,商用中的詞表有的三五萬(wàn),也有的幾十萬(wàn)甚至百萬(wàn),這里僅用作說(shuō)明的例子;
2. 用one-hot向量來(lái)表示單詞
? ? 也就是每個(gè)單詞用一個(gè)和詞表長(zhǎng)度一樣的向量來(lái)表示,向量中除了這個(gè)單詞所在位置為1,其余都為0,所以稱之為one-hot。

3.Recurrent Neural Network Model(RNN循環(huán)序列模型)
1)為什么不用標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)?
主要基于以下幾點(diǎn):
第一,全連接的神經(jīng)網(wǎng)絡(luò)不能夠用一個(gè)模型適應(yīng)輸入或輸出中不同的序列長(zhǎng)度。例如,在不使用數(shù)據(jù)填充的技巧下,無(wú)法用同一個(gè)全連接模型架構(gòu)對(duì)15個(gè)單詞的長(zhǎng)度的句子和150個(gè)單詞長(zhǎng)度的句子進(jìn)行情感分析。但是RNN則能夠自然地適應(yīng)這種序列長(zhǎng)度的變化。
第二,全連接神經(jīng)網(wǎng)絡(luò)不能夠共享在序列不同位置學(xué)到的權(quán)重。這會(huì)導(dǎo)致參數(shù)過(guò)多的問(wèn)題。而RNN則能夠跨時(shí)間共享權(quán)重。
此外,以RNN為基礎(chǔ)的序列模型通常還有時(shí)間平移非對(duì)稱的特性,通常模型會(huì)更容易受到輸入序列中較后位置的數(shù)據(jù)的影響。這一特性在時(shí)間序列預(yù)測(cè)等問(wèn)題中通常是非常重要的,而全連接神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)則不具有這樣的特性。
2)什么是循環(huán)神經(jīng)網(wǎng)絡(luò)?
RNN之所以稱為循環(huán)神經(jīng)網(wǎng)路,即一個(gè)序列當(dāng)前的輸出與前面的輸出也有關(guān)。具體的表現(xiàn)形式為網(wǎng)絡(luò)會(huì)對(duì)前面的信息進(jìn)行記憶并應(yīng)用于當(dāng)前輸出的計(jì)算中,即隱藏層之間的節(jié)點(diǎn)不再無(wú)連接而是有連接的,并且隱藏層的輸入不僅包括輸入層的輸出還包括上一時(shí)刻隱藏層的輸出
首先,將第一個(gè)單詞x<1>輸入神經(jīng)網(wǎng)絡(luò),并預(yù)測(cè)? y^<1>;
然后,將第二個(gè)單詞x<2>輸入神經(jīng)網(wǎng)絡(luò),同時(shí)將第一步計(jì)算的激活值a<1>也輸入到神經(jīng)網(wǎng)絡(luò),共同作用并預(yù)測(cè)y^<2> 重復(fù)第二步,直至把所有單詞都訓(xùn)練完畢。?

注意,由于在第一步之前沒(méi)有任何輸入,所以一般人為設(shè)置一個(gè)a<0>和x<1>一起輸入到神經(jīng)網(wǎng)絡(luò)中,a<0>最常見(jiàn)的初始化為0,不過(guò)也有人任意初始化。
在這個(gè)結(jié)構(gòu)中輸入和輸出數(shù)目相等,如果輸入和輸出不等的話,網(wǎng)絡(luò)結(jié)構(gòu)還需要改變。
參數(shù):
循環(huán)神經(jīng)網(wǎng)絡(luò)中的參數(shù)是共享的,從輸入到隱藏層的參數(shù)表示為wax,水平方向激活值向下一層輸入的參數(shù)表示為waa,從隱藏層到輸出的參數(shù)表示為wya
則在前向傳播中:

其中參數(shù)waa,wax兩個(gè)參數(shù)可以合并為wa,若waa為(100,100),wax為(100,10000),wa為(100,10100),如下圖:

則可以表示為:

關(guān)于激活函數(shù),兩步的激活函數(shù)可以相同也可以不同,一般求a<t>采用tanh或ReLU,求y^<t> 則根據(jù)輸出的個(gè)數(shù)選擇sigmoid或者softmax。
4. Backpropagation through time時(shí)間反向傳播
RNN的反向傳播,雖然開(kāi)源框架通常都會(huì)自動(dòng)計(jì)算反向傳播,但是了解其原理還是很有幫助的。
損失函數(shù):
這里損失函數(shù)采用標(biāo)準(zhǔn)邏輯回歸的損失函數(shù),又叫交叉熵?fù)p失函數(shù),具體如下:?


5.Different types of RNN
之前將的RNN是建立在輸入和輸出數(shù)目相等的情況下,在循環(huán)神經(jīng)網(wǎng)絡(luò)中,輸入和輸出數(shù)目可以不等,那么這種情況下的RNN結(jié)構(gòu)應(yīng)該是什么樣呢?-RNN的各種不同的結(jié)構(gòu)。
1) one to one
標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)就是這種類型?

2) one to many (music generation音樂(lè)生成)
輸入為空,或有較少的輸入,產(chǎn)生很多輸出?

3) many to one (setiment classification情感分類)
輸入為文本,輸出為整數(shù)?

4)many to many
這里又分兩類,一類是輸入和輸出數(shù)目相同,一類是輸入和輸出數(shù)目不同。
輸入和輸出數(shù)目相同 。這種就是之前將的多個(gè)輸入產(chǎn)生多個(gè)輸出的結(jié)構(gòu),如圖:?

輸入和輸出數(shù)目不同 如machine translation?

此結(jié)構(gòu)中輸入的部分,也就是x<1>?x<Tx>通常被稱作encoder,輸出部分,也就是y^<1>?y^<Tx>通常被稱為decoder。
6. Vanishing gradients with RNN梯度消失、梯度爆炸
有如下兩句:
The cat, which already ate……, was full.
The cats, which already ate……, were full.
系動(dòng)詞需要根據(jù)主語(yǔ)是單數(shù)還是復(fù)數(shù)來(lái)決定,這個(gè)句子主語(yǔ)和系動(dòng)詞距離比較遠(yuǎn),即后面的詞對(duì)前面的詞有長(zhǎng)期的依賴關(guān)系,而目前所看到的RNN并不擅長(zhǎng)捕捉這種長(zhǎng)期依賴關(guān)系,因?yàn)橛捎谔荻认Щ蛱荻缺ǖ膯?wèn)題,兩個(gè)間隔很遠(yuǎn)的隱藏層很難互相影響,通常一個(gè)隱藏層主要受其附近的一些影藏層的影響,前向傳播受其之前幾層的影響,后向傳播受其之后幾層的影響。
梯度爆炸
對(duì)于RNN 來(lái)說(shuō)梯度爆炸也會(huì)發(fā)生,梯度爆炸其參數(shù)值會(huì)變得很大甚至出現(xiàn)數(shù)值溢出,變成了一個(gè)非數(shù)字,所以很容易發(fā)現(xiàn)。
解決方法:
梯度修剪,也叫最大值修剪,即觀察梯度向量,一旦其超過(guò)某個(gè)閾值,就對(duì)其進(jìn)行縮放,以保證其不會(huì)過(guò)大
梯度消失
梯度消失是RNN面臨的首要問(wèn)題,其解決也較為復(fù)雜,主要的解決方案有:
- GRU
- LSTM
后面將會(huì)討論詳細(xì)的各個(gè)解決方法。