周金晶嘉宾萝卜兔编辑

DGL 作者答疑!关于 DGL 你想知道的都在这里

嘉宾简介

亚马逊上海人工智能研究院工程师,Deep Graph Library作者之一。


DGL 框架是由纽约大学和 AWS 工程师共同开发的开源框架,旨在为大家提供一个在图上进行深度学习的工具,帮助大家更高效的实现算法。

神经网络在这两年很热,学术论文从 2016 年开始,增长相当迅速。而今年,可以说是该研究方向集中爆发的一年,像 ICML 有 30~50 篇论文是专门研究图学习的。


关于图学习的一些基础知识,我们在之前的一些文章中都有详细的介绍,大家可以参考《浅析图卷积神经网络

图广泛的应用

我们来看一个具体的例子,在自然语言中有一个非常火的模型叫 Transformer ,Transformer 本身就可以看作是一个 Graph。通过在图上不断的操作来更新每个节点的信息。

如上图所示,左边是 Transformer 的整个流程,右图是将 Transformer 看成 Graph 后的拓扑结构。在 Transformer 中,它的 encoder 是一个全连接的神经网络,就是任意两个节点之间都有一条边,而且是一个有向图,会有双向的边。在 decoder 的部分,因为是一个一个 token 来解码的,所以前面的词不知道后面词的信息。所每个节点只有它之前的节点指向它的边,而没有它后面的节点指向它的边。

综合起来看,编码器和解码器之间是一个完全的二分图。

这里也涉及到了我们组的另外两个工作,一个叫 star transformer ,主要目的是减少原来的 Transformer 的计算代价。主要想法是通过一个中心节点聚合所有节点的信息,然后再通过这个中心节点将信息发出去。效果挺好,这篇论文被 NAACL 2019 收录。另外一项工作是 SegTree-Transformer 还在审稿中,后续如果有结果,会和大家详细分享。

Star-Transformer:

https://arxiv.org/pdf/1902.09113.pdf

DGL 框架设计理念

用现有的一些框架比如 TensorFlow、Pytorch、MXNet 等实现神经网络模型都不太方便,同样现有框架实现神经网络模型的速度不够快。

上面三个例子中都是速度不够或者内存有溢出的情况。为什么神经网络模型在之前的一些框架中不容易编写呢?

因为很多神经网络的模型,可以看作是消息传递的过程,每一个节点会发出它自己的消息,也会接受来自其它节点的消息。然后在得到所有信息之后做聚合,计算出节点新的表示。原有的深度学习框架都是进行张量运算,但是图很多时候并不能直接表示成一个完整的张量,需要手动补零,这其实很麻烦,不高效。


DGL

DGL 是基于现有框架,帮助用户更容易实现神经网络模型。黑色框都是已经实现的,灰色框是还未实现的计划之中的。DGL 现在主要是以消息传递的接口作为核心,同时提供图采样以及批量处理图的接口。

使用 DGL 与没有使用的计算速度对比

如何使用 DGL

DGL 消息传递 API

DGL 的 API 主要有两部分,一是 message function(消息函数),二是 reduce function(累和函数)。

消息函数通过边获得变量,用 e.src.data 获得这条边出发节点的特征信息,通过 e.dst.data 获得目标节点的特征信息。边也拥有自己的特征信息,如上图中的 e.data。消息函数可以获得出发节点和目标节点的特征信息,描述了需要发给目标节点做下一步计算的信息。

上图描述了消息传递模型,消息函数把节点 1 和节点 2 的信息都发送给节点 3 ,可以发送的信息包括v1v2 和 v3 以及每条边上的信息。

目标节点在获得其他节点以及边的特征信息之后,通过累和函数计算出一个新的表示。通过上图可以看到,累和函数获得了消息函数传递过来的信息 M13M23 同时还有自身的节点信息。上述的整个过程就是 DGL 现有的核心。

比如一个最简单的神经网络案例。每个节点获得所有邻居节点的特征信息求和,并通过一个非线性函数得到该节点新的表示。


具体的实现过程

消息融合

graph data 有一个特点,就是它的边会远多于节点的数量,比如说节点有 100个,但是边可能有 2000,甚至更多。按照上面的方法处理,每一个节点的信息都要先拷贝到边上,再发给目标节点,在这个过程中,很多拷贝是重复的,因为一个节点可以有多条边。也即消息张量的大小会正比于图中边的数量。所以当图增大的时候,消息张量消耗的内存空间也会显著上升,可能是 O(n2)。

比如模型 GraphSage 中 Reddit 的数据:

内存使用量骤增 500 倍

DGL 的解决方法是消息融合(Fuse Message Passing)。

对所有邻居节点的特征信息求和等于邻接矩阵乘上特征张量。所以我们提供了一个矩阵乘法的优化,这样更加高效。

