如何利用圖卷積網路對圖進行深度學習(下)
- 2020 年 2 月 23 日
- 筆記
編輯 | sunllei 發布 | ATYUN訂閱號
把所有的東西放在一起

我們現在結合了自循環和規範化技巧。此外,我們將重新引入我們先前丟棄的權重和激活函數,以簡化討論。
把權重加回來
首先要做的是計算權重。注意,這裡D_hat是A_hat = A + I的次數矩陣,即,具有強制自循環的A的度矩陣。
In [45]: W = np.matrix([ [1, -1], [-1, 1] ]) D_hat**-1 * A_hat * X * W Out[45]: matrix([ [ 1., -1.], [ 4., -4.], [ 2., -2.], [ 5., -5.] ])
如果我們想降低輸出特徵表示的維數,我們可以減小權重矩陣W的大小:
In [46]: W = np.matrix([ [1], [-1] ]) D_hat**-1 * A_hat * X * W Out[46]: matrix([[1.], [4.], [2.], [5.]] )
添加激活函數
我們選擇保留特徵表示的維數,並應用ReLU激活函數。
In [51]: W = np.matrix([ [1, -1], [-1, 1] ]) relu(D_hat**-1 * A_hat * X * W) Out[51]: matrix([[1., 0.], [4., 0.], [2., 0.], [5., 0.]])
瞧!一個完整的隱含層與鄰接矩陣,輸入特徵,權值和激活功能!
回到現實

現在,最後,我們可以將圖卷積網路應用於實圖。我將向您展示如何生成我們在文章早期看到的功能表示。
Zachary空手道俱樂部
Zachary空手道俱樂部是一個常用的社交網路,其中的節點代表空手道俱樂部的成員,並邊緣他們的相互關係。在空手道俱樂部學習時,管理者和教練發生了衝突,導致俱樂部一分為二。下圖顯示了網路的圖形表示,節點根據俱樂部的哪個部分進行標記。管理員和講師分別標有「A」和「I」。

Zachary空手道俱樂部
建立GCN
現在讓我們建立圖卷積網路。我們實際上不會訓練網路,只是隨機初始化它,以生成我們在本文開頭看到的特性表示。我們將使用networkx,它有一個容易獲得的俱樂部的圖形表示,並計算A_hat和D_hat矩陣。
from networkx import karate_club_graph, to_numpy_matrix zkc = karate_club_graph() order = sorted(list(zkc.nodes())) A = to_numpy_matrix(zkc, nodelist=order) I = np.eye(zkc.number_of_nodes()) A_hat = A + I D_hat = np.array(np.sum(A_hat, axis=0))[0] D_hat = np.matrix(np.diag(D_hat))
接下來,我們將隨機初始化權值。
W_1 = np.random.normal( loc=0, scale=1, size=(zkc.number_of_nodes(), 4)) W_2 = np.random.normal( loc=0, size=(W_1.shape[1], 2))
堆疊GCN層。這裡我們只使用身份矩陣作為特徵表示,即每個節點被表示為一個熱編碼的分類變數。
def gcn_layer(A_hat, D_hat, X, W): return relu(D_hat**-1 * A_hat * X * W) H_1 = gcn_layer(A_hat, D_hat, I, W_1) H_2 = gcn_layer(A_hat, D_hat, H_1, W_2) output = H_2
我們提取特徵表示。
feature_representations = { node: np.array(output)[node] for node in zkc.nodes()}
瞧!將Zachary空手道俱樂部的社區很好地分隔開的特徵表示。我們還沒開始訓練呢!

Zachary空手道俱樂部節點的特徵表示
我應該注意的是,對於這個例子,隨機初始化的權重很可能在X或Y軸上給出0個值作為Relu函數的結果,因此需要幾個隨機初始化來產生上面的圖。
結論

在這篇文章中,我對圖卷積網路做了一個高級的介紹,並說明了GCN中每一層節點的特徵表示是如何基於其鄰域的集合的。我們看到了如何使用numpy來構建這些網路,以及它們是多麼強大:即使是隨機初始化的GCNs也可以在Zachary的空手道俱樂部中社區分離。
參考文獻
[1] Thomas Kipf關於圖形卷積網路的部落格文章。
[2] 論文Thomas-Kipf和Max-Welling將圖卷積網路稱為半監督分類。
原文鏈接:
https://towardsdatascience.com/how-to-do-deep-learning-on-graphs-with-graph-convolutional-networks-7d2250723780

