圖神經網絡 之 GNN與RNN


RNN:

循環神經網絡(Recurrent Neural Network, RNN)是一類以序列(sequence)數據為輸入

在序列的演進方向進行遞歸(recursion)且所有節點(循環單元)按鏈式連接的遞歸神經網絡(recursive neural network)

RNN的結構及變體
基礎的神經網絡包含輸入層、隱層、輸出層,通過激活函數控制輸出,層與層之間通過權值連接。

激活函數是事先確定好的,那么神經網絡模型通過訓練“學“到的東西就蘊含在“權值“中。


基礎的神經網絡只在層與層之間建立了權連接,RNN最大的不同之處就是在層之間的神經元之間也建立的權連接。如圖。

 

 

 

這是一個標准的RNN結構圖,圖中每個箭頭代表做一次變換,也就是說箭頭連接帶有權值。

左側是折疊起來的樣子,右側是展開的樣子,左側中h旁邊的箭頭代表此結構中的“循環“體現在隱層。


在展開結構中我們可以觀察到,在標准的RNN結構中,隱層的神經元之間也是帶有權值的。

也就是說,隨着序列的不斷推進,前面的隱層將會影響后面的隱層。

圖中O代表輸出,y代表樣本給出的確定值,L代表損失函數,我們可以看到,“損失“也是隨着序列的推薦而不斷積累的。

除上述特點之外,標准RNN的還有以下特點:
1、權值共享,圖中的W全是相同的,U和V也一樣。
2、每一個輸入值都只與它本身的那條路線建立權連接,不會和別的神經元連接。

以上是RNN的標准結構,然而在實際中這一種結構並不能解決所有問題.

例如我們輸入為一串文字,輸出為分類類別,那么輸出就不需要一個序列,只需要單個輸出。如圖。

 

 

同樣的,我們有時候還需要單輸入但是輸出為序列的情況。那么就可以使用如下結構:

 

 

還有一種結構是輸入雖是序列,但不隨着序列變化,就可以使用如下結構:

 

 原始的N vs N RNN要求序列等長,然而我們遇到的大部分問題序列都是不等長的,如機器翻譯中,源語言和目標語言的句子往往並沒有相同的長度。

解決不等長問題:

RNN最重要的一個變種:N vs M。這種結構又叫Encoder-Decoder模型,也可以稱之為Seq2Seq模型。

 

 這個結構的原理是先編碼后解碼。左側的RNN用來編碼得到c,拿到c后再用右側的RNN進行解碼。得到c有多種方式,最簡單的方法就是把Encoder的最后一個隱狀態賦值給c,還可以對最后的隱狀態做一個變換得到c,也可以對所有的隱狀態做變換。

 

 RNN還有很多種結構,用於應對不同的需求和解決不同的問題。

幾種不同的結構。但相同的是循環神經網絡除了擁有神經網絡都有的一些共性元素之外,它總要在一個地方體現出“循環“,而根據“循環“體現方式的不同和輸入輸出的變化就形成了多種RNN結構。

標准RNN的前向輸出流程

標准結構的RNN的前向傳播過程

 

 

各個符號的含義:x是輸入,h是隱層單元,o為輸出,L為損失函數,y為訓練集的標簽。

這些元素右上角帶的t代表t時刻的狀態,其中需要注意的是,因策單元h在t時刻的表現不僅由此刻的輸入決定,還受t時刻之前時刻的影響。

V、W、U是權值,同一類型的權連接權值相同。

具體關於RNN的詳細解:(36條消息) RNN_了不起的趙隊-CSDN博客_rnn

 

GNN與RNN

因為圖神經網絡不論是前向傳播的方式,還是反向傳播的優化算法,與循環神經網絡都有點相像。

實際上,圖神經網絡與到循環神經網絡很相似。為了清楚地顯示出它們之間的不同,我們用一張圖片來解釋這兩者設計上的不同:

 

 

 假設在GNN中存在三個結點x1,x2,x3,相應地,在RNN中有一個序列(x1,x2,x3)

