循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)詳解
給大家分享一個(gè)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)詳解的內(nèi)容,up主從以下幾個(gè)方面給大家做解析,希望大家耐心看喲~
前言
一、 序列的表示方法
二、循環(huán)神經(jīng)網(wǎng)絡(luò)模型
三,循環(huán)神經(jīng)網(wǎng)絡(luò)的意義
前言
我們還有很多如:波形,聲音,文本等類型的數(shù)據(jù)需要進(jìn)行處理,這些波形直接或間接是可以抽象出時(shí)間軸的意義。即有先后順序之分,一旦順序打亂會(huì)影響其內(nèi)在含義,我們將這一類型的數(shù)據(jù)稱為序列。而循環(huán)神經(jīng)網(wǎng)絡(luò)在序列這一數(shù)據(jù)類型的處理上有著很深遠(yuǎn)的影響力。
?
一、 序列的表示方法
我們定義序列數(shù)據(jù)類型:[b,seq_len,feature_len]對(duì)于文本來(lái)說(shuō),b代表有幾句話,seq_len代表話的長(zhǎng)度,feature_len代表每個(gè)字的特征??梢钥闯鯾和seq_len都是標(biāo)量,而我們需要做的是將feature_len也由String類型轉(zhuǎn)化成一個(gè)標(biāo)量。
?
這里我們可能首先會(huì)想到one hot encoding,它在分類問題的數(shù)據(jù)預(yù)處理中有著極其廣泛的運(yùn)用。One-hot編碼又稱為獨(dú)熱編碼,只有0和1兩個(gè)分布。關(guān)于如何使用one-hot抽取文本特征向量,我們通過(guò)以下例子來(lái)說(shuō)明。假設(shè)我們語(yǔ)料庫(kù)中有三段話:
?
我愛中國(guó)
爸爸媽媽愛我
爸爸媽媽愛中國(guó)
?
我們先對(duì)語(yǔ)料庫(kù)分離并獲取其中所以的詞,然后對(duì)每個(gè)詞進(jìn)行編號(hào):
1我 2愛 3爸爸 4媽媽 5中國(guó)
?
如果不進(jìn)行one-hot編碼提取三句話的特征變量:
我愛中國(guó)----------------------> 1,2,5
媽媽愛我----------------------> 4,2,1
爸爸愛中國(guó)--------------------> 3,2,5
?
這種順序編碼最大的缺陷是強(qiáng)加一個(gè)順序關(guān)系,具體來(lái)說(shuō),每個(gè)字之間并沒有一個(gè)大小先后關(guān)系,而用數(shù)字順序編號(hào)則強(qiáng)加了一個(gè)順序關(guān)系,這是我們不希望看到的;進(jìn)行one-hot編號(hào)后提取的特征如下:
?
我愛中國(guó)----------------------> 1,1,0,0,1
媽媽愛我----------------------> 1,1,0,1,0
爸爸愛中國(guó)--------------------> 0,1,1,0,1
?
優(yōu)缺點(diǎn)分析:這種編碼方式在數(shù)據(jù)量較少的分類問題上運(yùn)用極廣。一是解決的分類器不好處理離散數(shù)據(jù)的問題,二是在一定程度上也起到了擴(kuò)充特征的作用。
?
而缺點(diǎn)也同樣存在:而且在文本等大數(shù)據(jù)表示上有些缺點(diǎn)就非常突出了。首先,它是一個(gè)詞袋模型,不考慮詞與詞之間的順序,而文本中字詞的順序也很重要;其次,它假設(shè)詞語(yǔ)詞相互獨(dú)立,而在絕大數(shù)情況下,詞與詞之間是相互影響的;再次,它得到的特征是離散稀疏的;最后,如果一句胡的字詞很多,用來(lái)表示這句話的維度就會(huì)很高,而且鑒于它得到的特征是離散稀疏有大量的0存在,這種表示方式是十分占用空間的。
?
鑒于這些缺點(diǎn),在文本等序列問題的處理上,我們有一個(gè)專門將字詞的語(yǔ)義轉(zhuǎn)換為標(biāo)量的課題稱為 sequence/word embedding。常見的word embedding方式有Word2Vec和GloVe,因?yàn)橐呀?jīng)存在完備的API接口,我們這里不對(duì)其具體原理進(jìn)行探索,只需明白其意義和作用便可進(jìn)一步理解循環(huán)神經(jīng)網(wǎng)絡(luò)的處理模式。
?
二、循環(huán)神經(jīng)網(wǎng)絡(luò)模型
我們從電影影評(píng)的角度的角度來(lái)引入循環(huán)神經(jīng)網(wǎng)絡(luò),并與全連接神經(jīng)網(wǎng)絡(luò)做一個(gè)比較。
對(duì)于影評(píng)“I hate this boring movie”經(jīng)過(guò)embedding后作為輸入經(jīng)過(guò)一個(gè)線性模型的全連接層,最后得到輸出(好評(píng)或差評(píng))。如圖:
?

