递归神经网络的认识
?????? 遞歸神經(jīng)網(wǎng)絡(luò)(recursive neural network)是具有樹狀階層結(jié)構(gòu)且網(wǎng)絡(luò)節(jié)點按其連接順序?qū)斎胄畔⑦M行遞歸的人工神經(jīng)網(wǎng)絡(luò),是深度學(xué)習(xí)算法之一。
?????? 遞歸神經(jīng)網(wǎng)絡(luò)提出于1990年,被視為循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network)的推廣。當(dāng)遞歸神經(jīng)網(wǎng)絡(luò)的每個父節(jié)點都僅與一個子節(jié)點連接時,其結(jié)構(gòu)等價于全連接的循環(huán)神經(jīng)網(wǎng)絡(luò)。遞歸神經(jīng)網(wǎng)絡(luò)可以引入門控機制(gated mechanism)以學(xué)習(xí)長距離依賴。遞歸神經(jīng)網(wǎng)絡(luò)具有靈活的拓?fù)浣Y(jié)構(gòu)且權(quán)重共享,適用于包含結(jié)構(gòu)關(guān)系的機器學(xué)習(xí)任務(wù),在自然語言處理(Natural Language Processing, NLP)領(lǐng)域有重要應(yīng)用。
?
實例(https://blog.csdn.net/zb123455445/article/details/78178794)
因為神經(jīng)網(wǎng)絡(luò)的輸入層單元個數(shù)是固定的,因此必須用循環(huán)或者遞歸的方式來處理長度可變的輸入。循環(huán)神經(jīng)網(wǎng)絡(luò)實現(xiàn)了前者,通過將長度不定的輸入分割為等長度的小塊,然后再依次的輸入到網(wǎng)絡(luò)中,從而實現(xiàn)了神經(jīng)網(wǎng)絡(luò)對變長輸入的處理。一個典型的例子是,當(dāng)我們處理一句話的時候,我們可以把一句話看作是詞組成的序列,然后,每次向循環(huán)神經(jīng)網(wǎng)絡(luò)輸入一個詞,如此循環(huán)直至整句話輸入完畢,循環(huán)神經(jīng)網(wǎng)絡(luò)將產(chǎn)生對應(yīng)的輸出。如此,我們就能處理任意長度的句子了。然而,有時候把句子看做是詞的序列是不夠的,比如下面這句話『兩個外語學(xué)院的學(xué)生』:
上圖顯示了這句話的兩個不同的語法解析樹。可以看出來這句話有歧義,不同的語法解析樹則對應(yīng)了不同的意思。一個是『兩個外語學(xué)院的/學(xué)生』,也就是學(xué)生可能有許多,但他們來自于兩所外語學(xué)校;另一個是『兩個/外語學(xué)院的學(xué)生』,也就是只有兩個學(xué)生,他們是外語學(xué)院的。為了能夠讓模型區(qū)分出兩個不同的意思,我們的模型必須能夠按照樹結(jié)構(gòu)去處理信息,而不是序列,這就是遞歸神經(jīng)網(wǎng)絡(luò)的作用。當(dāng)面對按照樹/圖結(jié)構(gòu)處理信息更有效的任務(wù)時,遞歸神經(jīng)網(wǎng)絡(luò)通常都會獲得不錯的結(jié)果。
遞歸神經(jīng)網(wǎng)絡(luò)可以把一個樹/圖結(jié)構(gòu)信息編碼為一個向量,也就是把信息映射到一個語義向量空間中。這個語義向量空間滿足某類性質(zhì),比如語義相似的向量距離更近。也就是說,如果兩句話(盡管內(nèi)容不同)它的意思是相似的,那么把它們分別編碼后的兩個向量的距離也相近;反之,如果兩句話的意思截然不同,那么編碼后向量的距離則很遠。如下圖所示:
從上圖我們可以看到,遞歸神經(jīng)網(wǎng)絡(luò)將所有的詞、句都映射到一個2維向量空間中。句子『the country of my birth』和句子『the place where I was born』的意思是非常接近的,所以表示它們的兩個向量在向量空間中的距離很近。另外兩個詞『Germany』和『France』因為表示的都是地點,它們的向量與上面兩句話的向量的距離,就比另外兩個表示時間的詞『Monday』和『Tuesday』的向量的距離近得多。這樣,通過向量的距離,就得到了一種語義的表示。
上圖還顯示了自然語言可組合的性質(zhì):詞可以組成句、句可以組成段落、段落可以組成篇章,而更高層的語義取決于底層的語義以及它們的組合方式。遞歸神經(jīng)網(wǎng)絡(luò)是一種表示學(xué)習(xí),它可以將詞、句、段、篇按照他們的語義映射到同一個向量空間中,也就是把可組合(樹/圖結(jié)構(gòu))的信息表示為一個個有意義的向量。比如上面這個例子,遞歸神經(jīng)網(wǎng)絡(luò)把句子"the country of my birth"表示為二維向量[1,5]。有了這個『編碼器』之后,我們就可以以這些有意義的向量為基礎(chǔ)去完成更高級的任務(wù)(比如情感分析等)。如下圖所示,遞歸神經(jīng)網(wǎng)絡(luò)在做情感分析時,可以比較好的處理否定句,這是勝過其他一些模型的。
在下圖中,藍色表示正面評價,紅色表示負(fù)面評價。每個節(jié)點是一個向量,這個向量表達了以它為根的子樹的情感評價。比如"intelligent humor"是正面評價,而"care about cleverness wit or any other kind of intelligent humor"是中性評價。我們可以看到,模型能夠正確的處理doesn't的含義,將正面評價轉(zhuǎn)變?yōu)樨?fù)面評價。
?
計算
1前向計算
遞歸神經(jīng)網(wǎng)絡(luò)的輸入是兩個子節(jié)點(也可以是多個),輸出就是將這兩個子節(jié)點編碼后產(chǎn)生的父節(jié)點,父節(jié)點的維度和每個子節(jié)點是相同的。如下圖所示:
分別是表示兩個子節(jié)點的向量,P是表示父節(jié)點的向量。子節(jié)點和父節(jié)點組成一個全連接神經(jīng)網(wǎng)絡(luò),也就是子節(jié)點的每個神經(jīng)元都和父節(jié)點的每個神經(jīng)元兩兩相連。我們用矩陣W表示這些連接上的權(quán)重,它的維度將是d×2d ,其中,d 表示每個節(jié)點的維度。父節(jié)點的計算公式可以寫成:
在上式中,tanh是激活函數(shù)(當(dāng)然也可以用其它的激活函數(shù)),b 是偏置項,它也是一個維度為d 的向量。
然后,我們把產(chǎn)生的父節(jié)點的向量和其他子節(jié)點的向量再次作為網(wǎng)絡(luò)的輸入,再次產(chǎn)生它們的父節(jié)點。如此遞歸下去,直至整棵樹處理完畢。最終,我們將得到根節(jié)點的向量,我們可以認(rèn)為它是對整棵樹的表示,這樣我們就實現(xiàn)了把樹映射為一個向量。在下圖中,我們使用遞歸神經(jīng)網(wǎng)絡(luò)處理一棵樹,最終得到的向量 ,就是對整棵樹的表示:
舉個例子,我們使用遞歸神將網(wǎng)絡(luò)將『兩個外語學(xué)校的學(xué)生』映射為一個向量,如下圖所示:
最后得到的向量 就是對整個句子『兩個外語學(xué)校的學(xué)生』的表示。由于整個結(jié)構(gòu)是遞歸的,不僅僅是根節(jié)點,事實上每個節(jié)點都是以其為根的子樹的表示。比如,在左邊的這棵樹中,向量 是短語『外語學(xué)院的學(xué)生』的表示,而向量 是短語『外語學(xué)院的』的表示。
式1就是遞歸神經(jīng)網(wǎng)絡(luò)的前向計算算法。它和全連接神經(jīng)網(wǎng)絡(luò)的計算沒有什么區(qū)別,只是在輸入的過程中需要根據(jù)輸入的樹結(jié)構(gòu)依次輸入每個子節(jié)點。需要特別注意的是,遞歸神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置項在所有的節(jié)點都是共享的。
2 訓(xùn)練
遞歸神經(jīng)網(wǎng)絡(luò)的訓(xùn)練算法和循環(huán)神經(jīng)網(wǎng)絡(luò)類似,兩者不同之處在于,前者需要將殘差δ 從根節(jié)點反向傳播到各個子節(jié)點,而后者是將殘差δ 從當(dāng)前時刻 反向傳播到初始時刻 。
誤差項的傳遞
首先,先推導(dǎo)將誤差從父節(jié)點傳遞到子節(jié)點的公式,如下圖:
?
?
?
?
?
?
上圖是在樹型結(jié)構(gòu)中反向傳遞誤差項的全景圖,反復(fù)應(yīng)用式2,在已知 的情況下,我們不難算出 為:
權(quán)重梯度的計算
根據(jù)加權(quán)輸入的計算公式:
式3就是第l層權(quán)重項的梯度計算公式。我們知道,由于權(quán)重W是在所有層共享的,所以和循環(huán)神經(jīng)網(wǎng)絡(luò)一樣,遞歸神經(jīng)網(wǎng)絡(luò)的最終的權(quán)重梯度是各個層權(quán)重梯度之和。即:
把上式擴展為矩陣的形式:
???????????????????????? (式5)
式5是第l層偏置項的梯度,那么最終的偏置項梯度是各個層偏置項梯度之和,即:
應(yīng)用
自然語言和自然場景解析
?
兩種不同的場景,可以用相同的遞歸神經(jīng)網(wǎng)絡(luò)模型來實現(xiàn)。我們以第一個場景,自然語言解析為例。
https://www.sohu.com/a/128784058_487514
我們希望將一句話逐字輸入到神經(jīng)網(wǎng)絡(luò)中,然后,神經(jīng)網(wǎng)絡(luò)返回一個解析好的樹。為了做到這一點,我們需要給神經(jīng)網(wǎng)絡(luò)再加上一層,負(fù)責(zé)打分。分?jǐn)?shù)越高,說明兩個子節(jié)點結(jié)合更加緊密,分?jǐn)?shù)越低,說明兩個子節(jié)點結(jié)合更松散。如下圖所示:
一旦這個打分函數(shù)訓(xùn)練好了(也就是矩陣U的各項值變?yōu)楹线m的值),我們就可以利用貪心算法來實現(xiàn)句子的解析(貪心算法的基本思路是從問題的某一個初始解出發(fā)一步一步地進行,根據(jù)某個優(yōu)化測度,每一步都要確保能獲得局部最優(yōu)解。每一步只考慮一個數(shù)據(jù),他的選取應(yīng)該滿足局部優(yōu)化的條件。若下一個數(shù)據(jù)和部分最優(yōu)解連在一起不再是可行解時,就不把該數(shù)據(jù)添加到部分解中,直到把所有數(shù)據(jù)枚舉完,或者不能再添加算法停止)。第一步,我們先將詞按照順序兩兩輸入神經(jīng)網(wǎng)絡(luò),得到第一組打分:
我們發(fā)現(xiàn),現(xiàn)在分?jǐn)?shù)最高的是第一組,The cat,說明它們的結(jié)合是最緊密的。這樣,我們可以先將它們組合為一個節(jié)點。然后,再次兩兩計算相鄰子節(jié)點的打分:
?????
現(xiàn)在,分?jǐn)?shù)最高的是最后一組,the mat。于是,我們將它們組合為一個節(jié)點,再兩兩計算相鄰節(jié)點的打分。這時,我們發(fā)現(xiàn)最高的分?jǐn)?shù)是on the mat,把它們組合為一個節(jié)點,繼續(xù)兩兩計算相鄰節(jié)點的打分......最終,我們就能夠得到整個解析樹:
總結(jié)
- 上一篇: 交通银行商业汇票交易系统成功上线
- 下一篇: 考研数学二(来源于1800和张宇总结)