筆者認為,GNN與RNN的區別主要在於4點:

 

 

 不過鑒於初代GNN與RNN結構上的相似性,一些文章中也喜歡把它稱之為 Recurrent-based GNN,也有一些文章會把它歸納到 Recurrent-based GCN中。

GNN的局限

初代GNN,也就是基於循環結構的圖神經網絡的核心是不動點理論。

它的核心觀點是通過結點信息的傳播使整張圖達到收斂,在其基礎上再進行預測

收斂作為GNN的內核,同樣局限了其更廣泛的使用,其中最突出的是兩個問題:

 

 

  Over Smooth

其中我們把整個布局視作一張圖,每個像素點與其上下左右以及斜上下左右8個像素點相鄰,這決定了信息在圖上的流動路徑。

初始時,

藍色表示沒有信息量,如果用向量的概念表達即為空向量

綠色,黃色與紅色各自有一部分信息量,表達為非空的特征向量

在圖上,信息主要從三塊有明顯特征的區域向其鄰接的像素點流動

一開始不同像素點的區分非常明顯,但在向不動點過渡的過程中,所有像素點都取向一致,最終整個系統形成均勻分布。這樣,雖然每個像素點都感知到了全局的信息,但我們無法根據它們最終的隱藏狀態區分它們。比如說,根據最終的狀態,我們是無法得知哪些像素點最開始時在綠色區域。

 事實上,上面這個圖與GNN中的信息流動並不完全等價。

從筆者來看,如果我們用物理模型來描述它,上面這個圖代表的是初始時有3個熱源在散發熱量,而后就讓它們自由演化;

但實際上,GNN在每個時間步都會將結點的特征作為輸入來更新隱藏狀態,這就好像是放置了若干個永遠不滅的熱源,熱源之間會有互相干擾,但最終不會完全一致。

 

門控圖神經網絡(Gated Graph Neural Network)#

我們上面細致比較了GNN與RNN,可以發現它們有諸多相通之處。

直接用類似RNN的方法來定義GNN:

於是,門控圖神經網絡(Gated Graph Neural Network, GGNN) 就出現了。

雖然在這里它們看起來類似,但實際上,它們的區別非常大,其中最核心的不同即是門控神經網絡不以不動點理論為基礎。

這意味着:

f 不再需要是一個壓縮映射;迭代不需要到收斂才能輸出,可以迭代固定步長;

優化算法也從 AP 算法轉向 BPTT

 

GGNN狀態更新

與圖神經網絡定義的范式一致,GGNN也有兩個過程:狀態更新與輸出。

相比GNN而言,它主要的區別來源於狀態更新階段。

具體地,GGNN參考了GRU的設計,把鄰居結點的信息視作輸入,結點本身的狀態視作隱藏狀態,其狀態更新函數如下:

 

 

 

 

對比GNN的GGNN的狀態更新公式,

發現:在GNN里需要作為輸入的結點特征

 

 

沒有出現在GGNN的公式中!

但實際上,這些結點特征對我們的預測至關重要,因為它才是各個結點的根本所在。

 

為了處理這個問題,GGNN將結點特征作為隱藏狀態初始化的一部分。

先回顧一下GGNN的流程,其實就是這樣:

 

 

 

GGNN實例1:到達判斷#

比如說給定一張圖G,開始結點 S,對於任意一個結點 E,模型判斷開始結點是否可以通過圖游走至該結點。

同樣地,這也可以轉換成一個對結點的二分類問題,即可以到達不能到達

下圖即描述了這樣的過程:

 

 

 

圖中的紅色結點開始結點S綠色結點是我們希望判斷的結點E,我們這里稱其為結束結點

那么相比於其他結點,這兩個結點具有一定特殊性。

那我們就可以使用第1維為1來表示開始結點,第2維為1來表示結束結點。

最后在對結束結點分類時,如果其隱藏狀態的第1維被賦予得到了一個非0的實數值,那意味着它可以到達。

 

從初始化的流程我們也可以看出GNN與GGNN的區別:

GNN依賴於不動點理論,所以每個結點的隱藏狀態即使使用隨機初始化都會收斂到不動點

