发布者DGL Team

NYU、AWS联合推出:全新图神经网络框架DGL正式发布

深度神经网络在近年来的发展和成功有目共睹。这些网络架构成功的一个重要原因在于其能有效地捕捉到了数据内在的相关性,并在不同的抽象级别构建表示 (representation)。比如 CNN 刻画了图片中相邻像素点间的空间不变性;RNN 抓住了文本数据的有序线性结构。

CNN 和 RNN 的成功让人思考——我们是否能将此思想拓展到其他结构的数据上呢?事实上,人们一直在探索如何将深度学习应用于更广泛的结构数据中。早在 2014 年,Kai Sheng Tai 等人就研究了能在文本语法树上训练的树神经网络模型 TreeLSTM。这个工作在一定程度上冲击了大家用 RNN 处理文本的范式,并且用树型结构看待文本数据开创了很多新的研究可能。从链表到树,从树到图:近年来,对于图神经网络(Graph Neural Network)的研究热潮使得神经网络的应用领域大大增加。

小到分子结构图([Gilmer et al., 2017], [Jin et al., 2018]),大到知识图谱([Schlichtkrull et al., 2017])、社交网络和推荐系统([Ying et al., 2018]),图神经网络都展现了强大的应用潜力。

广义上说,没有一个点的特征表达是孤立的;丰富特征的一个重要手段必然是融合该点和其他邻居点的互动。从这个意义上来说,CNN 和 RNN 分别把空间和时间上的相邻点看作互动对象是非常粗糙的。把图和深度学习结合的意义正在于突破这个局限。

由于结构数据的普适性,Google, Deepmind, Pinterest 等公司也纷纷在这一领域发力。除了数据,深度神经网络模型的发展也有着更加动态和更加稀疏的趋势。这源于目前深度神经网络对于算力的需求已经达到了一个惊人的地步。同时,我们观察到现在还没有一个框架既高效,又好用,能帮助开发新的模型。

(比如目前火热的 BERT 模型在一台 8 块 V100 的服务器上预计训练时间是 42 天。)

于是一个很现实的问题是如何设计「既快又好」的深度神经网络?也许更加动态和稀疏的模型会是答案所在。可见,不论是数据还是模型,「图」应该成为一个核心概念。

基于这些思考,我们开发了 Deep Graph Library(DGL),一款面向图神经网络以及图机器学习的全新框架。

在设计上,DGL 秉承三项原则:

  1. DGL 必须和目前的主流的深度学习框架(PyTorchMXNetTensorFlow 等)无缝衔接。从而实现从传统的 tensor 运算到图运算的自由转换。

  2. DGL 应该提供最少的 API 以降低用户的学习门槛。

  3. 在保证以上两点的基础之上,DGL 能高效并透明地并行图上的计算,以及能很方便地扩展到巨图上。

这里,我们简单介绍 DGL 是如何实现以上目标的。

设计一:DGL 是一个「框架上的框架」

神经网络计算的重要核心是稠密张量计算和自动求导。当前神经网络框架对此都已经有了非常良好的支持。此外,由于神经网络模型的日益模块化,用户对于这些深度学习的框架的黏性度也越来越高。

为了避免重复造轮子(build a wheel again),DGL 在设计上采取了类似 Keras 的做法——基于主流框架之上进行开发。但又不同于 Keras,DGL 并不限制用户必须使用自己的语法。相反,DGL 鼓励用户在两者间灵活地使用。比如用户可以使用他们偏爱的框架编写常见的卷积层和注意力层,而当遇到图相关的计算时则可以切换为 DGL。用户通过 DGL 调用的计算,经过系统优化,仍然调用底层框架的运算和自动求导等功能,因此开发和调试都能更快上手。用户和 DGL 的交互主要通过自定义函数 UDF(user-defined function)。在下一节编程模型我们将继续展开。目前 DGL 支持 Pytorch 以及 MXNet/Gluon 作为系统后端。

设计二:基于「消息传递」(message passing)编程模型

消息传递是图计算的经典编程模型。原因在于图上的计算往往可以表示成两步:

  1. 发送节点根据自身的特征(feature)计算需要向外分发的消息。

  2. 接受节点对收到的消息进行累和并更新自己的特征。

比如常见的卷积图神经网络 GCN(Graph Convolutional Network)可以用下图中的消息传递模式进行表示(图中 h 表示节点各自的特征)。用户可以定制化消息函数(message function),以及节点的累和更新函数(reduce function)来构造新的模型。事实上,在 Google 的 2017 年的论文中 [Gilmer et al. 2017] 将很多图神经网络都归纳到了这一体系内。

DGL 的编程模型正基于此。以下是图卷积网络在 DGL 中的实现(使用 Pytorch 后端):

可以看到,用户可以在整个程序中灵活地使用 Pytorch 运算。而 DGL 则只是辅助地提供了诸如 mailbox、send、recv 等形象的消息传递 API 来帮助用户完成图上的计算。在我们内部的项目预演中,我们发现熟悉深度学习框架的用户可以很快上手 DGL 并着手开发新模型。

设计三:DGL 的自动批处理(auto-batching)

好的系统设计应该是简单透明的。在提供用户最大的自由度的同时,将系统优化最大程度地隐藏起来。图计算的主要难点在于并行。

我们根据模型特点将问题划分为三类。首先是处理单一静态图的模型(比如 citation graph),其重点是如何并行计算多个节点或者多条边。DGL 通过分析图结构能够高效地将可以并行的节点分组,然后调用用户自定义函数进行批处理。相比于现有的解决方案(比如 Dynet 和 TensorflowFold),DGL 能大大降低自动批处理的开销从而大幅提高性能。

第二类是处理许多图的模型(比如 module graph),其重点是如何并行不同图间的计算。DGL 的解决方案是将多张图合并为一张大图的多个连通分量,从而将该类模型转化为了第一类。

第三类是巨图模型(比如 knowledge graph),对此,DGL 提供了高效的图采样接口,将巨图变为小图样本,从而转化为第一类问题。

目前 DGL 提供了 10 个示例模型,涵盖了以上三种类别。其中除了 TreeLSTM,其余都是 2017 年以后新鲜出炉的图神经网络,其中包括几个逻辑上相当复杂的生成模型(DGMG、JTNN)我们也尝试用图计算的方式重写传统模型比如 Capsue 和 Universal Transformer,让模型简单易懂,帮助进一步扩展思路。

我们也对 DGL 的性能进行了测试:

可以看到,DGL 能在这些模型上都取得了相当好的效果。我们也对 DGL 在巨图上的性能进行了测试。在使用 MXNet/Gluon 作为后端时,DGL 能支持在千万级规模的图上进行神经网络训练。

DGL 现已开源。

  • 主页地址:http://dgl.ai

  • 项目地址:https://github.com/jermainewang/dgl

  • 初学者教程:https://docs.dgl.ai/tutorials/basics/index.html

  • 所有示例模型的详细从零教程:https://docs.dgl.ai/tutorials/models/index.html

我们欢迎任何来自社区的贡献,同时也希望能和大家一起学习进步,推动结构化深度学习这一个新方向。

DGL 项目由纽约大学、纽约大学上海分校、AWS 上海研究院以及 AWS MXNet Science Team 共同开发(详见 https://www.dgl.ai/ack)。

工程图神经网络AWS纽约大学
3
相关数据
AWS机构

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

相关技术
深度学习技术

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

基于Transformer 的双向编码器表征技术

BERT是谷歌发布的基于双向 Transformer的大规模预训练语言模型,该预训练模型能高效抽取文本信息并应用于各种NLP任务,并刷新了 11 项 NLP 任务的当前最优性能记录。BERT的全称是基于Transformer的双向编码器表征,其中“双向”表示模型在处理某一个词时,它能同时利用前面的词和后面的词两部分信息。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

TensorFlow技术

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

张量技术

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

知识图谱技术

知识图谱本质上是语义网络,是一种基于图的数据结构,由节点(Point)和边(Edge)组成。在知识图谱里,每个节点表示现实世界中存在的“实体”,每条边为实体与实体之间的“关系”。知识图谱是关系的最有效的表示方式。通俗地讲,知识图谱就是把所有不同种类的信息(Heterogeneous Information)连接在一起而得到的一个关系网络。知识图谱提供了从“关系”的角度去分析问题的能力。 知识图谱这个概念最早由Google提出,主要是用来优化现有的搜索引擎。不同于基于关键词搜索的传统搜索引擎,知识图谱可用来更好地查询复杂的关联信息,从语义层面理解用户意图,改进搜索质量。比如在Google的搜索框里输入Bill Gates的时候,搜索结果页面的右侧还会出现Bill Gates相关的信息比如出生年月,家庭情况等等。

推荐系统技术

推荐系统(RS)主要是指应用协同智能(collaborative intelligence)做推荐的技术。推荐系统的两大主流类型是基于内容的推荐系统和协同过滤(Collaborative Filtering)。另外还有基于知识的推荐系统(包括基于本体和基于案例的推荐系统)是一类特殊的推荐系统,这类系统更加注重知识表征和推理。

神经网络技术

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

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

图神经网络技术

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

MXNet技术

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

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

长短期记忆网络技术

长短期记忆(Long Short-Term Memory) 是具有长期记忆能力的一种时间递归神经网络(Recurrent Neural Network)。 其网络结构含有一个或多个具有可遗忘和记忆功能的单元组成。它在1997年被提出用于解决传统RNN(Recurrent Neural Network) 的随时间反向传播中权重消失的问题(vanishing gradient problem over backpropagation-through-time),重要组成部分包括Forget Gate, Input Gate, 和 Output Gate, 分别负责决定当前输入是否被采纳,是否被长期记忆以及决定在记忆中的输入是否在当前被输出。Gated Recurrent Unit 是 LSTM 众多版本中典型的一个。因为它具有记忆性的功能,LSTM经常被用在具有时间序列特性的数据和场景中。

深度神经网络技术

深度神经网络(DNN)是深度学习的一种框架,它是一种具备至少一个隐层的神经网络。与浅层神经网络类似,深度神经网络也能够为复杂非线性系统提供建模,但多出的层次为模型提供了更高的抽象层次,因而提高了模型的能力。

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