#Paper Reading# PyTorch-BigGraph: A Large-scale Graph Embedding Framework

論文題目: PyTorch-BigGraph: A Large-scale Graph Embedding Framework
論文地址: https://arxiv.org/abs/1903.12287
論文發表於: SysML 2019

論文大體內容:
本文主要實現了大規模數據下的graph embedding,在效果微漲的情況下,訓練性能有顯著的提升,對於工業界大規模圖網絡的embedding學習,有實際的應用價值。

Motivation:
大規模圖網絡主要有2個挑戰:①性能,計算量大;②存儲,內存過大。而往往工業界圖網絡會特別巨大,所以訓練起來沒有特別有效的方法或工程實現。

Contribution:
本文作者實現了大規模圖網絡的embedding學習方法,通過多機並行,輕鬆訓練萬億級別規模的邊的網絡。


1. 目前工業界用到的實體節點數量和邊數量如下:
①Facebook 20億用戶節點和萬億級別的邊;
②阿里有10億用戶節點和20億的商品;
③Pinterest有20億的實體和170億的邊;

2. PBG主要部分包括:
①鄰接矩陣分爲N個bucket,每次只取1個bucket的邊來訓練,訓練出來的embedding存儲到硬盤,或者分佈式訓練來減少內存消耗;
②PS架構用於全局參數和embedding;
③對節點進行均勻的負採樣,每個batch重用負採樣來降低內存消耗;
④支持多實體多關係的圖;

3. 實驗發現:
①內存消耗降低88%;
②8臺機器分佈式訓練,速度提升4倍;

4. PGB的節點劃分方式如下圖,對於所有節點,shuffle後進行隨機劃分到bucket。節點劃分後,每一條邊被會放到一個partition,那麼該partition必然變爲橫跨兩個bucket,或者在同一個bucket以內。這樣就可以對不重疊的partition並行化;

5. PBG最重要的一點在於其負採樣的方法;
負採樣一般有2種方法:
①根據數據分佈採樣,這樣對於稀疏節點基本無效;
②均勻負採樣,模型會學習出邊的分數與兩個點之間的連接邊數量成正比;
PGB採用α的概率①,(1-α)概率②,默認α=0.5;
本文采用的是Batched Negative Sampling,即批負採樣;
主要方法如下圖:
①B是每個batch的邊數量(正樣本邊);Bn是每個batch的負樣本邊數量(負採樣生成);
②B個正樣本邊,則有2B個節點的embedding(B個src節點,B個dest節點),同時隨機採樣另外B個src節點,B個dest節點,進行交叉生成負樣本;

Batched Negative Sampling的效果如下,增加負採樣數量,訓練速度下降也不會很快。


實驗
6. Dataset
①user-user interaction graph from LiveJournal;
②user-user follow graph from Twitter;
③user-user interaction graph from YouTube;
④Freebase knowledge graph;

7. Baseline
①DeepWalk;
②MILE;
③TransE;
④ComplEx;
等等;

8. 實驗結果


參考資料: 
[1] https://github.com/facebookresearch/PyTorch-BigGraph


以上均爲個人見解,因本人水平有限,如發現有所錯漏,敬請指出,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章