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

機器之心報道

參與:Jamin、蛋醬

近日,阿里巴巴開源了簡化 GNN 應用的新框架 Graph-Learn。該框架可從實際案例中提取解決方案,應用於推薦系統、反欺騙等多個領域。相關代碼已經可以在 GitHub 上下載。

近年來,圖神經網絡(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 來提取有關圖形的信息。

通常來說,創建圖形對象需要以下三個步驟:

描述出其拓撲性

初始化數據

分佈式模式

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

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

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


分享到:


相關文章: