#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


以上均为个人见解,因本人水平有限,如发现有所错漏,敬请指出,谢谢!

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