如何使用圖卷積網路對圖進行深度學習
在高度複雜的資訊圖結構上進行機器學習是困難的。
圖卷積GCN是一種神經網路,可以被用於直接在圖上進行工作,同時也藉助了他們的結構資訊。
接下來,將介紹GCN以及資訊是如何通過GCN的隱藏層進行傳播的,以及這個機制如何生成有用的特徵表示的。
首先介紹一下,什麼是圖神經網路?
圖神經網路是個在圖上學習的一種網路架構。事實上,它們非常強大,即使是一個隨機啟動的兩層GCN也可以產生網路中節點的有用特徵表示。
舉個例子:左側是真實的網路結構,右側是圖的節點特徵表示
圖卷積網路(GCN)是一種對圖進行操作的神經網路。給定一個圖G = (V, E), GCN的輸入為:
- 輸入特徵矩陣X:N*F, 特徵矩陣X。N表示的是節點的數量;F是每個節點的輸入特徵數量;
- 鄰接矩陣A: N*N矩陣表示的是圖結構,也即用A來表徵。
- 隱藏層H:表示的是特徵矩陣。每層的H可以被寫作
值得注意的是,H0,即第一層的特徵矩陣就是輸入的X;
f表示的是一種propagation rule,即傳播規則。
每個H對應的是N*F特徵矩陣,每行都是一個節點的特徵表示;
在這種方式下,特徵就會變得越來越抽象在每個連續層。
在這種框架下,不同GCN的變化唯一不同的是propagation rule的變化;即傳播規則的變化;
最簡單的傳播規則
一個最簡單的傳播規則定義如下:
W是權重矩陣;維度Fi*Fi+1 也就是,權重矩陣決定了下一層特徵表示的維度;
sigma是啟用函式,比如RELU函式;
最簡單的版本
- i=1的時候,f就是輸入特徵矩陣的函式
- sig可以是一個恆等函式,
- 選擇權重,可以是AHW=AXW=AX
換句話而言,f(X,A) = AX; 這個傳播規則未免有些太簡單了。接下來會講一些更為複雜的傳播規則;
另一方面,AX現在等同於一個多層感知機的輸入層;
一個簡單的有向圖的例子
可以使用numpy鄰接矩陣表示:
1 A = np.matrix([ 2 [0, 1, 0, 0], 3 [0, 0, 1, 1], 4 [0, 1, 0, 0], 5 [1, 0, 1, 0]], 6 dtype=float7 )
接下來是特徵的表示:
我們基於他們的index生成兩個特徵,這樣可以方便我們接下來手動計算檢驗
1 X = np.matrix([ 2 [i, -i] 3 for i in range(A.shape[0]) 4 ], dtype=float)
X Out[6]: matrix([[ 0., 0.], [ 1., -1.], [ 2., -2.], [ 3., -3.]])
應用傳播規則:
我們現在有了一個圖,有了鄰接矩陣A,以及一系列的輸入X,接下來可以應用傳播規則:
1 A * X 2 Out[7]: 3 matrix([[ 1., -1.], 4 [ 5., -5.], 5 [ 1., -1.], 6 [ 2., -2.]])
現在,所有的節點表示是它每個鄰居節點的求和;
換句話說,圖卷積層將每個節點表示成每個鄰居節點的聚合;
注意的是,一個節點n是一個節點v的鄰居,需要存在一個邊從v到n。也就是流出方向矩陣。
這樣做的問題及改進:
1. 這個表示沒有包括自身——A+I;
2. 度比較大的節點特徵表示可能也比較大,會造成梯度的小時和爆炸;——歸一化處理