靈活、輕便,阿里開源簡化GNN應用框架Graph-Learn

機器之心發表於2020-04-03
近年來,圖神經網路(GNN)已經在影像分類、語義分割、推薦系統、程式推理乃至分子結構預測等領域,都有著越來越廣泛的應用。GNN 一般是將底層圖形作為計算圖,通過在圖上傳遞、轉換和聚合節點特徵資訊學習神經網路基元以生成單個節點嵌入。生成的節點嵌入可以作為輸入,用於如節點分類或連線預測的任何可微預測層,完整的模型可以通過端到端的方式訓練。

靈活、輕便,阿里開源簡化GNN應用框架Graph-Learn

近日,阿里巴巴團隊開源了 Graph-Learn(以下簡稱 GL),這是一個用以簡化圖神經網路應用的新框架。它能夠從實際的案例中提取出解決方案,並且這些解決方案已在推薦、反欺騙和知識圖譜系統領域得到了應用和驗證。

GL 的可移植性和靈活性對於開發者來說十分友好,在該框架的基礎上,開發者可以更輕鬆地實現 GNN 演算法、自定義與圖相關的運算子,並且更輕鬆地擴充現有模組。Container 和物理機上都可以安裝 GL。

專案地址:https://github.com/alibaba/graph-learn

模型示例

GCN

圖卷積網路被認為是基於深度學習的圖形結構化資料方法最突出的進展之一。GCN 上的卷積運算元是頻譜圖卷積的部分近似。從空間角度來看,相鄰節點的嵌入被聚合在一起用以更新節點的自嵌入。

靈活、輕便,阿里開源簡化GNN應用框架Graph-Learn


GAT

圖注意力網路是 GCN 接下來的主要工作。GAT 將注意力機制融入了 GCN。通過計算節點之間的注意力係數,GAT 對節點及其相鄰進行加權彙總,從而使得每個節點都能專注於最相關的相鄰項從而進行決策。

靈活、輕便,阿里開源簡化GNN應用框架Graph-Learn

GraphSAGE 

GraphSAGE 是一個通用的歸納框架,可以有效地為之前無法視覺化的資料生成節點嵌入。為了利用大規模圖形資料,GraphSAGE 會建議從原始圖形資料中取樣計運算元圖形,然後進行逐批訓練。以及它還提出了通過幾個 aggregators 來有選擇地聚合相鄰項的嵌入。

靈活、輕便,阿里開源簡化GNN應用框架Graph-Learn


快速開始

以最流行的圖神經網路模型 GCN 為例,這部分展示一下如何基於 low-level 的 GL API 和深度學習框架(比如 TensorFlow)構建圖學習模型。

如何建立一個基於學習的模型

需要執行以下四個步驟:

  • 取樣:使用內建取樣函式取樣子圖(稱為 EgoGraph)。
  • 團隊抽象了四個基本函式,包括sample_seed,positive_sample,negative_sample 和receptive_fn。sample_seed 用於生成初始 Nodes 以及 Edges(一系列節點或邊緣),然後 positve_sample 將其用作輸入以生成樣本 Edges。negative_sample 函式可對非監督模型的負 Nodes 或 Edges 進行取樣。GNN 需要聚集 nodes(edges)的相鄰資訊以便更新 nodes 及 edges 嵌入,因此提供了 acceptive_fn 來取樣相鄰資訊。種子 Nodes 和 Edges 以及取樣被統一組織為 EgoGraph。

  • 圖形流:使用 EgoFlow 時會根據不同的後端將 EgoGraph 轉換為 EgoTensor。
  • GL 建模是基於 TensorFlow 等深度學習框架之上的。因此,需要將取樣的EgoGraphs 轉換為張量格式 EgoTensor。團隊將 EgoFlow 進行此轉換。EgoFlow 還生成用於迭代訓練和 pipeline 的 iterator。

  • 定義編碼器:使用 EgoGraph 編碼器和功能編碼器對 EgoTensor 進行編碼。
  • 獲取 EgoTensor 之後,需要定義從原始資料到嵌入的轉換例程。而對於 GNN 模型,此步驟是聚合節點並將其與自身節點的 nodes/edges 合併。

  • 定義損失函式和訓練:將編碼的嵌入內容提供給損失函式及訓練。
  • GL 內建了一些常見的損失函式優化器,也可以自定義自己的損失函式優化器。同時支援本地和分散式培訓。

主要概念

源資料

GL 支援多種資料格式,用以簡化從原始資料到 Graph 物件的整個構建過程。源資料放置在檔案系統上,建模時,載入程式會將檔案讀取為 StructuredAccessFile。

對於使用者而言,提供了兩類源資料:Node Source 以及 Edge Source。這裡將其描述為 Node Source 和 Edge Source 支援的資料格式。

通常情況下,節點包含一個 ID 以及多個描述實體的屬性。Edge 包含兩個 ID,用於描述兩個節點之間的關係。Edges 也可能附加了屬性。例如,「使用者在星期六早上購買了產品」。它使用了使用者和產品 ID 描述 Edge,「星期六早上」是該 Edge 的屬性。

除屬性外,GL 還支援源資料中的權重和標籤。權重對於許多采樣演算法很重要,而標籤是監督訓練的必備條件。

如上所述,GL 使用 WEIGHTED,LABELED 和 ATTRIBUTED 作為基本 ID 的可選擴充套件。

圖形物件

Graph 是一個組織原始資料的單元,用以啟用高階操作。GL 作業中只能存在一個且是唯一的 Graph 物件。能夠支援所有型別的圖,包括同構圖,具有不同型別 nodes 或 edges 的異構圖或是以及具有附加在 nodes 或 edges 上屬性的圖。提供豐富的 API 來提取有關圖形的資訊。

通常來說,建立圖形物件需要以下三個步驟:

  • 宣告一個 Graph 物件

  • 描述出其拓撲性

  • 初始化資料


分散式模式

GL 支援分散式模式執行的伺服器或客戶端以及其任意組合。伺服器角色負責載入和管理圖形。客戶端與深度學習框架在同一過程中執行,以提供圖形資料進行訓練。在訓練期間,將從客戶端生成資料的查詢或取樣請求,在伺服器中對其進行處理。最後,伺服器的結果被聚合回客戶端。

靈活、輕便,阿里開源簡化GNN應用框架Graph-Learn

「伺服器」和「客戶端」只是 GL 中的邏輯層面的角色,它們也可以放在同一臺機器上。

相關文章