Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

路 王淑婷 李泽南作者

比DGL快14倍:PyTorch图神经网络库PyG上线了

图神经网络是最近 AI 领域最热门的方向之一,很多图神经网络框架如 graph_netsDGL 已经上线。但看起来这些工具还有很多可以改进的空间。近日,来自德国多特蒙德工业大学的研究者们提出了 PyTorch Geometric,该项目一经上线便在 GitHub 上获得 1500 多个 star,并得到了 Yann LeCun 的点赞。现在,创建新的 GNN 层更加容易了。

项目链接:https://github.com/rusty1s/pytorch_geometric
LeCun评价:一个快速且漂亮的几何深度学习库(适用于图神经网络与其他不规则结构)

PyTorch Geometric 主要是现有模型快速重新实现的集合(具有定制化的稀疏操作),如果你想尝试一下特定的已发布模型,它会是一个很不错的选择;如果想实现更为复杂的结构,其自定义稀疏/分散操作也非常方便。

PyTorch Geometric是基于PyTorch构建的深度学习库,用于处理不规则结构化输入数据(如图、点云、流形)。除了一般的图形数据结构和处理方法外,它还包含从关系学习到3D数据处理等领域中最新发布的多种方法。通过利用稀疏 GPU 加速、提供专用的 CUDA 内核以及为不同大小的输入样本引入高效的小批量处理,PyTorch Geometric 实现了很高的数据吞吐量。

PyTorch Geometric(PyG)库包含易用的小批量加载器(mini-batch loader)、多GPU支持、大量常见基准数据集和有用的变换,适用于任意图像、三维网格(3D mesh)和点云。

其作者Matthias Fey 和 Jan E. Lenssen 来自德国多特蒙德工业大学,他们通过实验证明了该库已实现方法在图分类、点云分类、半监督节点分类等任务上的性能。此外,PyG 速度奇快,大大超过其它深度图神经网络库,如 DGL。

简单易用

PyTorch Geometric大大简化了实现图卷积网络的过程。比如,它可以用以下几行代码实现一个层(如edge convolution layer):

速度快

PyTorch Geometric 速度非常快。下图展示了这一工具和其它图神经网络库的训练速度对比情况:
最高比 DGL 快 14 倍!

已实现方法多

PyTorch Geometric 目前已实现以下方法,所有实现方法均支持 CPU 和 GPU 计算:

PyG 概览

图神经网络(GNN)最近成为在图、点云和流形上进行表征学习的强大方法。与规则域中常用的卷积层和池化层概念类似,GNN通过传递、变换和聚合信息来 (层级化地)提取局部嵌入。

但是,实现GNN并不容易,因为它需要在不同大小的高度稀疏与不规则数据上实现较高的GPU吞吐量。PyTorch Geometric (PyG) 是基于Pytorch构建的几何深度学习扩展库。它可以利用专门的CUDA内核实现高性能。在简单的消息传递API之后,它将大多数近期提出的卷积层和池化层捆绑成一个统一的框架。所有的实现方法都支持 CPU 和 GPU 计算,并遵循不变的数据流范式,这种范式可以随着时间的推移动态改变图结构。PyG已在MIT许可证下开源,它具备完备的文档,且提供了附带教程和示例。

PyG 用节点特征矩阵 X ∈ ℝ^(N×F) 和稀疏邻接元组(I,E)来表示图 G = (X, (I, E)),其中 I ∈ ℕ^(2×E) 以坐标(COO)格式编码边索引,E ∈ ℝ^(E×D)(可选地)保留D维边特征。所有面向用户的API(如数据加载路径、多GPU支持、数据增强或模型实例化)都受到了PyTorch的极大启发,以让用户尽可能地熟悉它们。

邻域聚合(neighborhood aggregation)。将卷积运算泛化至不规则域通常表示为邻域聚合或消息传递方案(Gilmer et al., 2017)

其中 ⬚ 表示可微置换不变函数(permutation invariant function),如求和、均值或最大值,r 和 表示可微函数 ,如MLP。实践中,r 和 的逐元素计算可以通过收集和散射节点特征、利用广播来实现,如图1所示。尽管该方案处理的是不规则结构化输入,但它依然可以通过GPU实现大幅加速。

图 1:GNN 层计算方法。利用基于边索引 I 的收集和散射方法,从而在节点并行空间(parallel space)和边并行空间之间进行交替。 

PyG为用户提供通用的MessagePassing接口,以便对新的研究想法进行快速干净的原型制作。此外,几乎所有近期提出的邻域聚合函数都适用于此接口,其中包括PyG已经集成的方法。

全局池化PyG提供多种readout函数(如global add、mean 或 max pooling),从而支持图级别输出,而非节点级别输出。PyG还提供更加复杂的方法,如 set-to-set (Vinyals et al., 2016)、sort pooling (Zhang et al., 2018) 和全局软注意力层 (Li et al., 2016)。

层级池化(Hierarchical Pooling)。为进一步提取层级信息和使用更深层的GNN模型,需要以空间或数据依赖的方式使用多种池化方法。PyG目前提供Graclus、voxel grid pooling、迭代最远点采样算法(iterative farthest point sampling algorithm)的实现示例,以及可微池化机制(如DiffPool和top_k pooling)。

小批量处理。PyG 可自动创建单个(稀疏)分块对角邻接矩阵(block-diagonal adjacency matrix),并在节点维度中将特征矩阵级联起来,从而支持对多个(不同大小)图实例的小批量处理。正因如此,PyG可在不经修改的情况下应用邻域聚合方法,因为不相连的图之间不会出现信息交流。此外,自动生成的 assignment 向量可确保节点级信息不会跨图聚合,比如当执行全局聚合运算时。

处理数据集。PyG提供统一的数据格式和易用的接口,方便使用者创建和处理数据集,大型数据集和训练期间可保存在内存中的数据集皆可适用。要想创建新数据集,用户只需读取/下载数据,并转换为PyG数据格式即可。此外,用户可以使用变换(transform,即访问单独的多个图并对其进行变换)方法来修改数据集,比如数据增强、使用合成结构化图属性来增强节点特征等,从而基于点云自动生成图,或者从网格中自动采样点云。

PyG目前支持大量常见基准数据集,它们均可在第一次初始化时自动下载和处理。具体来讲,PyG提供60多个 graph kernel 基准数据集 (Kersting et al., 2016),如 PROTEINS 或 IMDB-BINARY、引用网络数据集 Cora、CiteSeer、PubMed 和 Cora-Full (Sen et al., 2008; Bojchevski & Günnemann, 2018)、Coauthor CS/Physics 和 Amazon Computers/Photo 数据集 (Shchur et al. (2018)、分子数据集 QM7b (Montavon et al., 2013) 和 QM9 (Ramakrishnan et al., 2014),以及Hamilton 等人 (2017) 创建的蛋白质相互作用图。此外,PyG还提供嵌入式数据集,如MNIST超像素 (Monti et al., 2017)、FAUST (Bogo et al., 2014)、ModelNet10/40 (Wu et al., 2015)、ShapeNet (Chang et al., 2015)、COMA (Ranjan et al., 2018),以及 PCPNet 数据集 (Guerrero et al., 2018)。

实证评估

半监督节点分类
表 1:多个模型使用固定分割和随机分割的半监督节点分类结果。

图分类
表 2:图分类。

点云分类
表3:点云分类。


看起来,图神经网络框架的竞争正愈发激烈起来,PyTorch Geometric 也引起了 DGL 创作者的注意,来自 AWS 上海 AI 研究院的 Ye Zihao 对此评论道:「目前 DGL 的速度比 PyG 慢,这是因为它 PyTorch spmm 的后端速度较慢(相比于 PyG 中的收集+散射)。在 DGL 的下一个版本(0.2)中,我们将报告新的模型训练速度数据,并提供基准测试脚本。我们还将提供定制内核支持以加速 GAT,敬请期待!」

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

理论PyTorch图神经网络PyTorch GeometricDGL
7
相关数据
深度学习技术

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

池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

表征学习技术

在机器学习领域,表征学习(或特征学习)是一种将原始数据转换成为能够被机器学习有效开发的一种技术的集合。在特征学习算法出现之前,机器学习研究人员需要利用手动特征工程(manual feature learning)等技术从原始数据的领域知识(domain knowledge)建立特征,然后再部署相关的机器学习算法。虽然手动特征工程对于应用机器学习很有效,但它同时也是很困难、很昂贵、很耗时、并依赖于强大专业知识。特征学习弥补了这一点,它使得机器不仅能学习到数据的特征,并能利用这些特征来完成一个具体的任务。

图神经网络技术

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

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