字幕組雙語原創:GCN圖卷積網絡介紹(GCN)
原英語:圖形非自願網絡(GCN)
聽風1996,大表哥
很多問題本質上都是圖。在我們的世界裏,我們看到很多數據都是圖,比如分子,社交網絡,論文引用網絡。
圖表示例。(圖片來自[1])
在圖中,我們有節點的特征(表示節點的數據)和圖的結構(表示節點是如何連接的)。
對於節點,我們可以很容易的得到每個節點的數據。但是當涉及到圖的結構時,要從中提取有用的信息並不容易。比如兩個節點距離很近,是否應該和其他節點對區別對待?高低節點怎麽處理?其實對於每壹個具體的工作,只是特征工程,也就是把圖的結構轉化成我們的特征,會消耗大量的時間和精力。
圖形特征工程。(圖片來自[1])
如果能以某種方式獲取圖的節點特征和結構信息作為輸入,讓機器判斷哪些信息有用就更好了。
這就是為什麽我們需要圖形表示學習。
我們希望塗能自學“特征工程”。(圖片來自[1])
論文:基於圖神經網絡的半監督分類(2017)[3]
GCN是壹種卷積神經網絡,它可以直接在圖上工作,並利用圖的結構信息。
它解決了圖(如引文網絡)中節點(如文檔)的分類問題,只對少量節點進行標記(半監督學習)。
圖上半監督學習的壹個例子。壹些節點沒有標簽(未知節點)。
正如“卷積”這個名字所指,這個想法來源於圖像,後來被引入到圖形中。然而,當圖像具有固定的結構時,圖就復雜得多。
從圖像到圖形的卷積思想。(圖片來自[1])
GCN的基本思想:對於每個節點,我們從它所有的鄰居那裏獲得它的特征信息,包括它自己的特征。假設我們使用average()函數。我們將對所有節點進行同樣的操作。最後,我們將這些計算的平均值輸入到神經網絡中。
在下圖中,我們有壹個簡單的引用網絡的例子。每個節點代表壹篇研究論文,邊代表壹篇引文。我們在這裏有壹個預處理步驟。這裏我們不用原紙作為特征,而是把紙轉換成向量(通過使用NLP嵌入,比如tf-idf)。NLP嵌入,比如TF-IDF)。
讓我們考慮綠色節點。首先我們得到它所有鄰居的特征值,包括我們自己的節點,然後取平均值。最後,通過神經網絡返回壹個結果向量作為最終結果。
GCN的主要思想。讓我們以綠色節點為例。首先,我們取它所有鄰居的平均值,包括我們自己的節點。然後,平均值通過神經網絡。請註意,在GCN,我們只使用壹個全連接層。在這個例子中,我們得到壹個二維向量作為輸出(全連接層的兩個節點)。
在實踐中,我們可以使用比平均函數更復雜的聚合函數。我們也可以將更多的層堆疊在壹起,以獲得更深的GCN。每壹層的輸出將被視為下壹層的輸入。
兩層GCN的例子:第壹層的輸出是第二層的輸入。同樣,註意GCN的神經網絡只是壹個完全連接的層(圖片來自[2])。
讓我們從數學的角度認真看看它是如何工作的。
首先,我們需要壹些筆記。
我們來考慮圖G,如下圖所示。
從圖g中,我們有壹個鄰接矩陣a和壹個度矩陣d,同時,我們還有特征矩陣x。
那麽如何才能從相鄰節點得到每個節點的特征值呢?解決方法在於a和x的相乘。
看鄰接矩陣的第壹行,我們可以看到節點A和節點E之間有連接,矩陣的第壹行是節點E與A連接的特征向量(如下圖)。同樣,得到的矩陣的第二行是D和e的特征向量之和,通過這種方法,我們可以得到所有鄰居節點的向量之和。
計算“和向量矩陣”的第壹行AX。
在問題(1)中,我們可以通過在A上加壹個單位矩陣I來求解,得到壹個新的鄰接矩陣?。
取lambda=1(讓節點本身的特征和鄰居壹樣重要),我們有?=A+I,註意我們可以把lambda看成壹個可訓練參數,但是現在我們只需要把lambda賦值為1。即使在論文中,lambda也被簡單地賦值為1。
通過給每個節點添加壹個自循環,我們得到壹個新的鄰接矩陣。
對於問題(2):對於矩陣縮放,我們通常將矩陣乘以對角矩陣。在目前的情況下,應該取聚合特征的平均值,還是數學上應該根據節點的度來比較聚合向量矩陣?x縮放。直覺告訴我們,這裏用於縮放的對角矩陣是和矩陣d?相關的事情(為什麽d?,不是d?因為我們在考慮壹個新的鄰接矩陣?度矩陣d?,而不再是壹個)。
現在的問題變成了我們如何縮放/歸壹化和向量?換句話說:
我們如何將鄰居的信息傳遞給特定的節點?先說老朋友平均。在這種情況下,d?(即d的逆矩陣?{-1})就可以了。基本上,d?的逆矩陣中的每個元素都是對角矩陣d中對應項的倒數。
比如節點A的度是2,那麽我們把節點A的聚合向量乘以1/2,節點E的度是5,那麽就要把E的聚合向量乘以1/5,以此類推。
因此,通過d?把倒數和x相乘,我們就可以取所有鄰居節點(包括我們自己的節點)的特征向量的平均值。
到目前為止,壹切都很好。但是妳可能會問加權平均()呢?直觀上來說,區別對待高低度的節點應該更好。
但是我們只按行縮放,而忽略了相應的列(虛線框)。
向列中添加新的定標器。
新的縮放方法為我們提供了壹個“加權”平均值。我們在這裏做的是給低級別節點更多的權重,以減少高級別節點的影響。這種加權平均的思想是,我們假設低級別節點對鄰居節點的影響會更大,而高級別節點的影響會更小,因為它們的影響分散在太多的鄰居節點上。
當在節點B聚集相鄰節點的特征時,我們將最大權重(度3)分配給節點B本身,將最小權重(度5)分配給節點E..
因為我們規範化了兩次,所以把“-1”改成了“-1/2”。
比如我們有壹個10類的多分類問題,f設為10。在層2中有10維向量後,我們通過softmax函數預測這些向量。
損失函數的計算方法很簡單,就是用所有標記樣本的交叉熵誤差來計算,其中Y_{l}是標記節點的集合。
圖層數是指結點要素可以傳輸的最遠距離。例如,在1層GCN中,每個節點只能從它的鄰居那裏獲得信息。每個節點收集信息的過程是獨立的,所有節點都是同時完成的。
當壹層疊加在第壹層上時,我們重復收集信息的過程,但這壹次,鄰居節點已經有了自己的鄰居信息(來自上壹步)。這使得層數成為每個節點可以進行的最大跳躍。因此,根據我們認為壹個節點應該從網絡獲取信息的程度,我們可以為#layers設置壹個適當的數量。但同樣,在圖片中,我們通常不想走得太遠。設置為6-7跳,我們幾乎可以得到整個圖,但這使得聚合沒有意義。
示例:收集目標節點I的兩層信息的過程
本文還分別對淺層和深層GCN進行了實驗。在下圖中,我們可以看到使用2層或3層模型可以獲得最佳結果。此外,對於深GCN(超過7層),它通常得到較差的性能(藍色虛線)。壹種解決方案是使用隱藏層之間的剩余連接(紫色線)。
#不同層的性能#。圖片來自報紙[3]
論文作者的說明
這個框架目前僅限於無向圖(加權或未加權)。但是,我們可以通過將原始有向圖表示為無向二分圖,並在原始圖中添加表示邊的節點,來處理有向邊和邊特征。
對於GCN,似乎我們可以同時利用節點特征和圖結構。但是,如果圖中有不同類型的邊呢?我們是否應該區別對待每壹段感情?這種情況下如何聚合鄰居節點?最近有什麽先進的方法?
在下壹篇關於圖形主題的文章中,我們將研究壹些更復雜的方法。
如何處理不同的關系(兄弟,朋友,...)?
[1]Jure Leskovec(斯坦福)關於圖形表示學習的精彩幻燈片:
[5]使用StellarGraph庫的演示:-node-classification.html
雷鋒字幕組是壹個由AI愛好者組成的翻譯團隊,匯集了五位以上誌願者的力量,分享海外最新的AI資訊,交流人工智能技術領域的產業變革和技術創新。
團隊成員包括大數據專家、算法工程師、圖像處理工程師、產品經理、產品運營、IT顧問、在校師生;誌願者來自IBM、AVL、Adobe、阿裏、百度等知名企業,以及北大、清華、港大、中科院、南卡羅來納大學、早稻田大學等國內外高校的科研院所。
如果,妳也是壹個愛分享的AI愛好者。歡迎和雷鋒字幕組壹起學習新知識,分享成長。