【GNN】谷歌、阿里、騰訊等在大規(guī)模圖神經(jīng)網(wǎng)絡上必用的GNN加速算法

點擊上方,選擇星標或置頂,每天給你送上干貨

作者 | 對白
出品 | 對白的算法屋
今天我們來聊一聊在大規(guī)模圖神經(jīng)網(wǎng)絡上必用的GNN加速算法。GNN在圖結(jié)構(gòu)的任務上取得了很好的結(jié)果,但由于需要將圖加載到內(nèi)存中,且每層的卷積操作都會遍歷全圖,對于大規(guī)模的圖,需要的內(nèi)存和時間的開銷都是不可接受的。
現(xiàn)有一些用于加速GNN的算法,基本思路是使用mini-batch來計算,用min-batch的梯度估計full-batch的梯度,通過多次迭代達到基本一致的效果。
根據(jù)使用的方法不同,大致分為以下三類:
Neighbor sampling
Layer-wise sampling
Subgraph sampling
1.Neighbor sampling
1.1 GraphSage
論文標題:Inductive Representation Learning on Large Graphs
論文來源:NIPS2017
論文方向:圖表示學習
論文鏈接:https://arxiv.org/abs/1706.02216

GraphSAGE 是 2017 年提出的一種圖神經(jīng)網(wǎng)絡算法,解決了 GCN 網(wǎng)絡的局限性: GCN 訓練時需要用到整個圖的鄰接矩陣,依賴于具體的圖結(jié)構(gòu),一般只能用在直推式學習 Transductive Learning。GraphSAGE 使用多層聚合函數(shù),每一層聚合函數(shù)會將節(jié)點及其鄰居的信息聚合在一起得到下一層的特征向量,GraphSAGE 采用了節(jié)點的鄰域信息,不依賴于全局的圖結(jié)構(gòu)。
GraphSAGE 的運行流程如上圖所示,可以分為三個步驟:
1、對圖中每個頂點鄰居頂點進行采樣;
2、根據(jù)聚合函數(shù)聚合鄰居頂點蘊含的信息;
3、得到圖中各頂點的向量表示供下游任務使用;

出于對計算效率的考慮,對每個頂點采樣一定數(shù)量的鄰居頂點作為待聚合信息的頂點。設采樣數(shù)量為k,若頂點鄰居數(shù)少于k,則采用有放回的抽樣方法,直到采樣出k個頂點。若頂點鄰居數(shù)大于k,則采用無放回的抽樣。
即為每個結(jié)點均勻地抽樣固定數(shù)量的鄰居結(jié)點,使用Batch去訓練。
復雜度正比于卷積層數(shù)
1.2 ScalableGCN
阿里媽媽的Euler中使用的加速算法,主要思想是用空間換時間。對于
同時也開辟存儲空間


我們在兩個開源的數(shù)據(jù)集Reddit和PPI上驗證了我們的工作。由于GraphSAGE的簡單和通用性,我們選擇其為baseline。并且為了對齊與其論文中的實驗結(jié)果,我們在共享了GraphSAGE和ScalableGCN代碼中的大多數(shù)模塊,并利用Tensorflow中的Variable存儲
和
,使用累加作為算子。
我們使用均勻分布來初始化
,并將
初始化為0。對于每階的卷積操作,我們采樣10個鄰接頂點。所有的實驗均使用512的batch size訓練20個epoch。在評估階段,我們統(tǒng)一維持GraphSAGE的方法進行Inference。以下是選擇Mean作為AGG函數(shù)的micro-F1 score:
PPI:
| 層數(shù) | 算法 | Micro-F1 |
|---|---|---|
| 1層 | GraphSAGE | 0.47196 |
| 2層 | GraphSAGE | 0.58476 |
| 2層 | ScalableGCN | 0.57746 |
| 3層 | GraphSAGE | 0.63796 |
| 3層 | ScalableGCN | 0.63402 |
Reddit:
| 層數(shù) | 算法 | Micro-F1 |
|---|---|---|
| 1層 | GraphSAGE | 0.91722 |
| 2層 | GraphSAGE | 0.94150 |
| 2層 | ScalableGCN | 0.93843 |
| 3層 | GraphSAGE | 0.94816 |
| 3層 | ScalableGCN | 0.94331 |
可以看到ScalableGCN訓練出來模型與GraphSAGE的訓練結(jié)果相差很小,同時可以取得多層卷積模型的收益。
在時間上,以下是8 core的機器上Reddit數(shù)據(jù)集(23萬頂點)每個mini-batch所需的訓練時間:
| 1層 | GraphSAGE | 0.013 |
| 2層 | GraphSAGE | 0.120 |
| 2層 | ScalableGCN | 0.026 |
| 3層 | GraphSAGE | 1.119 |
| 3層 | ScalableGCN | 0.035 |
注意到ScalableGCN的訓練時間相對于卷積模型層數(shù)來說是線性的。
總結(jié):
GCN是目前業(yè)界標準的網(wǎng)絡圖中特征抽取以及表示學習的方法,未來在搜索、廣告、推薦等場景中有著廣泛的應用。多階的GCN的支持提供了在圖中挖掘多階關系的能力。ScalableGCN提出了一種快速訓練多階GCN的方法,可以有效的縮短多階GCN的訓練時間,并且適用于大規(guī)模的稀疏圖。本方法與對采樣進行裁剪和共享的方法也并不沖突,可以同時在訓練中使用
1.3 VR-GCN

