古詩詞大全網 - 成語用法 - GCN卷積網絡入門詳解

GCN卷積網絡入門詳解

在這篇文章中,我們將仔細研究壹個名為GCN的著名圖神經網絡。首先,我們先直觀的了解壹下它的工作原理,然後再深入了解它背後的數學原理。

字幕組雙語原文: GCN圖卷積網絡(GCN)入門詳解

英語原文: Graph Convolutional Networks (GCN)

翻譯: 聽風1996 、 大表哥

許多問題的本質上都是圖。在我們的世界裏,我們看到很多數據都是圖,比如分子、社交網絡、論文引用網絡。

圖的例子。(圖片來自[1])

在圖中,我們有節點特征(代表節點的數據)和圖的結構(表示節點如何連接)。

對於節點來說,我們可以很容易地得到每個節點的數據。但是當涉及到圖的結構時,要從中提取有用的信息就不是壹件容易的事情了。例如,如果2個節點彼此距離很近,我們是否應該將它們與其他對節點區別對待呢?高低度節點又該如何處理呢?其實,對於每壹項具體的工作,僅僅是特征工程,即把圖結構轉換為我們的特征,就會消耗大量的時間和精力。

圖上的特征工程。(圖片來自[1])

如果能以某種方式同時得到圖的節點特征和結構信息作為輸入,讓機器自己去判斷哪些信息是有用的,那就更好了。

這也是為什麽我們需要圖表示學習的原因。

我們希望圖能夠自己學習 "特征工程"。(圖片來自[1])

論文 :基於圖神經網絡的半監督分類 (2017)[3]

GCN是壹種卷積神經網絡,它可以直接在圖上工作,並利用圖的結構信息。

它解決的是對圖(如引文網絡)中的節點(如文檔)進行分類的問題,其中僅有壹小部分節點有標簽(半監督學習)。

在Graphs上進行半監督學習的例子。有些節點沒有標簽(未知節點)。

就像"卷積"這個名字所指代的那樣,這個想法來自於圖像,之後引進到圖(Graphs)中。然而,當圖像有固定的結構時,圖(Graphs)就復雜得多。

從圖像到圖形的卷積思想。 (圖片來自[1])

GCN的基本思路:對於每個節點,我們從它的所有鄰居節點處獲取其特征信息,當然也包括它自身的特征。假設我們使用average()函數。我們將對所有的節點進行同樣的操作。最後,我們將這些計算得到的平均值輸入到神經網絡中。

在下圖中,我們有壹個引文網絡的簡單實例。其中每個節點代表壹篇研究論文,同時邊代表的是引文。我們在這裏有壹個預處理步驟。在這裏我們不使用原始論文作為特征,而是將論文轉換成向量(通過使用NLP嵌入,例如tf-idf)。NLP嵌入,例如TF-IDF)。

讓我們考慮下綠色節點。首先,我們得到它的所有鄰居的特征值,包括自身節點,接著取平均值。最後通過神經網絡返回壹個結果向量並將此作為最終結果。

GCN的主要思想。我們以綠色節點為例。首先,我們取其所有鄰居節點的平均值,包括自身節點。然後,將平均值通過神經網絡。請註意,在GCN中,我們僅僅使用壹個全連接層。在這個例子中,我們得到2維向量作為輸出(全連接層的2個節點)。

在實際操作中,我們可以使用比average函數更復雜的聚合函數。我們還可以將更多的層疊加在壹起,以獲得更深的GCN。其中每壹層的輸出會被視為下壹層的輸入。

2層GCN的例子:第壹層的輸出是第二層的輸入。同樣,註意GCN中的神經網絡僅僅是壹個全連接層(圖片來自[2])。

讓我們認真從數學角度看看它到底是如何起作用的。

首先,我們需要壹些註解

我們考慮圖G,如下圖所示。

從圖G中,我們有壹個鄰接矩陣A和壹個度矩陣D。同時我們也有特征矩陣X。

那麽我們怎樣才能從鄰居節點處得到每壹個節點的特征值呢?解決方法就在於A和X的相乘。

看看鄰接矩陣的第壹行,我們看到節點A與節點E之間有連接,得到的矩陣第壹行就是與A相連接的E節點的特征向量(如下圖)。同理,得到的矩陣的第二行是D和E的特征向量之和,通過這個方法,我們可以得到所有鄰居節點的向量之和。

計算 "和向量矩陣 "AX的第壹行。

在問題(1)中,我們可以通過在A中增加壹個單位矩陣I來解決,得到壹個新的鄰接矩陣?。

取lambda=1(使得節點本身的特征和鄰居壹樣重要),我們就有?=A+I,註意,我們可以把lambda當做壹個可訓練的參數,但現在只要把lambda賦值為1就可以了,即使在論文中,lambda也只是簡單的賦值為1。

通過給每個節點增加壹個自循環,我們得到新的鄰接矩陣