消息融合的不足之处:支持的函数有限。下一个版本的改进方案:

图批量功能

图批量功能(Batch Multiple Graphs),将 n 张小图打包在一起的操作可以看成是生成一张含 n 个不相连小图的大图。这个方法可以实现线性加速。

巨图训练

未来神经网络计算量会很大,会需要采样和分布式。这个还在开发当中......


开发路线图

新版本发布地址:

https://github.com/dmlc/dgl/issues/450

问答

1. 感觉DGL这个框架没有pyG支持的model多,以后会支持更多模型吗?比如各类GAE现在基本没有?

回答:是的,但是大家目前都在忙于开发新功能。暑假会有实习生加入之后会添加更多模型,如果希望我们实现一些模型,可以直接在我们 issue 里提。

2. 可以处理构建的加权图吗?

回答:支持的,权重还可以是向量。因为 DGL 在边上也会存储数据。

3. 会支持 GraphSage 吗?

回答:已经提供了 GraphSage。

4. 请问您怎么看待GCN作者从谱的角度来考虑和DGL从消息发送和累和的角度的区别?

回答:GCN谱推导很有意思,我觉得是不同的角度,前两天有一篇说GCN都是low pass filter。

5. 异构图什么时候可以支持?

回答:异构图我们接口已经确定了,可以在仓库的pr 里找到,完全实现加测试可能还要两个月。

6. 有图分类的吗?

回答:图分类有,我们的tutorial里有个toy example。

7. mailbox['m']的size具体是什么?

回答:mailbox 第一维是 bucket size 我这里没写,就是 dgl 会把度一样的节点 batch 在一起。

8. 内建函数的功能是固定的吗,只能发送头节点信息和求和?

回答:内建函数支持 sum max min prod,发送支持copy_src,src_mul_edge,copy_edge。但是 reduce 其实能任意写,就是没有 builtin 那么快。你拿了邻居特征之后想怎么写都行。

9. 这样内建 message 函数是不是反而是一种限制?

回答:也可以不用内建的啊,内建的 message+reduce 会被 fuse 用我们自己写的kernel。

10. Star-Transformer 中的 Position Embedding 有 DGL 实现吗?

回答:transformer 的 positional encoding 就参考 transformer 的吧,我们 tutorial 里有提到,详细的可以看专门介绍 transformer 的教程。

参考资料:

https://arxiv.org/abs/1810.04805

https://arxiv.org/pdf/1706.03762.pdf

11. 百亿边的图, 能用DGL跑么?

回答:能,我上面有提到单机跑5亿点250亿边的情况。就是要内存很大的实例。

极验
极验

极验是全球顶尖的交互安全技术服务商,于2012年在武汉成立。全球首创 “行为式验证技术” ,利用生物特征与人工智能技术解决交互安全问题,为企业抵御恶意攻击防止资产损失提供一站式解决方案。

入门图神经网络
1
相关数据
AWS机构

亚马逊网络服务系统(英语:Amazon Web Services,缩写为AWS),由亚马逊公司所创建的云计算平台,提供许多远程Web服务。Amazon EC2与Amazon S3都架构在这个平台上。在2002年7月首次公开运作,提供其他网站及客户端(client-side)的服务。截至2007年7月,亚马逊公司宣称已经有330,000名开发者,曾经登录过这项服务。

相关技术
亚马逊机构

亚马逊(英语:Amazon.com Inc.,NASDAQ:AMZN)是一家总部位于美国西雅图的跨国电子商务企业,业务起始于线上书店,不久之后商品走向多元化。目前是全球最大的互联网线上零售商之一,也是美国《财富》杂志2016年评选的全球最大500家公司的排行榜中的第44名。

https://www.amazon.com/
相关技术
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

图神经网络技术

图网络即可以在社交网络或其它基于图形数据上运行的一般深度学习架构,它是一种基于图结构的广义神经网络。图网络一般是将底层图形作为计算图,并通过在整张图上传递、转换和聚合节点特征信息,从而学习神经网络基元以生成单节点嵌入向量。生成的节点嵌入向量可作为任何可微预测层的输入,并用于节点分类或预测节点之间的连接,完整的模型可以通过端到端的方式训练。

MXNet技术

MXNet是开源的,用来训练部署深层神经网络的深度学习框架。它是可扩展的,允许快速模型训练,并灵活支持多种语言(C ++,Python,Julia,Matlab,JavaScript, Go,R,Scala,Perl,Wolfram语言)

图卷积神经网络技术

图卷积神经网络(Graph Convolutional Network)是一种能对图数据进行深度学习的方法。GCN的三个主要特征:它是卷积神经网络在 graph domain 上的自然推广;它能同时对节点特征信息与结构信息进行端对端学习;适用于任意拓扑结构的节点与图;

推荐文章
暂无评论
暂无评论~