力荐 | 吴恩达《序列模型》精炼笔记(1)-- 循环神经网络(RNN)
AI有道
不可錯(cuò)過的AI技術(shù)公眾號(hào)
關(guān)注
序列模型(Recurrent Neural Networks)是Andrw Ng深度學(xué)習(xí)專項(xiàng)課程中的第五門課,也是最后一門課。這門課主要介紹循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的基本概念、模型和具體應(yīng)用。該門課共有3周課時(shí),所以我將分成3次筆記來總結(jié),這是第一節(jié)筆記。
——前言
1
Why Sequence Models
序列模型能夠應(yīng)用在許多領(lǐng)域,例如:
語音識(shí)別
音樂發(fā)生器
情感分類
DNA序列分析
機(jī)器翻譯
視頻動(dòng)作識(shí)別
命名實(shí)體識(shí)別
這些序列模型基本都屬于監(jiān)督式學(xué)習(xí),輸入x和輸出y不一定都是序列模型。如果都是序列模型的話,模型長(zhǎng)度不一定完全一致。
2
Notation
下面以命名實(shí)體識(shí)別為例,介紹序列模型的命名規(guī)則。示例語句為:
Harry Potter and Hermione Granger invented a new spell.
該句話包含9個(gè)單詞,輸出y即為1 x 9向量,每位表征對(duì)應(yīng)單詞是否為人名的一部分,1表示是,0表示否。很明顯,該句話中“Harry”, “Potter”, “Hermione”, “Granger”均是人名成分,所以,對(duì)應(yīng)的輸出y可表示為:
對(duì)于輸入x,表示為:
該詞匯庫(kù)可看成是10000 x 1的向量。值得注意的是自然語言處理NLP實(shí)際應(yīng)用中的詞匯庫(kù)可達(dá)百萬級(jí)別的詞匯量。
3
Recurrent Neural Network Model
對(duì)于序列模型,如果使用標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò),其模型結(jié)構(gòu)如下:
使用標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)模型存在兩個(gè)問題:
標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)不適合解決序列模型問題,而循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是專門用來解決序列模型問題的。RNN模型結(jié)構(gòu)如下:
RNN模型包含三類權(quán)重系數(shù),分別是Wax,WaaWaa,Wya。且不同元素之間同一位置共享同一權(quán)重系數(shù)。
RNN的正向傳播(Forward Propagation)過程為:
其中,g(?)表示激活函數(shù),不同的問題需要使用不同的激活函數(shù)。
為了簡(jiǎn)化表達(dá)式,可以對(duì)上式進(jìn)行整合:
則正向傳播可表示為:
He said, “Teddy Roosevelt was a great President.”
He said, “Teddy bears are on sale!”
4
Backpropagation through Time
針對(duì)上面識(shí)別人名的例子,經(jīng)過RNN正向傳播,單個(gè)元素的Loss function為:
該樣本所有元素的Loss function為:
然后,反向傳播(Backpropagation)過程就是從右到左分別計(jì)算L(y^,y)對(duì)參數(shù)Wa,Wy,ba,by的偏導(dǎo)數(shù)。思路與做法與標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)是一樣的。一般可以通過成熟的深度學(xué)習(xí)框架自動(dòng)求導(dǎo),例如PyTorch、Tensorflow等。這種從右到左的求導(dǎo)過程被稱為Backpropagation through time。
5
Different Types of RNNs
以上介紹的例子中,Tx=Ty。但是在很多RNN模型中,Tx是不等于Ty的。例如第1節(jié)介紹的許多模型都是Tx≠Ty。根據(jù)Tx與Ty的關(guān)系,RNN模型包含以下幾個(gè)類型:
Many to many:?Tx=TyTx=Ty
Many to many:?Tx≠TyTx≠Ty
Many to one:?Tx>1,Ty=1Tx>1,Ty=1
One to many:?Tx=1,Ty>1Tx=1,Ty>1
One to one:?Tx=1,Ty=1Tx=1,Ty=1
不同類型相應(yīng)的示例結(jié)構(gòu)如下:
6
Language Model and Sequence Generation
語言模型是自然語言處理(NLP)中最基本和最重要的任務(wù)之一。使用RNN能夠很好地建立需要的不同語言風(fēng)格的語言模型。
什么是語言模型呢?舉個(gè)例子,在語音識(shí)別中,某句語音有兩種翻譯:
The apple and pair salad.
The apple and pear salad.
很明顯,第二句話更有可能是正確的翻譯。語言模型實(shí)際上會(huì)計(jì)算出這兩句話各自的出現(xiàn)概率。比如第一句話概率為10^?13,第二句話概率為10^?10。也就是說,利用語言模型得到各自語句的概率,選擇概率最大的語句作為正確的翻譯。概率計(jì)算的表達(dá)式為:
如何使用RNN構(gòu)建語言模型?首先,我們需要一個(gè)足夠大的訓(xùn)練集,訓(xùn)練集由大量的單詞語句語料庫(kù)(corpus)構(gòu)成。然后,對(duì)corpus的每句話進(jìn)行切分詞(tokenize)。做法就跟第2節(jié)介紹的一樣,建立vocabulary,對(duì)每個(gè)單詞進(jìn)行one-hot編碼。例如下面這句話:
The Egyptian Mau is a bread of cat.
One-hot編碼已經(jīng)介紹過了,不再贅述。還需注意的是,每句話結(jié)束末尾,需要加上< EOS >作為語句結(jié)束符。另外,若語句中有詞匯表中沒有的單詞,用< UNK >表示。假設(shè)單詞“Mau”不在詞匯表中,則上面這句話可表示為:
The Egyptian < UNK > is a bread of cat. < EOS >
準(zhǔn)備好訓(xùn)練集并對(duì)語料庫(kù)進(jìn)行切分詞等處理之后,接下來構(gòu)建相應(yīng)的RNN模型。
單個(gè)元素的softmax loss function為:
該樣本所有元素的Loss function為:
對(duì)語料庫(kù)的每條語句進(jìn)行RNN模型訓(xùn)練,最終得到的模型可以根據(jù)給出語句的前幾個(gè)單詞預(yù)測(cè)其余部分,將語句補(bǔ)充完整。例如給出“Cats average 15”,RNN模型可能預(yù)測(cè)完整的語句是“Cats average 15 hours of sleep a day.”。
7
Sampling Novel Sequences
利用訓(xùn)練好的RNN語言模型,可以進(jìn)行新的序列采樣,從而隨機(jī)產(chǎn)生新的語句。與上一節(jié)介紹的一樣,相應(yīng)的RNN模型如下所示:
值得一提的是,如果不希望新的語句中包含< UNK >標(biāo)志符,可以在每次產(chǎn)生< UNK >時(shí)重新采樣,直到生成非< UNK >標(biāo)志符為止。
以上介紹的是word level RNN,即每次生成單個(gè)word,語句由多個(gè)words構(gòu)成。另外一種情況是character level RNN,即詞匯表由單個(gè)英文字母或字符組成,如下所示:
Character level RNN與word level RNN不同的是,y^<t>由單個(gè)字符組成而不是word。訓(xùn)練集中的每句話都當(dāng)成是由許多字符組成的。character level RNN的優(yōu)點(diǎn)是能有效避免遇到詞匯表中不存在的單詞< UNK >。但是,character level RNN的缺點(diǎn)也很突出。由于是字符表征,每句話的字符數(shù)量很大,這種大的跨度不利于尋找語句前部分和后部分之間的依賴性。另外,character level RNN的在訓(xùn)練時(shí)的計(jì)算量也是龐大的。基于這些缺點(diǎn),目前character level RNN的應(yīng)用并不廣泛,但是在特定應(yīng)用下仍然有發(fā)展的趨勢(shì)。
8
Vanisging Gradients with RNNs
語句中可能存在跨度很大的依賴關(guān)系,即某個(gè)word可能與它距離較遠(yuǎn)的某個(gè)word具有強(qiáng)依賴關(guān)系。例如下面這兩條語句:
The?cat, which already ate fish,?was?full.
The?cats, which already ate fish,?were?full.
第一句話中,was受cat影響;第二句話中,were受cats影響。它們之間都跨越了很多單詞。而一般的RNN模型每個(gè)元素受其周圍附近的影響較大,難以建立跨度較大的依賴性。上面兩句話的這種依賴關(guān)系,由于跨度很大,普通的RNN網(wǎng)絡(luò)容易出現(xiàn)梯度消失,捕捉不到它們之間的依賴,造成語法錯(cuò)誤。關(guān)于梯度消失的原理,我們?cè)谥暗膮嵌鬟_(dá)《優(yōu)化深度神經(jīng)網(wǎng)絡(luò)》筆記(1)– 深度學(xué)習(xí)的實(shí)用層面已經(jīng)有過介紹,可參考。
另一方面,RNN也可能出現(xiàn)梯度爆炸的問題,即gradient過大。常用的解決辦法是設(shè)定一個(gè)閾值,一旦梯度最大值達(dá)到這個(gè)閾值,就對(duì)整個(gè)梯度向量進(jìn)行尺度縮小。這種做法被稱為gradient clipping。
9
Gated Recurrent Unit(GRU)
RNN的隱藏層單元結(jié)構(gòu)如下圖所示:
為了解決梯度消失問題,對(duì)上述單元進(jìn)行修改,添加了記憶單元,構(gòu)建GRU,如下圖所示:
相應(yīng)的表達(dá)式為:
上面介紹的是簡(jiǎn)化的GRU模型,完整的GRU添加了另外一個(gè)gate,即Γr,表達(dá)式如下:
注意,以上表達(dá)式中的??表示元素相乘,而非矩陣相乘。
10
Long Short Term Memory(LSTM)
LSTM是另一種更強(qiáng)大的解決梯度消失問題的方法。它對(duì)應(yīng)的RNN隱藏層單元結(jié)構(gòu)如下圖所示:
相應(yīng)的表達(dá)式為:
LSTM包含三個(gè)gates:Γu,Γf,Γo,分別對(duì)應(yīng)update gate,forget gate和output gate。
如果考慮c^<t?1>對(duì)Γu,Γf,Γo的影響,可加入peephole connection,對(duì)LSTM的表達(dá)式進(jìn)行修改:
GRU可以看成是簡(jiǎn)化的LSTM,兩種方法都具有各自的優(yōu)勢(shì)。
11
Bidirectional RNN
我們?cè)诘?節(jié)中簡(jiǎn)單提過Bidirectional RNN,它的結(jié)構(gòu)如下圖所示:
BRNN對(duì)應(yīng)的輸出表達(dá)式為:
BRNN能夠同時(shí)對(duì)序列進(jìn)行雙向處理,性能大大提高。但是計(jì)算量較大,且在處理實(shí)時(shí)語音時(shí),需要等到完整的一句話結(jié)束時(shí)才能進(jìn)行分析。
12
Deep RNNs
Deep RNNs由多層RNN組成,其結(jié)構(gòu)如下圖所示:
我們知道DNN層數(shù)可達(dá)100多,而Deep RNNs一般沒有那么多層,3層RNNs已經(jīng)較復(fù)雜了。
另外一種Deep RNNs結(jié)構(gòu)是每個(gè)輸出層上還有一些垂直單元,如下圖所示:
至此,第一節(jié)筆記介紹完畢!
喜歡就請(qǐng)贊賞或轉(zhuǎn)發(fā)分享一下吧
往 期 推 薦
【1】吳恩達(dá)《卷積神經(jīng)網(wǎng)絡(luò)》精煉筆記(1)-- 卷積神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
【2】干貨 | 神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)歷史文章匯總
【3】深入淺出機(jī)器學(xué)習(xí)技法(一):線性支持向量機(jī)(LSVM)
【4】干貨 | 機(jī)器學(xué)習(xí)基石精選文章鏈接
【5】機(jī)器學(xué)習(xí)中的維度災(zāi)難
長(zhǎng)按二維碼掃描關(guān)注
AI有道
ID:redstonewill
紅色石頭
個(gè)人微信 : WillowRedstone
新浪微博:@RedstoneWill
總結(jié)
以上是生活随笔為你收集整理的力荐 | 吴恩达《序列模型》精炼笔记(1)-- 循环神经网络(RNN)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员:代码全部替换成中文,你能接受吗?
- 下一篇: 电脑开启上帝模式,300多个系统功能都在