對於問題(2): 對於矩陣縮放,我們通常將矩陣乘以對角線矩陣。在當前的情況下,我們要取聚合特征的平均值,或者從數學角度上說,要根據節點度數對聚合向量矩陣?X進行縮放。直覺告訴我們這裏用來縮放的對角矩陣是和度矩陣D?有關的東西(為什麽是D?,而不是D?因為我們考慮的是新鄰接矩陣? 的度矩陣D?,而不再是A了)。

現在的問題變成了我們要如何對和向量進行縮放/歸壹化?換句話說:

我們如何將鄰居的信息傳遞給特定節點?我們從我們的老朋友average開始。在這種情況下,D?的逆矩陣(即,D?^{-1})就會用起作用。基本上,D?的逆矩陣中的每個元素都是對角矩陣D中相應項的倒數。

例如,節點A的度數為2,所以我們將節點A的聚合向量乘以1/2,而節點E的度數為5,我們應該將E的聚合向量乘以1/5,以此類推。

因此,通過D?取反和X的乘法,我們可以取所有鄰居節點的特征向量(包括自身節點)的平均值。

到目前為止壹切都很好。但是妳可能會問加權平均()怎麽樣?直覺上,如果我們對高低度的節點區別對待,應該會更好。

但我們只是按行縮放,但忽略了對應的列(虛線框)。

為列增加壹個新的縮放器。

新的縮放方法給我們提供了 "加權 "的平均值。我們在這裏做的是給低度的節點加更多的權重,以減少高度節點的影響。這個加權平均的想法是,我們假設低度節點會對鄰居節點產生更大的影響,而高度節點則會產生較低的影響,因為它們的影響力分散在太多的鄰居節點上。

在節點B處聚合鄰接節點特征時,我們為節點B本身分配最大的權重(度數為3),為節點E分配最小的權重(度數為5)。

因為我們歸壹化了兩次,所以將"-1 "改為"-1/2"

例如,我們有壹個多分類問題,有10個類,F 被設置為10。在第2層有了10個維度的向量後,我們將這些向量通過壹個softmax函數進行預測。

Loss函數的計算方法很簡單,就是通過對所有有標簽的例子的交叉熵誤差來計算,其中Y_{l}是有標簽的節點的集合。

層數是指節點特征能夠傳輸的最遠距離。例如,在1層的GCN中,每個節點只能從其鄰居那裏獲得信息。每個節點收集信息的過程是獨立進行的,對所有節點來說都是在同壹時間進行的。

當在第壹層的基礎上再疊加壹層時,我們重復收集信息的過程,但這壹次,鄰居節點已經有了自己的鄰居的信息(來自上壹步)。這使得層數成為每個節點可以走的最大跳步。所以,這取決於我們認為壹個節點應該從網絡中獲取多遠的信息,我們可以為#layers設置壹個合適的數字。但同樣,在圖中,通常我們不希望走得太遠。設置為6-7跳,我們就幾乎可以得到整個圖,但是這就使得聚合的意義不大。

例: 收集目標節點 i 的兩層信息的過程

在論文中,作者還分別對淺層和深層的GCN進行了壹些實驗。在下圖中,我們可以看到,使用2層或3層的模型可以得到最好的結果。此外,對於深層的GCN(超過7層),反而往往得到不好的性能(虛線藍色)。壹種解決方案是借助隱藏層之間的殘余連接(紫色線)。

不同層數#的性能。圖片來自論文[3]

論文作者的說明

該框架目前僅限於無向圖(加權或不加權)。但是,可以通過將原始有向圖表示為壹個無向的兩端圖,並增加代表原始圖中邊的節點,來處理有向邊和邊特征。

對於GCN,我們似乎可以同時利用節點特征和圖的結構。然而,如果圖中的邊有不同的類型呢?我們是否應該對每種關系進行不同的處理?在這種情況下如何聚合鄰居節點?最近有哪些先進的方法?

在圖專題的下壹篇文章中,我們將研究壹些更復雜的方法。

如何處理邊的不同關系(兄弟、朋友、......)?

[1] Excellent slides on Graph Representation Learning by Jure Leskovec (Stanford):

[5] Demo with StellarGraph library: -node-classification.html

雷鋒字幕組是壹個由AI愛好者組成的翻譯團隊,匯聚五五多位誌願者的力量,分享最新的海外AI資訊,交流關於人工智能技術領域的行業轉變與技術創新的見解。

團隊成員有大數據專家,算法工程師,圖像處理工程師,產品經理,產品運營,IT咨詢人,在校師生;誌願者們來自IBM,AVL,Adobe,阿裏,百度等知名企業,北大,清華,港大,中科院,南卡羅萊納大學,早稻田大學等海內外高校研究所。

如果,妳也是位熱愛分享的AI愛好者。歡迎與雷鋒字幕組壹起,學習新知,分享成長。