Home

GNN 教程:图神经网络框架和他们的设计理念对比

引言 此为原创文章,未经许可,禁止转载 最近我们开源了我们在阿里内部场景上使用的超大规模图神经网络计算框架 graph-learn,graph-learn作为从业务实践角度出发而孵化的GNN框架,原生支持单机多卡,多机多卡,CPU、GPU等分布式集群的超大规模图数据的存储、调度与计算。与此同时,还有很多优秀的图计算框架也已经开源并仍活跃地维护着,他们包括Amazon AI lab的 DGL,Matthias Fey 博士的 pytorch_geometric等。我阅读了这些框架的文档,整理一篇文章介绍下各个框架的设计理念以及一些可以互相借鉴的地方。 Pytorch_geometric (下文将简写成PyG) Pytorch_geometric 是我最早接触的GNN框架,它将GN...

Read more

GNN 教程(特别篇):一文遍览GNN的代表模型

引言 此为原创文章,未经许可,禁止转载 GNN的各种模型在近两年来非常火热,在各个会议、期刊上新的模型层出不穷,他们有的做了理论创新,有的对前人的工作提出了改进,在这篇博文中,我想要带大家回顾GNN在近两年来的一些模型的异同,着重体现在他们的数学表达式上的差异。 这篇博文主要遵循 DGL 框架和PyTorch geometric的梳理脉络,加上一些对公式以及背后思想的解释。这篇博文面向的读者是对图神经网络已经有了一定程度的了解的学者。 文章中整理的GNN模型只是目前提出各种创新的一小部分,欢迎大家补充其他的模型。才疏学浅,如有疏漏,欢迎大家指正,可以通过github pull request 的方式,也可以留言或者发邮件给我,谢谢! 卷积层的设计 GraphConv 来自...

Read more

GNN 教程:图上的预训练任务下篇

引言 此为原创文章,未经许可,禁止转载 前一篇博文GNN 教程:图上的预训练任务上篇已经向大家介绍了一种图上预训练的方式,通过设计边重建、Centrality Score Ranking、保留图簇信息三种图预训练任务来生成节点embedding,以从局部到全局捕获节点的图结构信息;然后,将预训练模型生成的节点Embedding在特定的任务中做微调,最终应用于该特定任务中。 本博文将向大家介绍来自论文 Pre-training Graph Neural Networks 的另一种预训练方式,该论文重点讨论下面三个问题: 如何生成节点 embedding,以捕获节点和它邻居的在结构的相似性(相邻节点的Embedding在投影空间中相近); 如何生...

Read more

GNN 教程:图攻击与图对抗

引言 此为原创文章,未经许可,禁止转载 这篇博文主要介绍的对图神经网络进行攻击,即:通过对某些节点的特征进行扰动、或者对图结构进行扰动使得图神经网络对于特定节点分类任务失效(分类错误),研究图神经网络的对抗攻击是有必要的,因为这会帮助我们构建更加鲁棒的图神经网络模型。博文的主要内容来源于 KDD 2018 Best Paper:Adversarial Attacks on Neural Networks for Graph Data 基本记号 这篇文章的主要记号仍然沿用了图神经网路的惯例,图卷积层表示为 \[H^{(l+1)}=\sigma\left(\tilde{D}^{-\frac{1}{2}} \tilde{A} \tilde{D}^{-\frac{1}{2}} H^{...

Read more

GNN 教程:图上的预训练任务上篇

0 引言 此为原创文章,未经许可,禁止转载 虽然 GNN 模型及其变体在图结构数据的学习方面取得了成功,但是训练一个准确的 GNN 模型需要大量的带标注的图数据,而标记样本需要消耗大量的人力资源,为了解决这样的问题,一些学者开始研究Graph Pre-training的框架以获取能够迁移到不同任务上的通用图结构信息表征。 在NLP和CV领域中,学者已经提出了大量的预训练架构。比如:BERT(Devlin et al., 2018)和VGG Nets (Girshick et al., 2014),这些模型被用来从未标注的数据中学习输入数据的通用表征,并为模型提供更合理的初始化参数,以简化下游任务的训练过程。 这篇博文将向大家介绍图上的预训练模型,来自论文Pre-Training...

Read more

GNN 教程:DGL框架-大规模分布式训练

此为原创文章,转载务必保留出处 引言 前面的文章中我们介绍了DGL如何利用采样的技术缩小计算图的规模来通过mini-batch的方式训练模型,当图特别大的时候,非常多的batches需要被计算,因此运算时间又成了问题,一个容易想到解决方案是采用并行计算的技术,很多worker同时采样,计算并且更新梯度。这篇博文重点介绍DGL的并行计算框架。 多进程方案 概括而言,目前DGL(version 0.3)采用的是多进程的并行方案,分布式的方案正在开发中。见下图,DGL的并行计算框架分为两个主要部分:Graph Store和Sampler Sampler被用来从大图中构建许多计算子图(NodeFlow),DGL能够自动得在多个设备上并行运行多个Sampler的实例。 Gra...

Read more

GNN 教程:DGL框架-子图和采样

此为原创文章,转载务必保留出处 引言 之前我们大致介绍了DGL这个框架,以及如何使用DGL编写一个GCN模型,用在学术数据集上,这样的模型是workable的。然而,现实生活中我们还会遇到非常庞大的图数据,庞大到邻接矩阵和特征矩阵不能同时塞进内存中,这时如何解决这样的问题呢?DGL采用了和GraphSAGE类似的邻居采样策略,通过构建计算子图缩小了每次计算的图规模,这篇博文将会介绍DGL提供的采样模型。 GCN中暴露的问题 首先我们回顾一下GCN的逐层embedding更新公式,给定图 $\mathcal{G}=(\mathcal{V}, \mathcal{E})$, 我们用在程序中用邻接矩阵$A\in\mathbb{R}^{\vert\mathcal{V}\vert\times...

Read more

GNN 教程:DGL框架-消息和GCN的实现

此为原创文章,转载务必保留出处 引言 图神经网络的计算模式大致相似,节点的Embedding需要汇聚其邻接节点Embedding以更新,从线性代数的角度来看,这就是邻接矩阵和特征矩阵相乘。然而邻接矩阵通常都会很大,因此另一种计算方法是将邻居的Embedding传递到当前节点上,再进行更新。很多图并行框架都采用详细传递的机制进行运算(比如Google的Pregel)。而图神经网络框架DGL也采用了这样的思路。从本篇博文开始,我们DGL](https://docs.dgl.ai/index.html)做一个系统的介绍,我们主要关注他的设计,尤其是应对大规模图计算的设计。这篇文章将会介绍DGL的核心概念 — 消息传递机制,并且使用DGL框架实现GCN算法。 DGL 核心 — 消息传递 ...

Read more