Graph neural networks-圖神經網路
以下來源於對斯坦福GNN的PPT的翻譯:
http://
snap。stanford。edu/proj/
embeddings-www/files/nrltutorial-part2-gnns。pdf
由embedding到Graph neural networks
1。 Embedding nodes
目標是把原網路的節點投射到Embedding space後,u和v的embedding的相似性要儘可能接近原網路中的任意u, v節點的相似性。
用公式表示是:
這種淺編碼有幾個缺點:
(1)需要O(|V|)個引數。沒有引數共享,每個節點都有它自己獨特的嵌入向量。
(2)無法為沒有在訓練中見過的節點生成嵌入向量。
(3)很多圖有我們可以利用的特徵,淺編碼沒法把節點特徵也反映在嵌入向量裡。
2。 Graph Neural Networks
Graph neural networks是一種用於圖狀資料結構的深度學習網路。
首先,假設我們有一個圖G:
V是節點集合
A是鄰接矩陣(假設是二進位制的)
X∈R^(m*|V|)是節點特徵的矩陣
鄰域聚合
鄰域聚合是根據目標節點的鄰節點來生成目標節點的嵌入向量。
每個節點在每一層都有嵌入向量。
模型可以有任意的深度
第0層的節點u的嵌入向量是它的輸入特徵,即,Xu。
如下圖所示:
左圖是輸入的圖,A點是目標節點。A的嵌入向量由底而上生成。B的鄰節點是A和C,C的鄰節點是ABEF,D的鄰節點是A,B,C,D是A的直接鄰節點。
每個節點都會有獨一無二而的計算網路。
從左至右分別為A,B,C,D,E,F的計算網路
鄰域聚合可以被看成是一個center-surround filter。
各個演算法(如Graphsage, GCN)的主要不同之處就是這些灰色的小盒子的設計(怎麼整合層與層之間的資訊)。
設計一個GNN
設計一個GNN有2步,第一步是確定一個鄰域聚合的函式。第二步是定義一個嵌入向量的損失函式。
在一批已經計算好了的圖上訓練,然後就可以用訓練好的模型為任意節點(沒在訓練中見過的節點也可以)生成嵌入向量啦。
設計一個最基礎的GNN
第一步(確定一個鄰域聚合的函式):平均鄰節點的資訊,然後應用神經網路。
第0層的嵌入向量等於節點特徵。大於0的層:第k層v節點的嵌入向量=非線性函式(比如ReLU或者tanh)*(第k層的權重*鄰節點前一層嵌入向量們的平均值+Bk前一層*前一層v節點的嵌入向量)。Wk和Bk是訓練引數,即網路學習到的東西。
經過K層的鄰域聚合,我們可以得到每個節點的輸出嵌入向量。把這些嵌入向量輸入進損失函式,並且執行stochastic gradient descent(SGD)來得到聚合引數。
第二步(定義一個嵌入向量的損失函式):
(非監督)損失函式可以是基於Random walks (node2vec, DeepWalk); Graph factorization的。即基於某種思想:“訓練的模型讓相似的節點有相似的嵌入向量”
(監督supervised task)的損失函式,如,用於節點分類,是人還是機器,可以用下圖的損失函式:
Inductive Capability
所有節點都共享一樣的聚合引數
模型引數的數量是亞線性於 |V|的,可以一般化到沒見過的節點。
小結
GNN可以透過聚合鄰節點的資訊來產生節點的嵌入向量。它在encoder編碼中,允許引數共享。它也允許歸納學習。
【完】
下一篇:Graph Convolutional Networks (GCN)~關注我~學習更多知識圖譜知識~