数据结构论坛

首页 » 分类 » 问答 » 七个用于图形深度学习的开源代码库
TUhjnbcbe - 2024/5/15 16:29:00

如果你是一名深度学习的爱好者,那么可能已经熟悉一些基本的数学原语,这些原语推动了具有强大功能的深度神经网络的发展。尽管很多人喜欢将基本的人工神经网络视为具有一些加权连接的一些节点,但将神经网络视为矩阵乘法在计算上更有效。

公共领域的多层感知器

这种类型的神经网络是一种前馈多层感知器(MLP)。如果想让计算机计算这个模型的前向传递,它将在隐藏层中使用矩阵乘法和某种非线性数据。

前馈多层感知器(MLP)非常适合可以自然形成的一维向量数据。虽然很简洁,但是当数据样本很大时,前馈多层感知器(MLP)会采用大量参数,这对于处理高维数据(如2D图像或3D体积)来说并不是一种非常有效的方法。2D类似数据的图像自然适用于卷积运算,其中权重应用于整个图像的局部邻域,而不是赋予层之间的每个点对点连接自己的权重。这种类型的权重共享有许多优点,其中包括平移等方差、正则化和参数效率等。

卷积可以实现可视化。当然,开发人员现在不可能采用人工执行这些操作,他们想要的是一种能够以计算机友好的方式在每个图像通道上快速执行卷积的算法。

卷积运算再次实现为矩阵的乘法,尽管这次是按元素进行的。这要归功于傅里叶变换的卷积定理,它指出傅里叶域中的乘法与空间域中的卷积有关。但是,当开发人员感兴趣的数据不是特别适合表示为1D矢量或2D/3D图像,而是自然地表示为图形时会发生什么?

就开发人员的目的而言,图形是由边连接的节点的集合,边可以具有自己的属性,例如权重或方向性,并且节点通常具有某种状态或特征,就像前馈多层感知器(MLP)中的节点激活一样。

在图形神经网络中,每个“层”只是图节点状态的快照,这些状态通过与每个节点及其相邻节点相关的操作更新连接,例如作为节点之间边的神经网络。

如果想使用图神经网络在图形结构数据上取得令人印象深刻的结果,就像卷积神经网络对图像进行深度学习所做的那样,需要采用在计算机上实现这些模型的有效方法。这通常意味着需要一种方法将概念图神经网络框架转换为适用于现代深度学习的东西。

图形卷积网络

那么怎么可能将图形神经网络的复杂思想转换为矩阵乘法的另一种形式?表示连接的一种方法是使用邻接矩阵。顾名思义,邻接矩阵描述了图中哪些节点彼此相邻(即通过边彼此连接)。

但是图形神经网络需要对具有任意结构的图形进行操作,因此不能期望每次输入的数据都有相同的邻接矩阵,甚至每个邻接矩阵都有相同的维数。开发人员可以通过将多个样本的邻接矩阵对角组合成一个更大的矩阵来描述一批中的所有连接来处理这个问题。

这使开发人员能够在一个批次中处理具有不同结构的多个图,他们会注意到其公式也会导致节点之间的权重共享。还有一些更多的细节:邻接矩阵应该被归一化,这样特征尺度不会完全改变,除了在这里讨论的图形卷积神经网络(GNN)方法之外,还有其他的图卷积方法,但是这是理解图形卷积神经网络(GNN)前向传递的一个很好的起点。

这足以在图形上实施深度学习所需的数据准备和数学运算。幸运的是,对图形结构数据深度学习的兴趣推动了许多用于图形深度学习的开源库的开发,为研究人员和工程师提供了更多的认知空间,使他们专注于架构、实验和应用。

以下对7个新兴的图形深度学习开源代码库进行介绍,并按受欢迎程度进行从低向高排列。

7.GeometricFlux.jl

这个列表中的大多数条目都使用Python,并构建在TensorFlow、PyTorch或JAX之上,这反映了图形深度学习语言的主导地位。然而,其第一个条目是一个基于Julia编程语言的Flux深度学习框架的图形神经网络开源库。

由于从业者的数量相对较少,人们可能会放弃GeometricFlux.jl,甚至放弃使用Julia语言进行深度学习的整个想法,但它是一种不断发展的语言,与Python相比具有许多技术优势。人们很难预料到,DeepMind会在几年前开始放弃TensorFlow,转而支持JAX,同样在短短几年内,人们可能会看到Julia语言开始取代Python作为标准机器学习语言。

Julia编程语言从一开始就被设计为既高效(如Python)又快速(像C等编译语言一样)。Julia语言使用即时编译来实现快速执行速度,而其read-execute-print循环(REPL)使得交互式和迭代编程具有相当高的效率。当用户第一次运行代码时,会注意到一点延迟,特别是当习惯于以一种特别交互式的方式使用Python时(比如在Jupyter记事本中),但是随着时间的推移,给定工作流的速度会显著提高。

Julia被设计为一种科学编程语言,在过去五年的时间,自动微分软件包有了长足的发展。最终结果是其功能可以将诸如DifferentialEquations.jl包等以研究为中心的库与机器学习功能相结合,正如人们在神经微分方程包DiffEqFlux.jl中看到的那样。GeometricFlux.jl也是如此,它旨在与图论研究JuliaGraphs生态系统以及Flux的其他部分相兼容。

如果在工作中使用图形深度学习,那么坚持使用基于PyTorch的库或用于其他项目的深度学习标准工作框架可能是最有效的。但是,如果是从头开始或进行研究,GeometricFlux.jl为使用Julia进行图深度学习和可微编程提供了一个引人注目的切入点。该库友好的MIT许可证还可以轻松构建和贡献开发人员需要的工具,或解决项目GitHub存储库中的一些未解决的问题。

6.PyTorchGNN

PyTorchGNN库是微软公司的图形深度学习库,在年5月发布之后仍在积极开发0.9.x版本。PyTorchGNN(PTGNN)旨在让熟悉基于PyTorch构建模型的用户容易熟悉torch.nn.Module类,并处理数据加载器的工作流任务。并将图形转换为PyTorch-readytensors。

PTGNN基于一个有趣的架构,称为AbstractNeuralModel。这个类封装了训练图神经网络的整个过程,包括张量化和预处理原始数据,还包括从PyTorch的nn.Module类中提取的实际神经模型子类TNeuralModule。神经模块可以独立于AbstractNeuralModel对象使用,事实上,如果需要的话,可以与其他类型的Pytork模块/层结合使用。

PTGNN比GeometricFlux.jl推出略晚,提交历史不太活跃,但是GitHub的Star和Fork稍微多一些。它具有相同的宽松和开源MIT许可证,但如果正在寻找一个可以贡献的项目,则需要大量的自我指导和学习。GitHub上的“问题”选项卡几乎没有提供需要修复或实施的内容方向。

PTGNN在其构造中有一些有趣的设计元素,可能会对其使用或使用感兴趣,但如果开发人员是图形神经网络爱好者,并正在寻找基于PyTorch的图深度学习库,那么可以使用PyTorchGeometric。PyTorchGeometric更加成熟,已经开发了大约4年的时间,并且拥有一个成熟且不断增长的用户和开发者社区。

5.Jraph

人们可能已经注意到DeepMind在年12月发表的一篇博客文章,描述了他们在开发和使用基于功能可微编程库JAX的深度学习研究库的强大生态系统方面所做的持续努力。JAX是最初作为Python(尤其是NumPy)中简单但几乎通用的自动微分学术项目Autograd的概念产物推出的。

在谷歌公司招募到几位最初负责Autograd开发的程序人员之后,他们开发了JAX。JAX是一个有趣的包,这在很大程度上归功于它对可组合函数式编程范例的重视。它还

1
查看完整版本: 七个用于图形深度学习的开源代码库