GGNN則不同,不同的初始化對GGNN最終的結果影響很大

 

GGNN實例2:語義解析

語義解析的主要任務是將自然語言轉換成機器語言,在這里筆者特指的是SQL(結構化查詢語言,Structured Query Language),它就是大家所熟知的數據庫查詢語言。

任務:可以讓小白用戶也能從數據庫中獲得自己關心的數據。正是因為有了語義解析,用戶不再需要學習SQL語言的語法,也不需要有編程基礎,可以直接通過自然語言來查詢數據庫。

 

事實上,語義解析放到今天仍然是一個非常難的任務。除去自然語言與程序語言在語義表達上的差距外,很大一部分性能上的損失是因為任務本身,或者叫SQL語言的語法太復雜。比如我們有兩張表格,一張是學生的學號與其性別,另一張表格記錄了每個學生選修的課程。那如果想知道有多少女生選修了某門課程,我們需要先將兩張表格聯合(JOIN),再對結果進行過濾(WHERE),最后進行聚合統計(COUNT)。這個問題在多表的場景中尤為突出,每張表格互相之間通過外鍵相互關聯。

其實呢,如果我們把表格中的Header看作各個結點表格內的結點之間存在聯系,而外鍵可以視作一種特殊的邊,這樣就可以構成一張圖,正如下圖中部所示:

 

 

論文[11]就是利用了表格這樣的特性,利用GGNN來解決多表問題。

先看一般的語義解析方法,再介紹[11]是如何將圖跟語義解析系統聯系在一起的。

目前絕大部分語義解析會遵循Seq2seq(序列到序列,Sequence to sequence)的框架,輸入是一個個自然語言單詞,輸出是一個個SQL單詞。但這樣的框架完全沒有考慮到表格對SQL輸出暗含的約束。

比如說,在單個SELECT子句中,我們選擇的若干Header都要來自同一張表。

再舉個例子,能夠JOIN的兩張表一定存在外鍵的聯系,就像我們剛剛舉的那個學生選課的例子一樣。

 

GGN結合到傳統的語義解析方法中的三步:

 

 

 最終該論文在多表上的效果也確實很好,下面放一個在Spider[12]數據集上的性能對比:

 

 

 

GNN與GGNN#

GGNN目前得到了廣泛的應用,相比於GNN,其最大的區別在於不再以不動點理論為基礎

雖然這意味着不再需要迭代收斂,但同時它也意味着GGNN的初始化很重要。

GNN后的大部分工作都轉向了將GNN向傳統的RNN/CNN靠攏,可能的一大好處是這樣可以不斷吸收來自這兩個研究領域的改進。

基於原始GNN的基於不動點理論的工作非常少,至少在看文獻綜述的時候並未發現很相關的工作。

但從另一個角度來看,雖然GNN與GGNN的理論不同,

但從設計哲學上來看,它們都與循環神經網絡的設計類似

  • 循環神經網絡的好處在於能夠處理任意長的序列,但它的計算必須是串行計算若干個時間步,時間開銷不可忽略。所以,上面兩種基於循環的圖神經網絡在更新隱藏狀態時不太高效。如果借鑒深度學習中堆疊多層的成功經驗,我們有足夠的理由相信,多層圖神經網絡能達到同樣的效果。
  • 基於循環的圖神經網絡每次迭代時都共享同樣的參數,而多層神經網絡每一層的參數不同,可以看成是一個層次化特征抽取(Hierarchical Feature Extraction)的方法。

而在下一篇博客中,我們將介紹圖卷積神經網絡。它擺脫了基於循環的方法,開始走向多層圖神經網絡。在多層神經網絡中,卷積神經網絡(比如152層的ResNet)的大獲成功又驗證了其在堆疊多層上訓練的有效性,所以近幾年圖卷積神經網絡成為研究熱點。

 

整篇文章參考博客:

從圖(Graph)到圖卷積(Graph Convolution):漫談圖神經網絡模型 (一) - SivilTaram - 博客園 (cnblogs.com)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM