深度學(xué)習(xí)之序列模型

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ù),具體如下:?

穿越時(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è)解決方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容