RNN既可以表述為循環神 經網絡(recurrent neural network),也可以表述為遞歸神經網絡(recursive neural network),前者一般用于處理以時間序列為輸入的問題(比如把一個句子看成詞組成的序列),每次向循環神經網絡輸入一個詞,知道整個句子輸入結束。后者一般用于處理圖結構或樹結構問題(比如為了處理歧義問題,我們構造語法樹為輸入,而不是循環輸入每一個詞)。
下圖是循環神經網絡的展開
圖1
下面是一個句子對上圖的應用
圖2
可以這樣理解:將所有用到的英文詞向量化之后,the表示為(0.4,0.3),對應圖1中的x輸入,經過神經元計算之后輸出為(1,3.5),神經元內部的計算方式為:
函數f通常是諸如tanh或者ReLU的非線性函數,U,x,St-1都為向量且U、V、W都是待訓練參數。輸出O可以選擇softmax函數,其表達式如下
這里的變量i對應圖1中的變量t,可見
也就是說循環神經網絡所有輸出之和為1,輸出O的計算公式為
其中V和St都是向量。也就是說神經元先計算隱狀態St,然后計算輸出Ot
?
下面以樹結構為例來說明遞歸神經網絡的輸入與計算
1.將句子分詞之后,給每個詞一個向量,這里詞的向量化可以采用one-hot或者其他一些向量化工具,比如Google的gensim
2.將詞按照樹形結構輸入,以圖3為例
圖3
2.1 首先計算“兩個”和“外語學院”的父節點的向量,計算方法是:假設“兩個”的詞向量表示為c1,“外語學院”的詞向量表示為c2,那么父節點對應的向量P為
其中W和b是訓練好的參數,tanh是雙曲正切函數,表達式為
2.2 依次迭代計算各個父節點對應的向量,最終得到根節點對應向量。
因為是以語法樹輸入的,所以對于歧義問題有較好的處理能力,比如圖3中的句子也可以用圖4的語法樹來表示:
圖4
事實上,圖3與圖4對應的根節點向量完全不同,因為詞向量的輸入順序是不一樣的。
在得到根節點向量后,我們就可以去完成一些更高級的任務,比如計算語義相似度或者情感分析等。