点击上方,选择星标置顶,每天给你送上干货

作者 | 对白

出品 | 对白的算法屋

今天我们来聊一聊在大规模图神经网络上必用的GNN加速算法。GNN在图结构的任务上取得了很好的结果,但由于需要将图加载到内存中,且每层的卷积操作都会遍历全图,对于大规模的图,需要的内存和时间的开销都是不可接受的。

现有一些用于加速GNN的算法,基本思路是使用mini-batch来计算,用min-batch的梯度估计full-batch的梯度,通过多次迭代达到基本一致的效果。

根据使用的方法不同,大致分为以下三类

  • Neighbor sampling

  • Layer-wise sampling

  • Subgraph sampling

1.Neighbor sampling

1.1 GraphSage

论文标题:Inductive Representation Learning on Large Graphs

论文来源:NIPS2017

论文方向:图表示学习

论文链接:https://arxiv.org/abs/1706.02216

GraphSAGE 是 2017 年提出的一种图神经网络算法,解决了 GCN 网络的局限性: GCN 训练时需要用到整个图的邻接矩阵,依赖于具体的图结构,一般只能用在直推式学习 Transductive Learning。GraphSAGE 使用多层聚合函数,每一层聚合函数会将节点及其邻居的信息聚合在一起得到下一层的特征向量,GraphSAGE 采用了节点的邻域信息,不依赖于全局的图结构。

GraphSAGE 的运行流程如上图所示,可以分为三个步骤:

1、对图中每个顶点邻居顶点进行采样;

2、根据聚合函数聚合邻居顶点蕴含的信息;

3、得到图中各顶点的向量表示供下游任务使用;

出于对计算效率的考虑,对每个顶点采样一定数量的邻居顶点作为待聚合信息的顶点。设采样数量为k,若顶点邻居数少于k,则采用有放回的抽样方法,直到采样出k个顶点。若顶点邻居数大于k,则采用无放回的抽样。

即为每个结点均匀地抽样固定数量的邻居结点,使用Batch去训练。

复杂度正比于卷积层数 




 的指数。

1.2 ScalableGCN

阿里妈妈的Euler中使用的加速算法,主要思想是用空间换时间。对于 




 阶GCN模型,开辟存储空间: 



















 ,将mini-batch SGD中各顶点最新的前阶embedding存储起来,前向Aggregate的时候直接查询缓存。

同时也开辟存储空间 



















 ,来存储 






δ










δ










 ,根据链式法则来获得参数梯度从而更新 




 。

我们在两个开源的数据集Reddit和PPI上验证了我们的工作。由于GraphSAGE的简单和通用性,我们选择其为baseline。并且为了对齐与其论文中的实验结果,我们在共享了GraphSAGE和ScalableGCN代码中的大多数模块,并利用Tensorflow中的Variable存储,使用累加作为算子。

我们使用均匀分布来初始化,并将初始化为0。对于每阶的卷积操作,我们采样10个邻接顶点。所有的实验均使用512的batch size训练20个epoch。在评估阶段,我们统一维持GraphSAGE的方法进行Inference。以下是选择Mean作为AGG函数的micro-F1 score:

PPI:

层数 算法 Micro-F1
1层 GraphSAGE 0.47196
2层 GraphSAGE 0.58476
2层 ScalableGCN 0.57746
3层 GraphSAGE 0.63796
3层 ScalableGCN 0.63402

Reddit:

层数 算法 Micro-F1
1层 GraphSAGE 0.91722
2层 GraphSAGE 0.94150
2层 ScalableGCN 0.93843
3层 GraphSAGE 0.94816
3层 ScalableGCN 0.94331

可以看到ScalableGCN训练出来模型与GraphSAGE的训练结果相差很小,同时可以取得多层卷积模型的收益。

在时间上,以下是8 core的机器上Reddit数据集(23万顶点)每个mini-batch所需的训练时间:

1层 GraphSAGE 0.013
2层 GraphSAGE 0.120
2层 ScalableGCN 0.026
3层 GraphSAGE 1.119
3层 ScalableGCN 0.035

注意到ScalableGCN的训练时间相对于卷积模型层数来说是线性的。

总结:

GCN是目前业界标准的网络图中特征抽取以及表示学习的方法,未来在搜索、广告、推荐等场景中有着广泛的应用。多阶的GCN的支持提供了在图中挖掘多阶关系的能力。ScalableGCN提出了一种快速训练多阶GCN的方法,可以有效的缩短多阶GCN的训练时间,并且适用于大规模的稀疏图。本方法与对采样进行裁剪和共享的方法也并不冲突,可以同时在训练中使用

1.3 VR-GCN

论文标题:Stochastic Training of Graph Convolutional Networks with Variance Reduction

论文来源:ICML2018

论文方向:图卷积网络

论文链接:https://arxiv.org/abs/1706.02216

主要思路:利用结点历史表示 











 来作为控制变量(control variate)来减小方差,从而减小batch training中的采样邻居的数量。

使用蒙特卡方法来洛近似 














 ,而 











 上的平均计算是可接受的(不用递归)。

因此其矩阵表示为:

该算法具有理论保障,可以获得0偏差和0方差的结果,且无论每层邻居结点的抽样个数 







 是多少,都不影响 GCN收敛到局部最优。(理论细节请看原文,较为复杂,不展开)

因此每个结点仅仅采样两个邻居,极大提升模型训练效率的同时,也能保证获得良好的模型效果。

2.Layer-wise sampling

2.1 FastGCN

论文标题:FastGCN: fast learning with graph convolutional networks via importance sampling

论文来源:ICLR2018

论文方向:图卷积网络

论文链接:https://arxiv.org/abs/1801.10247

我们已知,GCN的形式为:

从积分的角度看待图卷积,假设图是无限大图的子集,所有结点为独立同分布的结点,满足 









则可以应用蒙特卡洛法,对每一层进行采样 







 个结点, 























 来近似积分,以前层的结点作为共享邻居集合:

此外为了减少估计方差(Variance Reduction),采用重要性采样(Importance samling),结点根据以下概率分布采样:

2.2 ASGCN

论文标题:Adaptive Sampling Towards Fast Graph Representation Learning

论文来源:NIPS2018

论文方向:图卷积网络

论文链接:https://arxiv.org/abs/1809.05343

对FastGCN的最后一个公式,其最优的解(最小化从 




 抽样出的结点的方差, 























 )为:

其中 














































 ,而 

















 则是上一层结点从邻居聚集而来的隐层表示。在FastGCN中,则有 




































为了防止递归困境,为importance sampling学习一个独立的决定其重要性的函数(Adaptive sampling),基于结点的特征 







 来计算:

因此最终的抽样结点的分布为:

3.Subgraph sampling

3.1 cluster-GCN

论文标题:Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Networks

论文来源:KDD2019

论文方向:图卷积网络

论文链接:https://arxiv.org/abs/1905.07953

主要思路:为了限制邻居数量的扩张和提高表示的效用,将图分割成多个cluster(限制子图的规模),在cluster上进行结点的batch training。

使用METIS进行图分割,使得cluster内的边多,cluster之间的边少。

具体来说,对于图 




 分割成  




 个部分, 
















 , 






 由第 




 个分割中的结点构成,  







 仅由 






 中结点之间的边构成,故有 




 个子图:

因此,邻居矩阵可以分为 







 的子矩阵:

同理也可以对结点特征矩阵 




 和 




 进行分割, 


























 。

Loss可以分解为:

两种训练方式:

1.随机挑选一个cluster进行训练(coarse clustering)

2.随机挑选 k 个cluster,然后连接他们再进行训练(stochastic multiple clustering)

3.2 GraphSAINT

论文标题:GraphSAINT: Graph Sampling Based Inductive Learning Method

论文来源:ICLR2020

论文方向:图卷积网络

论文链接:https://arxiv.org/abs/1907.04931

主要思路:先采样子图,之后在子图上做完全连接的GCN。

通过在子图的GCN上添加归一化系数(通过预处理计算)来使得估计量无偏,Aggregation 的normalization为:

Loss的normalization为:

从而:

一个好的Samper应该使得:

1、相互具有较大影响的结点应该被sample到同一个子图;

2、每条边多有不可忽略的抽样概率。

设计Sampler减少评估的方差:

Random node sampler:

Random edge sampler:

Random walk based sampler:

4.部分实验


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑黄海广老师《机器学习课程》视频课
本站qq群851320808,加入微信群请扫码:

【GNN】谷歌、阿里、腾讯等在大规模图神经网络上必用的GNN加速算法相关推荐

  1. 亚马逊马超:如何使用DGL进行大规模图神经网络训练?

    演讲嘉宾 | 马超(亚马逊应用科学家) 整理 | 刘静  出品 | AI科技大本营(ID:rgznai100) 与传统基于张量(Tensor)的神经网络相比,图神经网络将图 (Graph) 作为输入, ...

  2. 20万奖金池!【阿里安全 × ICDM 2022】大规模电商图上的风险商品检测赛火热报名中!...

    # 黑灰产VS风控系统 近年来,图计算尤其是图神经网络等技术获得了快速的发展以及广泛的应用. 在电商平台上的风险商品检测场景中,黑灰产和风控系统之间存在着激烈的对抗,黑灰产为了躲避平台管控,会蓄意掩饰 ...

  3. Make GNN Great Again:图神经网络上的预训练和自监督学习

    来源:RUC AI Box本文约6500字,建议阅读13分钟本文梳理近年来 GNN预训练和自监督学习/对比学习的相关工作. 1 引言 近些年来,对图神经网络(GNN)的研究如火如荼.通过设计基于 GN ...

  4. 如何看待这份2018互联网校招高薪清单?(谷歌阿里腾讯华为网易)

    近期, 一张"2018届互联网校招高薪清单"在网络上流传,据清单显示,算法工程师岗位最吃香,不仅企业需求量大并且年薪均是30万起步:除此之外,令人瞩目的一点是谷歌中国对人工智能岗位 ...

  5. 图神经网络让谷歌地图更智能

    对于公众出行领域而言,交通工具的到达时间是主要的影响因素,预估到达时间(ETA)准确率已经成为非常实际的研究课题.近日,英国人工智能公司DeepMind 与谷歌地图展开深度合作,利用图神经网络(Gra ...

  6. 实现大规模图计算的算法思路

    分享嘉宾:徐潇然 Hulu 研究员 编辑整理:莫高鼎 出品平台:DataFunTalk 导读:2017年我以深度学习研究员的身份加入Hulu,研究领域包括了图神经网络及NLP中的知识图谱推理,其中我们 ...

  7. [图神经网络] 图神经网络GNN基础入门

    最近,深度学习领域关于图神经网络(Graph Neural Networks,GNN)的研究热情日益高涨,图神经网络已经成为各大深度学习顶会的研究热点,包括社交网络,知识图,推荐系统,甚至生命科学.G ...

  8. 大规模图数据匹配技术综述

    摘要 在大规模图数据上进行高效地查询.匹配是大数据分析处理的基础问题.从应用角度对图查询的图数据匹配技术的研究进展进行综述,根据图数据的不同特征以及应用的不同需求对图匹配问题分类进行介绍.同时,将重点 ...

  9. 目前看的图神经网络(GNN)论文的一些总结

    该文首发于知乎专栏:在天大的日日夜夜 已获得作者授权 最近组会轮到我讲了,打算讲一下目前看的一些GNN论文以及该方向的一些重要思想,其中有借鉴论文[1].[2]的一些观点和<深入浅出图神经网络: ...

最新文章

  1. (U3D)Time的使用
  2. 再见 VBA!神器工具统一 Excel 和 Python
  3. 用source命令执行脚本和用sh执行脚本之间的区别
  4. 贪吃蛇游戏的C++代码
  5. 逻辑地址、线性地址、物理地址和虚拟地址初步认识
  6. Springboot集成cache的key生成策略
  7. ubuntu下vim与系统剪切板互相拷贝
  8. CVPR学习(五):CVPR2019-人体姿态
  9. css3 media queries
  10. atitit 项目管理 持续集成 构建管理CI jenkins.docx
  11. quartus仿真11:74138译码
  12. 人像抠图处理百度API接口调用
  13. android mvp mvvm ppt,Android中MVC MVP MVVM模式
  14. 计算机网络设备的种类,计算机网络设备选型依据.ppt
  15. 希尔伯特(Hilbert)变换
  16. 哇喔!微信可以改彩色昵称了!!!
  17. echarts旭日图数据重构处理
  18. 查mysql版本的命令
  19. Classification:Winnow
  20. postgresql 学习笔记

热门文章

  1. asp.net后台调用javascript的方法
  2. 用springmvc 开发为 app 提供后台服务遇到跨域请求的问题
  3. leetcode 35 Search Insert Position(二分法)
  4. 【转】AngularJs 弹出框 model(模态框)
  5. VSCode 更新后打不开之解决办法
  6. Graphpad Prism 9绘制子列图与柱状图
  7. python模拟鼠标拖动_python模拟鼠标拖动操作
  8. 机器人学习--室内定位的通信学科背景方法
  9. 计算机视觉--优秀开源方案集锦
  10. Verilog功能模块——降采样