論文標題:Stochastic Training of Graph Convolutional Networks with Variance Reduction
論文來源:ICML2018
論文方向:圖卷積網(wǎng)絡
論文鏈接:https://arxiv.org/abs/1706.02216
主要思路:利用結(jié)點歷史表示

使用蒙特卡方法來洛近似
因此其矩陣表示為:

該算法具有理論保障,可以獲得0偏差和0方差的結(jié)果,且無論每層鄰居結(jié)點的抽樣個數(shù)
因此每個結(jié)點僅僅采樣兩個鄰居,極大提升模型訓練效率的同時,也能保證獲得良好的模型效果。
2.1 FastGCN

論文標題:FastGCN: fast learning with graph convolutional networks via importance sampling
論文來源:ICLR2018
論文方向:圖卷積網(wǎng)絡
論文鏈接:https://arxiv.org/abs/1801.10247

從積分的角度看待圖卷積,假設圖是無限大圖的子集,所有結(jié)點為獨立同分布的結(jié)點,滿足


則可以應用蒙特卡洛法,對每一層進行采樣

此外為了減少估計方差(Variance Reduction),采用重要性采樣(Importance samling),結(jié)點根據(jù)以下概率分布采樣:


2.2 ASGCN

論文標題:Adaptive Sampling Towards Fast Graph Representation Learning
論文來源:NIPS2018
論文方向:圖卷積網(wǎng)絡
論文鏈接:https://arxiv.org/abs/1809.05343

對FastGCN的最后一個公式,其最優(yōu)的解(最小化從



3.Subgraph sampling
3.1 cluster-GCN

論文標題:Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Networks
論文來源:KDD2019
論文方向:圖卷積網(wǎng)絡
論文鏈接:https://arxiv.org/abs/1905.07953

主要思路:為了限制鄰居數(shù)量的擴張和提高表示的效用,將圖分割成多個cluster(限制子圖的規(guī)模),在cluster上進行結(jié)點的batch training。
使用METIS進行圖分割,使得cluster內(nèi)的邊多,cluster之間的邊少。






兩種訓練方式:
3.2 GraphSAINT

論文標題:GraphSAINT: Graph Sampling Based Inductive Learning Method
論文來源:ICLR2020
論文方向:圖卷積網(wǎng)絡
論文鏈接:https://arxiv.org/abs/1907.04931
主要思路:先采樣子圖,之后在子圖上做完全連接的GCN。

通過在子圖的GCN上添加歸一化系數(shù)(通過預處理計算)來使得估計量無偏,Aggregation 的normalization為:


Loss的normalization為:

從而:

一個好的Samper應該使得:
1、相互具有較大影響的結(jié)點應該被sample到同一個子圖;
2、每條邊多有不可忽略的抽樣概率。
設計Sampler減少評估的方差:
Random node sampler:



4.部分實驗



往期精彩回顧 本站qq群851320808,加入微信群請掃碼:
