圖卷積網絡Graph Convolutional Network ,簡稱GCN ,最近兩年大熱,取得不少進展。最近,清華大學孫茂松教授組在arXiv 發布了論文Graph Neural Networks: A Review of Methods and Applications,作者對現有的 GNN 模型做了詳盡且全 面的綜述。 GCN就是GNN中的一種重要的分支。
1.什么是卷積層Convolution
Convolution的數學定義是:

一般稱g為作用在f上的filter或kernel。

大家常見的CNN二維卷積示意圖如下:

在圖像里面卷積的概念很直接,因為像素點的排列順序有明確的上下左右的位置關系。
2.為什么要有GCN
圖的結構一般來說是十分不規則的,可以認為是無限維的一種數據,所以它沒有平移不變性。而傳統的CNN、RNN是針對有限 的,有平移不變性的,然而,每一個節點的周圍結構可能都是獨一無二的,這種結構的數據,就讓傳統的CNN、RNN瞬間失效。 所以很多學者從上個世紀就開始研究怎么處理這類數據了。這里涌現出了很多方法,例如GNN、DeepWalk、node2vec等等,GCN只是其中一種。
比如這個社交網絡抽象出來的graph里面,有的社交vip會關聯上萬的節點,這些節點沒有空間上的位置關系,也就沒辦法通過上面 給出的傳統卷積公式進行計算。
GCN (圖卷積神經網絡),實際上跟CNN的作用一樣,就是一個特征提取器,只不過它的對象是圖數據。 GCN精妙地設計了一種 從圖數據中提取特征的方法,從而讓我們可以使用這些特征去對圖數據進行節點分類(node classification)、圖分類(graph
classification)、邊預測(link prediction),還可以順便得到圖的嵌入表示(graph embedding)。
3.GCN的核心公式
GCN 的作用實際上和 CNN 差不多,都是一個特征提取器,只不過 GCN 的處理對象更加復雜。 GCN 設計了一種從圖數據當中提 取特征的方法,從而可以應用到對圖數據進行節點分類、圖分類、邊預測、還可以得到圖的嵌入表示。
最終的GCN公式如下:

這個公式中:
A波浪=A+I ,I是單位矩陣
D波浪是A波浪的度矩陣(degree matrix)
H是每一層的特征,對于輸入層的話, H就是X
σ是非線性激活函數
先不用考慮為什么要這樣去設計一個公式。我們現在只用知道:

這個部分是可以事先計算好的就可以了。
所以對于不需要去了解數學原理、只想應用GCN來解決實際問題的人來說,你只用知道:哦,這個GCN設計了一個牛逼的公式, 用這個公式就可以很好地提取圖的特征,而一個神經元包含一個函數和一個激活函數,這個公式就代表是神經元里的函數。這就夠 了,畢竟不是什么事情都需要知道內部原理,這是根據需求決定的。為了直觀理解,我們引用論文中的Zachary空手道俱樂部圖網 絡到特征表征的轉換圖如下:
4.PyTorch簡單實現一個GCN
安裝torch_geometric包。

構建方法:首先繼承MessagePassing類,接下來重寫構造函數和以下三個方法:
1. message() #構建消息傳遞
2. aggregate() #將消息聚合到目標節點
3. update() #更新消息節點
完整代碼如下:
運行結果: