Graph Representation 图神经网络
图表示学习(representation learning)——图神经网络框架,主要涉及PyG、DGL、Euler、NeuGraph和AliGraph五个框架。除了NeuGraph没有开源外,其它框架都已开源。

Pytorch Geometric (PyG)
PyG在PyTorch上实现,最核心的类是torch_geometric.nn.MessagePassing,用户只需定义消息传递ϕ\phiϕ(message())、更新函数γ\gammaγ(update())和聚合函数AggAggAgg即可。
GCN的传播规则用向量可表成
[\mathbf{x}i^{(k)} = \sum{j \in \mathcal{N}(i) \cup { i }} \frac{1}{\sqrt{\deg(i)} \cdot \sqrt{\deg(j)}} \cdot \left( \mathbf{\Theta} \cdot \mathbf{x}_j^{(k-1)} \right)]
进而可表示成gather和scatter的两个过程。

PyTorch Geometric 使实现图神经网络变得简单。例如,edge convolutional layer实现边缘卷积层:
import torch
from torch.nn import Sequential as Seq, Linear as Lin, ReLU
from torch_geometric.nn import MessagePassing

class EdgeConv(MessagePassing):
def init(self, F_in, F_out):
super(EdgeConv, self).init(aggr=‘max’) # “Max” aggregation.
self.mlp = Seq(Lin(2 * F_in, F_out), ReLU(), Lin(F_out, F_out))

def forward(self, x, edge_index):# x has shape [N, F_in]# edge_index has shape [2, E]return self.propagate(edge_index, x=x)  # shape [N, F_out]def message(self, x_i, x_j):# x_i has shape [E, F_in]# x_j has shape [E, F_in]edge_features = torch.cat([x_i, x_j - x_i], dim=1)  # shape [E, 2 * F_in]return self.mlp(edge_features)  # shape [E, F_out]

Deep Graph Library (DGL)
DGL和PyG都是目前运用得最广泛的图神经网络库,原理都差不多,但各有优劣。比如DGL是无关平台(platform-agnostic)的,只要底层是深度学习库,都可以灵活支持;支持随机游走和随机采样。

DGL将消息传递的式子拆分成对边应用(edge-wise)和对结点应用(node-wise)
[\begin{cases}
\mathbf{m}_i^{(k+1)} = \phie\left(\mathbf{v}_i{(k)},\mathbf{v}_j{(k)},\mathbf{e}_{j,i}{(k)}\right)\\
\mathbf{v}i^{(k+1)} = \phiv\left(\mathbf{v}_i{(k)},\mathop{Agg}{j\in\mathcal{N}_i}\mathbf{m}_i^{(k+1)}\right)
\end{cases}]
其中ϕe\phi^eϕe是消息函数,ϕv\phi^vϕv是更新函数。
先前的库都需要用户用稀疏矩阵(CSR/COO)存储图,稠密张量存储特征,大量的底层设施会暴露给用户;而DGL底层设施都交由runtime系统进行管理。
深度学习系统最大问题在于没有办法高效表示图数据,而图系统最大的问题在于没法自动微分!
现有用得最广泛的框架是前面两个框架DGL和PyG,但(早期版本的)DGL和PyG只是提供了一个编程框架(面向图的消息传递模型),并没有深度解决计算的问题(这很大程度也是GCN很难火起来的原因,因为无法做到很高的可扩展性)。在GCN的原作实现和GraphSAGE的原作实现中,都使用了TensorFlow进行编程,所采用的方法都是简单暴力的矩阵乘,这样其实很大程度忽略了图计算框架这些年取得的成果。因此NeuGraph的出现也正是为了弥合这两者,将图计算与深度学习有机地融合起来。(这也是matrix-based和matrix-free两种方法的对碰。)
NeuGraph把常见的GNN分为三类:图卷积、图循环、图注意力网络。
进而提出了SAGA-NN (Scatter-ApplyEdge-Gather-ApplyVertex with Neural Networks)编程模型,其中SAGA部分属于图计算的消息传递,而两个A则是深度学习神经网络的应用。

由于GCN相比起传统的图算法(在图计算层面上)要简单很多,就是对全图不断进行遍历,因此Scatter和Gather是确定的,而两个Apply阶段则是用户自定义的函数。(所以似乎NeuGraph没法实现GraphSAGE,因为GraphSAGE的邻域是由一定策略采样出来的,而不是取全部邻域)。
GPU Execution
目前的深度学习框架都很难处理大图,因为GPU的内存无法存储这么大规模的图,因此NeuGraph在数据流抽象的基础上进行了图划分。
(关于计算硬件,这里是值得考虑的。GPU在稠密矩阵计算上具有先天优势,但如果换成稀疏阵优势是否还存在呢。图处理框架的发展证明了CPU集群有办法承担大规模的图计算任务,从这种角度来看的话是否CPU在GNN的处理上也更存在优势呢?或者更加激进地,利用FPGA实现这样既能高效遍历又能高效算矩阵的架构是否有办法呢?)
按边划分为chunk(准确来说是把邻接矩阵按列划分),然后送到不同的GPU上进行计算,优化方法(streaming out of GPU core):
• 使用selective scheduling,先用CPU筛一遍有用的边,再把这些边送去GPU算
• 为了确保足够的局部性,采用了Kernighan-Lin算法进行图划分(METIS包),确保同一个chunk中的大部分边都连向同一个节点
• 用pipeline scheduling最大程度重叠IO和计算时间
AliGraph
AliGraph是Alibaba内部的图计算系统,已经商用在淘宝各种预测任务上,并且取得了很好的效果。
提出目前GNN面临着四个问题:大规模、异构、属性、动态图。
关于GNN的抽象,AliGraph就比NeuGraph要做得更好一些,考虑到了采样过程。

