在前面的文章中,咱們介紹了循環神經網絡,它能夠用來處理包含序列結構的信息。然而,除此以外,信息每每還存在着諸如樹結構、圖結構等更復雜的結構。對於這種複雜的結構,循環神經網絡就無能爲力了。本文介紹一種更爲強大、複雜的神經網絡:遞歸神經網絡 (Recursive Neural Network, RNN),以及它的訓練算法BPTS (Back Propagation Through Structure)。顧名思義,遞歸神經網絡(巧合的是,它的縮寫和循環神經網絡同樣,也是RNN)能夠處理諸如樹、圖這樣的遞歸結構。在文章的最後,咱們將實現一個遞歸神經網絡,並介紹它的幾個應用場景。算法
由於神經網絡的輸入層單元個數是固定的,所以必須用循環或者遞歸的方式來處理長度可變的輸入。循環神經網絡實現了前者,經過將長度不定的輸入分割爲等長度的小塊,而後再依次的輸入到網絡中,從而實現了神經網絡對變長輸入的處理。一個典型的例子是,當咱們處理一句話的時候,咱們能夠把一句話看做是詞組成的序列,而後,每次向循環神經網絡輸入一個詞,如此循環直至整句話輸入完畢,循環神經網絡將產生對應的輸出。如此,咱們就能處理任意長度的句子了。入下圖所示:網絡
然而,有時候把句子看作是詞的序列是不夠的,好比下面這句話『兩個外語學院的學生』:ide
上圖顯示了這句話的兩個不一樣的語法解析樹。能夠看出來這句話有歧義,不一樣的語法解析樹則對應了不一樣的意思。一個是『兩個外語學院的/學生』,也就是學生可能有許多,但他們來自於兩所外語學校;另外一個是『兩個/外語學院的學生』,也就是隻有兩個學生,他們是外語學院的。爲了可以讓模型區分出兩個不一樣的意思,咱們的模型必須可以按照樹結構去處理信息,而不是序列,這就是遞歸神經網絡的做用。當面對按照樹/圖結構處理信息更有效的任務時,遞歸神經網絡一般都會得到不錯的結果。函數
遞歸神經網絡能夠把一個樹/圖結構信息編碼爲一個向量,也就是把信息映射到一個語義向量空間中。這個語義向量空間知足某類性質,好比語義類似的向量距離更近。也就是說,若是兩句話(儘管內容不一樣)它的意思是類似的,那麼把它們分別編碼後的兩個向量的距離也相近;反之,若是兩句話的意思大相徑庭,那麼編碼後向量的距離則很遠。以下圖所示:性能
從上圖咱們能夠看到,遞歸神經網絡將全部的詞、句都映射到一個2維向量空間中。句子『the country of my birth』和句子『the place where I was born』的意思是很是接近的,因此表示它們的兩個向量在向量空間中的距離很近。另外兩個詞『Germany』和『France』由於表示的都是地點,它們的向量與上面兩句話的向量的距離,就比另外兩個表示時間的詞『Monday』和『Tuesday』的向量的距離近得多。這樣,經過向量的距離,就獲得了一種語義的表示。學習
上圖還顯示了天然語言可組合的性質:詞能夠組成句、句能夠組成段落、段落能夠組成篇章,而更高層的語義取決於底層的語義以及它們的組合方式。遞歸神經網絡是一種表示學習,它能夠將詞、句、段、篇按照他們的語義映射到同一個向量空間中,也就是把可組合(樹/圖結構)的信息表示爲一個個有意義的向量。好比上面這個例子,遞歸神經網絡把句子"the country of my birth"表示爲二維向量[1,5]。有了這個『編碼器』以後,咱們就能夠以這些有意義的向量爲基礎去完成更高級的任務(好比情感分析等)。以下圖所示,遞歸神經網絡在作情感分析時,能夠比較好的處理否認句,這是賽過其餘一些模型的:優化
在上圖中,藍色表示正面評價,紅色表示負面評價。每一個節點是一個向量,這個向量表達了以它爲根的子樹的情感評價。好比"intelligent humor"是正面評價,而"care about cleverness wit or any other kind of intelligent humor"是中性評價。咱們能夠看到,模型可以正確的處理doesn't的含義,將正面評價轉變爲負面評價。編碼
儘管遞歸神經網絡具備更爲強大的表示能力,可是在實際應用中並不太流行。其中一個主要緣由是,遞歸神經網絡的輸入是樹/圖結構,而這種結構須要花費不少人工去標註。想象一下,若是咱們用循環神經網絡處理句子,那麼咱們能夠直接把句子做爲輸入。然而,若是咱們用遞歸神經網絡處理句子,咱們就必須把每一個句子標註爲語法解析樹的形式,這無疑要花費很是大的精力。不少時候,相對於遞歸神經網絡可以帶來的性能提高,這個投入是不太划算的。atom
咱們已經基本瞭解了遞歸神經網絡是作什麼用的,接下來,咱們將探討它的算法細節。spa
接下來,咱們詳細介紹一下遞歸神經網絡是如何處理樹/圖結構的信息的。在這裏,咱們以處理樹型信息爲例進行介紹。
遞歸神經網絡的輸入是兩個子節點(也能夠是多個),輸出就是將這兩個子節點編碼後產生的父節點,父節點的維度和每一個子節點是相同的。以下圖所示:
在上式中,tanh是激活函數(固然也能夠用其它的激活函數),
而後,咱們把產生的父節點的向量和其餘子節點的向量再次做爲網絡的輸入,再次產生它們的父節點。如此遞歸下去,直至整棵樹處理完畢。最終,咱們將獲得根節點的向量,咱們能夠認爲它是對整棵樹的表示,這樣咱們就實現了把樹映射爲一個向量。在下圖中,咱們使用遞歸神經網絡處理一棵樹,最終獲得的向量
舉個例子,咱們使用遞歸神將網絡將『兩個外語學校的學生』映射爲一個向量,以下圖所示:
最後獲得的向量
式1就是遞歸神經網絡的前向計算算法。它和全鏈接神經網絡的計算沒有什麼區別,只是在輸入的過程當中須要根據輸入的樹結構依次輸入每一個子節點。
須要特別注意的是,遞歸神經網絡的權重
遞歸神經網絡的訓練算法和循環神經網絡相似,二者不一樣之處在於,前者須要將殘差
下面,咱們介紹適用於遞歸神經網絡的訓練算法,也就是BPTS算法。
首先,咱們先推導將偏差從父節點傳遞到子節點的公式,以下圖:
定義
設
在上述式子裏,
在上面的公式中,
有了上式,咱們就能夠把它表示爲矩陣形式,從而獲得一個向量化表達:
其中,矩陣
上式看上去可能會讓人暈菜,從下圖,咱們能夠直觀的看到
顯然,子矩陣
也就是說,將偏差項反向傳遞到相應子節點
如今,咱們設
這樣,咱們獲得:
若是咱們將不一樣子節點
式2就是將偏差項從父節點傳遞到其子節點的公式。注意,上式中的
有了傳遞一層的公式,咱們就不難寫出逐層傳遞的公式。
上圖是在樹型結構中反向傳遞偏差項的全景圖,反覆應用式2,在已知
在上面的公式中,
根據加權輸入的計算公式:
其中,
那麼,咱們能夠求得偏差函數在第l層對權重的梯度爲:
上式是針對一個權重項
式3就是第l層權重項的梯度計算公式。咱們知道,因爲權重
由於循環神經網絡的證實過程已經在零基礎入門深度學習(4) - 卷積神經網絡一文中給出,所以,遞歸神經網絡『爲何最終梯度是各層梯度之和』的證實就留給讀者自行完成啦。
接下來,咱們求偏置項
把上式擴展爲矩陣的形式: