德國研究者提出最新幾何深度學(xué)習(xí)擴展庫 PyTorch Geometric (PyG),具有快速、易用的優(yōu)勢,使得實現(xiàn)圖神經(jīng)網(wǎng)絡(luò)變得非常容易。作者開源了他們的方法,并提供教程和實例。
過去十年來,深度學(xué)習(xí)方法(例如卷積神經(jīng)網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò))在許多領(lǐng)域取得了前所未有的成就,例如計算機視覺和語音識別。
研究者主要將深度學(xué)習(xí)方法應(yīng)用于歐氏結(jié)構(gòu)數(shù)據(jù)(Euclidean domains),但在許多重要的應(yīng)用領(lǐng)域,如生物學(xué)、物理學(xué)、網(wǎng)絡(luò)科學(xué)、推薦系統(tǒng)和計算機圖形學(xué),可能不得不處理非歐式結(jié)構(gòu)的數(shù)據(jù),比如圖和流形。
直到最近,深度學(xué)習(xí)在這些特定領(lǐng)域的采用一直很滯后,主要是因為數(shù)據(jù)的非歐氏結(jié)構(gòu)性質(zhì)使得基本操作(例如卷積)的定義相當(dāng)困難。在這個意義上,幾何深度學(xué)習(xí)將深度學(xué)習(xí)技術(shù)擴展到了圖/流形結(jié)構(gòu)數(shù)據(jù)。
圖神經(jīng)網(wǎng)絡(luò)(GNN)是近年發(fā)展起來的一個很有前景的深度學(xué)習(xí)方向,也是一種強大的圖、點云和流形表示學(xué)習(xí)方法。
然而,實現(xiàn)GNN具有挑戰(zhàn)性,因為需要在高度稀疏且不規(guī)則、不同大小的數(shù)據(jù)上實現(xiàn)高GPU吞吐量。
近日,德國多特蒙德工業(yè)大學(xué)的研究者兩位Matthias Fey和Jan E. Lenssen,提出了一個基于PyTorch的幾何深度學(xué)習(xí)擴展庫PyTorch Geometric (PyG),為GNN的研究和應(yīng)用再添利器。
論文:
https://arxiv.org/pdf/1903.02428.pdf
Yann Lecun也熱情推薦了這個工作,稱贊它是一個快速、美觀的PyTorch庫,用于幾何深度學(xué)習(xí)(圖和其他不規(guī)則結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò))。
作者聲稱,PyG甚至比幾個月前NYU、AWS聯(lián)合開發(fā)的圖神經(jīng)網(wǎng)絡(luò)庫 DGL(Deep Graph Library)快了15倍!
作者在論文中寫道:“這是一個PyTorch的幾何深度學(xué)習(xí)擴展庫,它利用專用的CUDA 內(nèi)核實現(xiàn)了高性能。它遵循一個簡單的消息傳遞API,將最近提出的大多數(shù)卷積和池化層捆綁到一個統(tǒng)一的框架中。所有實現(xiàn)的方法都支持CPU和GPU計算,并遵循一個不可變的數(shù)據(jù)流范式,該范式支持圖結(jié)構(gòu)隨時間的動態(tài)變化。”
PyG已經(jīng)在MIT許可下發(fā)布,可以在GitHub上獲取。里面有完整的文檔說明,并提供了作為起點的教程和示例。
地址:
https://github.com/rusty1s/pytorch_geometric
PyTorch Geometry:基于PyTorch的幾何深度學(xué)習(xí)擴展庫
PyTorch Geometry是一個基于PyTorch的幾何深度學(xué)習(xí)擴展庫,用于不規(guī)則結(jié)構(gòu)輸入數(shù)據(jù),例如圖(graphs)、點云(point clouds)和流形(manifolds)。
PyTorch Geometry包含了各種針對圖形和其他不規(guī)則結(jié)構(gòu)的深度學(xué)習(xí)方法,也稱為幾何深度學(xué)習(xí),來自于許多已發(fā)表的論文。
此外,它還包含一個易于使用的mini-batch加載器、多GPU支持、大量通用基準(zhǔn)數(shù)據(jù)集和有用的轉(zhuǎn)換,既可以學(xué)習(xí)任意圖形,也可以學(xué)習(xí)3D網(wǎng)格或點云。
在PyG中,我們用一個節(jié)點特征矩陣和一個稀疏鄰接元組代表一個圖
其中以坐標(biāo)格式編碼索引,保持?D?維邊緣特征。
所有面向用戶的API,據(jù)加載例程、多GPU支持、數(shù)據(jù)增強或模型實例化都很大程度上受到PyTorch的啟發(fā),以便使它們盡可能保持熟悉。
Neighborhood Aggregation:將卷積算子推廣到不規(guī)則域通常表示為一個鄰域聚合(neighborhood aggregation),或message passing scheme (Gilmer et al., 2017)。
其中,表示一個可微分的置換不變函數(shù),例如?sum, mean or max,而和表示可微分函數(shù),例如?MLP。
在實踐中,這可以通過收集和散布節(jié)點特性并利用broadcasting進行
圖1
幾乎所有最近提出的鄰域聚合函數(shù)可以利用這個接口,已經(jīng)集成到PyG的方法包括(但不限于):
對于任意圖形學(xué)習(xí),我們已經(jīng)實現(xiàn)了:
GCN(Kipf & Welling, 2017)和它的簡化版本SGC(Wu et al., 2019)
spectral chebyshev和ARMAfilter convolutionss (Defferrard et al., 2016; Bianchi et al., 2019)
GraphSAGE(Hamilton et al., 2017)
attention-based operatorsGAT(Veli?kovi? et al., 2018)及AGNN (Thekumparampil et al., 2018),
Graph Isomorphism Network (GIN) from Xu et al. (2019)
Approximate Personalized Propagation of Neural Predictions (APPNP) operator (Klicpera et al., 2019)
對于學(xué)習(xí)具有多維邊緣特征的點云,流形和圖,我們提供了:
Schlichtkrull et al. (2018)的relationalGCNoperator
PointNet++(Qi et al., 2017)
PointCNN(Li et al., 2018)
kernel-based methodsMPNN(Gilmer et al., 2017),
MoNet(Monti et al., 2017)
SplineCNN(Fey et al., 2018)
以及邊緣卷積算子EdgeCNN(Wang et al., 2018b).
實驗評估
我們通過對同類評估場景進行綜合比較研究,評估了利用PyG所實現(xiàn)方法的正確性。所有使用過的數(shù)據(jù)集的描述和統(tǒng)計可以在論文附錄中找到。
對于所有的實驗,我們都盡可能地遵循各自原始論文的超參數(shù)設(shè)置,GitHub存儲庫中提供了復(fù)制所有實驗的代碼。
表2:圖分類的結(jié)果
表3:點云分類的結(jié)果
我們對多個數(shù)據(jù)模型對進行了多次實驗,并報告了在單個NVIDIA GTX 1080 Ti上獲得的整個訓(xùn)練過程的運行情況(表4)。與Deep Graph Library (DGL)(Wang et al., 2018a)相比,PyG訓(xùn)練模型的速度快了15倍。
表4:訓(xùn)練runtime比較
安裝、教程&示例
PyTorch Geometric使實現(xiàn)圖卷積網(wǎng)絡(luò)變得非常容易(請參閱GitHub上的教程)。
例如,這就是實現(xiàn)一個邊緣卷積層(edge convolution layer)所需的全部代碼:
import torchfrom torch.nn import Sequential as Seq, Linear as Lin, ReLUfrom torch_geometric.nn import MessagePassingclass EdgeConv(MessagePassing): def __init__(self, F_in, F_out): super(EdgeConv, self).__init__() self.mlp = Seq(Lin(2 * F_in, F_out), ReLU(), Lin(F_out, F_out)) def forward(self, x, edge_index): # x has shape [N, F_in] # edge_index has shape [2, E] return self.propagate(aggr='max', edge_index=edge_index, x=x) # shape [N, F_out] def message(self, x_i, x_j): # x_i has shape [E, F_in] # x_j has shape [E, F_in] edge_features = torch.cat([x_i, x_j - x_i], dim=1) # shape [E, 2 * F_in] return self.mlp(edge_features) # shape [E, F_out]
此外,與其他深度圖神經(jīng)網(wǎng)絡(luò)庫相比,PyTorch Geometric的速度更快:
表:在一塊NVIDIA GTX 1080Ti上的訓(xùn)練runtime
安裝
確保至少安裝了PyTorch 1.0.0,并驗證cuda/bin和cuda/include分別位于$PATH和 $cpathrespecific,例如:
$ python -c "import torch; print(torch.__version__)">>> 1.0.0$ echo $PATH>>> /usr/local/cuda/bin:...$ echo $CPATH>>> /usr/local/cuda/include:...
然后運行:
$ pip install --upgrade torch-scatter$ pip install --upgrade torch-sparse$ pip install --upgrade torch-cluster$ pip install --upgrade torch-spline-conv (optional)$ pip install torch-geometric
運行示例
cd examplespython cora.py
paper:
https://arxiv.org/pdf/1903.02428.pdf
GitHub:
https://github.com/rusty1s/pytorch_geometric
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4765瀏覽量
100565 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5493瀏覽量
120998 -
pytorch
+關(guān)注
關(guān)注
2文章
803瀏覽量
13152 -
GNN
+關(guān)注
關(guān)注
1文章
31瀏覽量
6330
原文標(biāo)題:LeCun推薦:最新PyTorch圖神經(jīng)網(wǎng)絡(luò)庫,速度快15倍(GitHub+論文)
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論