系统架构从上到下包括应用层、算法层、算子层、采样层和存储层,如下图。

Storage Level
• 图划分:采用了四种方法(METIS、顶点/边割、2D划分、流式划分),由用户自行选择
• 图属性存储:AliGraph考虑到了图结构(structure)和图属性(attribute)的存储方式,以索引方式并分开两个表存,这就很数据库了(确保第二范式)。也许会牺牲一定的计算时间,但是考虑到数据量过大,同时属性信息千奇百怪,因此这样存储可能是比较合适的。考虑到访问时间的问题,加了两个cache在这,用LRU策略。

• 缓存邻域结点:通过计算一个指标来衡量,选最大指标的那些进行缓存。

参考链接:
https://www.h5w3.com/128316.html
https://github.com/rusty1s/pytorch_geometric

Graph Representation 图神经网络相关推荐

  1. 图神经网络与图同构测试

    图神经网络在很多任务上取得了非凡的成功,如: (1) Node Classification (2) Link Prediction (3) Graph Classification 图神经网络的表示 ...

  2. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](7)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](7) Into the Weeds Other types of grap ...

  3. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](6)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](6) GNN playground Some empirical GNN ...

  4. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](5)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](5) Graph Neural Networks 图神经网络 Now th ...

  5. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](4)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](4) The challenges of using graphs in ...

  6. 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](2)

    [论文阅读]A Gentle Introduction to Graph Neural Networks [图神经网络入门](2) Graphs and where to find them 图以及在 ...

  7. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络 (二)

    在从图(Graph)到图卷积(Graph Convolution): 漫谈图神经网络 (一)中,我们简单介绍了基于循环图神经网络的两种重要模型,在本篇中,我们将着大量笔墨介绍图卷积神经网络中的卷积操作 ...

  8. [论文翻译]-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》

    文章目录 摘要 1 简介 1.1 GNN简史 1.2 Related surveys on graph neural networks 1.3 Graph neural networks vs. ne ...

  9. 【Graph Neural Network 图神经网络】3.Spatial-based Graph Convolutional Networks 基于空间的图卷积网络

    前言 类似于图像上传统的卷积运算,基于空间的方法根据节点的空间关系定义图卷积.图像可以看作是一种特殊的图形式,每个像素代表一个节点.每个像素都直接连接到它附近的像素,如下图左所示.对3*3的区域应用一 ...

最新文章

  1. php+下载+网路错误,下载zip文件“网络错误失败”(PHP / NGINX)
  2. php gd库 函数 建立gif,PHP_PHP GD库生成图像的几个函数总结,使用GD库中提供的函数动态绘 - phpStudy...
  3. 【LA3415 训练指南】保守的老师 【二分图最大独立集,最小割】
  4. SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
  5. 炒冷饭系列:设计模式 工厂模式
  6. netlink 0001 --- 基础简介
  7. warning: left shift count = width of type
  8. ajax在success方法中打点不能调用
  9. 苹果MacBook iMac免光驱安装win7方法
  10. 练习华为大型公司网络构建拓扑图
  11. Opencv-cvtColor
  12. vue实战项目-ego商城
  13. 教你如何用PCtoLCD2002生成字模以及软件的下载
  14. Django实现刷新验证码功能
  15. Couldn't resolve error at 'ntdll!NtOpenProcess'
  16. 【Linux应用】Linux下磁盘分析工具
  17. 计算机大三如何找名企实习?
  18. 计算机操作系统学习笔记 第二章、进程与线程
  19. KM3D/RTM3D代码复现
  20. 第27章 大数据系统测试

热门文章

  1. docker安装kafka消息队列
  2. 2021-2027全球与中国奶牛冻精市场现状及未来发展趋势
  3. Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步
  4. 剑指offer 40.最小的 K 个数 python代码
  5. 通俗解释指数加权平均
  6. LeetCode简单题之两个列表的最小索引总和
  7. 使用PCAST检测散度以比较GPU和CPU结果
  8. 高级数据结构讲解与案例分析
  9. Django Request对象3.3
  10. Androidx FloatingActionButton 中间图片颜色值修改