1. 程式人生 > 實用技巧 >如何使用圖卷積網路對圖進行深度學習

如何使用圖卷積網路對圖進行深度學習

在高度複雜的資訊圖結構上進行機器學習是困難的。

圖卷積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=float
7 )

接下來是特徵的表示:

我們基於他們的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. 度比較大的節點特徵表示可能也比較大,會造成梯度的小時和爆炸;——歸一化處理