該模型有兩個(gè)明顯的缺點(diǎn):
?一是對(duì)于每個(gè)字詞都有一個(gè)對(duì)應(yīng)的權(quán)值w和偏置b。若一句話有成百上千詞則會(huì)產(chǎn)生眾多參數(shù),而且神經(jīng)網(wǎng)絡(luò)層數(shù)的增加時(shí),參數(shù)也會(huì)成倍的增加,這對(duì)于模型的訓(xùn)練是非常耗時(shí)耗力的。
?
二是該模型沒有語(yǔ)義相關(guān)性,例如將“I hate this boring movie”中的詞打亂順序后輸入模型訓(xùn)練,并不影響模型的訓(xùn)練和結(jié)果的輸出。而實(shí)際上,對(duì)于語(yǔ)言來(lái)說(shuō),打亂順序后語(yǔ)義會(huì)得到破壞,如果字詞之間沒有相關(guān)性,那么提取出的特征向量將不能保留語(yǔ)義信息,可想而知這樣訓(xùn)練出的結(jié)果是沒有意義的。
?
而循環(huán)神經(jīng)網(wǎng)絡(luò)模型則較好的解決這兩個(gè)問題。
首先,我們由卷積神經(jīng)網(wǎng)絡(luò)的卷積層中,權(quán)值共享的模式得到啟發(fā),將其運(yùn)用在循環(huán)神經(jīng)網(wǎng)絡(luò)上,使得每個(gè)字詞都共享一個(gè)權(quán)值,大大減少了權(quán)值和偏置的參數(shù)量。如圖
?

其次,我們?cè)黾右粋€(gè)語(yǔ)義存儲(chǔ)單元h的概念。在開始時(shí),將h清零,相當(dāng)于我們聽別人說(shuō)話時(shí),先將大腦清空不去想別的事情一樣。然后每經(jīng)過(guò)一個(gè)字詞,我們將該字詞的前面的所有部分作為h,然后乘以一個(gè)權(quán)值w后作為新的語(yǔ)義存儲(chǔ)單元。
?

如圖,清零的h0作為輸入元素,將字詞“I”經(jīng)過(guò)線性單元后加上h0whh的整體作為h1,h1既作為該節(jié)點(diǎn)的輸出,也作為更新后的記憶存儲(chǔ)單元參與下一個(gè)字詞“hate”的編碼,以此類推。即,每經(jīng)過(guò)一個(gè)字詞,對(duì)下一字詞的處理的不僅僅是線性模型,還有之前的語(yǔ)義存儲(chǔ)單元,其整體作為輸出結(jié)果并自更新為新的語(yǔ)義單元。這樣便使每次字詞之間有了語(yǔ)義間的相關(guān)性,也是循環(huán)神經(jīng)網(wǎng)絡(luò)“循環(huán)”的由來(lái)。
?
三,循環(huán)神經(jīng)網(wǎng)絡(luò)的意義
相比于全連接神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò),循環(huán)神經(jīng)網(wǎng)絡(luò)有著特殊的不可替代的意義。因?yàn)?,不管是卷積神經(jīng)網(wǎng)絡(luò)還是全連接神經(jīng)網(wǎng)絡(luò),他們假設(shè)的前提都是:元素之間是相互獨(dú)立的,輸入和輸出也是獨(dú)立的,比如輸入的是身高體重等沒有先后或者重要程度等相關(guān)性的信息,輸出是男生或者女生。
但現(xiàn)實(shí)世界中,很多元素的相關(guān)的,比如文本,語(yǔ)音等。如一句話:我喜歡吃水果,最喜歡吃的水果是香蕉,今天去市場(chǎng)我要買一些____。這里的填空根據(jù)語(yǔ)義關(guān)系很容易填“香蕉”。因?yàn)槲覀兪歉鶕?jù)上下文的內(nèi)容推斷出來(lái)的,但通過(guò)一般的神經(jīng)網(wǎng)絡(luò)算法實(shí)現(xiàn)這一步并不容易,因此,就有了現(xiàn)在的循環(huán)神經(jīng)網(wǎng)絡(luò),他的本質(zhì)是:像人一樣擁有記憶。因此,他的輸入結(jié)果就依賴于當(dāng)前的輸入信息和記憶單元。
想看up主分享更多干貨內(nèi)容,可以加喵喵老師;RGZN886,告訴喵喵老師想看哪些內(nèi)容,up主認(rèn)真幫大家整理,希望大家多多支持喲~