Graph
在學習GNN之前,先讓我們瞭解一下什麼是Graph。在電腦科學中,graph是一種資料結構,由兩部分組成,頂點和邊。圖G可以通過頂點集V和邊集E來描述:
根據頂點之間是否有方向,邊可以分為無向和有向。
有向圖
頂點又稱節點,本文中兩者可以互換。
Graph Neural Network
GNN是直接在圖資料結構上執行的神經網路。GNN的典型應用便是節點分類。圖中的每個節點都有一個標籤,我們希望不需要標註資料,可以預測新的節點標籤。本節將講解論文《The graph neural network model》中的GNN演算法,算得上第一個GNN。
在節點分類問題中,每個節點v的特徵用xv表示,並且和標籤tv相關聯。給定部分標記的圖G,目標是利用這些標記的節點來預測未標記節點的標籤。網路學會用d維向量(狀態)hv表示每個節點,其中包含其鄰域資訊。
其中,xco[v]表示與v連線的邊的特徵,hne[v]表示v的相鄰節點嵌入特徵,xne[v]表示v的相鄰節點的特徵。函式f是將這些輸入投影到d維空間的傳遞函式。由於我們正在尋找hv的唯一解,可以應用Banach不動點定理並將上述等式重寫為迭代更新過程。
H和X分別表示所有h和x的連線。通過將狀態hv以及特徵xv傳遞給輸出函式g來計算GNN的輸出。
f和這裡的g都可以解釋為前饋全連線神經網路。 L1損失可以直接表述如下:
再通過梯度下降優化。上述的GNN演算法有三個限制:
1、如果放寬“固定點”的假設,可以利用多層感知機來學習更穩定的表示,並刪除迭代更新過程。這是因為,在該提議中,不同的迭代使用傳遞函式f的相同引數,而不同MLP層中的不同引數允許分層特徵提取。
2、它不能處理邊資訊(例如知識圖中的不同邊可能表示節點之間的不同關係)。
3、固定點可以阻止節點分佈的多樣化,因此可能不適合學習表示節點。
當然,已經有幾種GNN的變體來解決上述問題,我在這裡不展開講解了。
DeepWalk
DeepWalk是以無監督的方式學習node embedding的演算法。它的訓練過程非常類似word embedding。動機是圖表中的節點和語料庫中的單詞的分佈遵循冪定律,如下圖所示:
演算法包括兩個步驟:
1、在圖中的節點上進行隨機遊走以生成節點序列;
2、使用skip-gram,根據步驟1中生成的節點序列學習每個節點的嵌入。
在隨機遊走的每個時間步驟,從前一節點的鄰居統一取樣下一個節點。然後將每個序列截短為長度為2|w|+1的子序列,其中w表示skip-gram中的視窗大小。
在提出DeepWalk的論文中,分層softmax用於解決由於節點數量龐大而導致的softmax計算成本高昂的問題。為了計算每個單獨輸出元素的softmax值,我們必須計算所有元素k的所有exk。
因此,原始softmax的計算時間為O(|V|),其中V表示圖中的頂點集。
分層softmax利用二叉樹來處理問題。在這個二叉樹中,所有葉子(上圖中的v1,v2,..., v8)都是圖中的頂點。在每個內部節點中,有一個二元分類器來決定選擇哪條路徑。為了計算給定頂點vk的概率,可以簡單地計算沿著從根節點到離開vk的路徑中的每個子路徑的概率。由於每個節點的子概率為1,因此所有頂點的概率之和等於1的特性仍然保持在分層softmax中。現在,元素的計算時間減少到O(log|V|),因為二叉樹的最長路徑由O(log|n|)限定,其中是n葉子的數量。
分層Softmax
在訓練DeepWalk GNN之後,模型已經學習了每個節點的良好表示,如下圖所示。不同的顏色表示輸入圖中的不同標籤。我們可以看到,在輸出圖形(嵌入2維)中,具有相同標籤的節點聚集在一起,而具有不同標籤的大多數節點被正確分開。
然而,DeepWalk的主要問題是缺乏泛化能力。每當有新節點加入時,它必須重新訓練模型以表示該節點。因此,這種GNN不適用於圖中節點不斷變化的動態圖。
GraphSage
GraphSage提供解決上述問題的方案,以歸納方式學習每個節點的嵌入。具體而言,每個節點由其鄰域的聚合表示。因此,即使在訓練時間內看不到的新節點出現在圖中,它仍然可以由其相鄰節點正確地表示。下面顯示了GraphSage的演算法。
外層迴圈表示更新迭代次數,而hvk表示更新迭代k時節點v的特徵。在每次更新迭代時,基於聚合函式,前一次迭代中v和v鄰域的特徵以及權重矩陣Wk來更新hvk。本文提出了三種聚合函式:
1. Mean aggregator
平均聚合器獲取節點及其所有鄰域的特徵的平均值。
與原始方程相比,它刪除了上述虛擬碼中第5行的連線操作。此操作可以被視為“跳過連線”,本文稍後將證明可以在很大程度上提高模型的效能。
2. LSTM aggregator
由於圖中的節點沒有任何順序,因此它們通過置換這些節點來隨機分配順序。
3. Pooling aggregator
此運算子在相鄰集上執行逐元素池化功能。下面顯示了max-pooling示例:
可以用mean-pooling或任何其他對稱池化函式替換。文章指出pooling aggregator執行最佳,而mean-pooling和max-pooling具有相似的效能。本文使用max-pooling作為預設聚合函式。
損失函式定義如下:
其中u和v共同出現在固定長度的隨機遊走中,而vn是不與u共同出現的負樣本。這種損失函式鼓勵具有類似嵌入的節點更接近,而那些相距很遠的節點在投影空間中分離。通過這種方法,節點將獲得越來越多關於其鄰域的資訊。
GraphSage通過聚合其附近的節點,可以為看不見的節點生成可表示的嵌入。它允許將節點嵌入應用於涉及動態圖的域,其中圖的結構不斷變化。例如,Pinterest採用了GraphSage的擴充套件版本PinSage作為其內容發現系統的核心。
總結
我們已經學習了圖形神經網路,DeepWalk和GraphSage的基礎知識。 GNN在複雜圖形結構建模中的強大功能確實令人驚訝。鑑於其有效性,我相信,在不久的將來,GNN將在人工智慧的發展中發揮重要作用。
相關參考
原文連結:
https://towardsdatascience.com/a-gentle-introduction-to-graph-neural-network-basics-deepwalk-and-graphsage-db5d540d50b3
參考論文:
https://arxiv.org/pdf/1812.08434.pdf
http://www.perozzi.net/publications/14_kdd_deepwalk.pdf
https://www-cs-faculty.stanford.edu/people/jure/pubs/graphsage-nips17.pdf
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.1015.7227&rep=rep1&type=pdf