当前位置: 首页 > 科技观察

七个用于图形深度学习的开源代码库

时间:2023-03-12 05:27:40 科技观察

深度神经网络图开发中用于深度学习的七个开源代码库。尽管许多人喜欢将基本的人工神经网络视为具有某些加权连接的几个节点,但将神经网络视为矩阵乘法在计算上更有效。公共领域中的多层感知器这种类型的神经网络是前馈多层感知器(MLP)。如果你想让计算机计算这个模型的前向传递,它将使用矩阵乘法和隐藏层中的某种非线性数据。前馈多层感知器(MLP)非常适合可自然形成的一维矢量数据。当数据样本很大时,整洁的前馈多层感知器(MLP)会采用大量参数,这不是处理2D图像或3D体积等高维数据的非常有效的方法。类似于二维数据的图像自然适用于卷积运算,其中权重应用于整个图像的局部邻域,而不是为层之间的每个点对点连接赋予自己的权重。这种类型的权重共享有很多优点,包括平移、正则化和参数效率等方差等。卷积可以可视化。当然,今天开发人员不可能手动执行这些操作,他们想要的是一种能够以计算机友好的方式快速对每个图像通道执行卷积的算法。卷积运算再次实现为矩阵的乘法,尽管这次是逐元素的。这要归功于傅立叶变换的卷积定理,该定理指出傅立叶域中的乘法与空间域中的卷积有关。但是,当开发人员感兴趣的数据不是特别适合表示为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语言使用即时编译来实现快速的执行速度,其读取-执行-打印循环(REPL)使交互式和迭代式编程非常高效。当用户第一次运行代码时,他们会注意到有点延迟,特别是当习惯于以特别交互的方式使用Python时(例如在JupyterNotepad中),但随着时间的推移,给定作业流的速度将显着增加。Julia被设计为一种科学编程语言,自动微分包在过去五年中有了长足的发展。最终结果是可以将以研究为中心的库(例如DifferentialEquations.jl包)与机器学习功能结合起来的功能,正如人们在神经微分方程包DiffEqFlux.jl中看到的那样。GeometricFlux.jl也是如此,它旨在与图论研究JuliaGraphs生态系统以及Flux的其余部分兼容。如果您在工作中使用图形深度学习,那么坚持使用基于PyTorch的库或用于其他项目深度学习的标准工作框架可能是最有效的。但是,如果从头开始或进行研究,GeometricFlux.jl为图形深度学习和使用Julia的可微分编程提供了一个引人注目的切入点。该库友好的MIT许可证还可以轻松构建和贡献开发人员所需的工具,或解决项目GitHub存储库中的一些未解决问题。6.PyTorchGNNPPyTorchGNN库是微软的图深度学习库,0.9.x版本在2020年5月发布后仍在积极开发中。PyTorchGNN(PTGNN)旨在让熟悉构建模型的用户轻松使用基于PyTorch熟悉torch.nn.Module类并处理数据加载器的工作流任务。并将图形转换为PyTorch就绪张量。PTGNN基于一种有趣的架构,称为抽象神经模型。该类封装了训练图神经网络的整个过程,包括张量化和预处理原始数据,还包括从PyTorch的nn.Module类中抽取出来的实际神经模型子类TNeuralModule。神经模块可以独立于抽象神经模型对象使用,事实上,如果需要,可以与其他类型的Pytork模块/层结合使用。PTGNN上线时间略晚于GeometricFlux.jl,commit历史活跃度较低,但GitHub上的Stars和Forks略多。它具有相同的宽松和开源麻省理工学院许可证,但如果您正在寻找可以贡献的项目,则需要大量的自我指导和学习。GitHub上的“问题”选项卡几乎没有说明需要修复或实施的内容。PTGNN在其构造中有一些有趣的设计元素,可能有兴趣使用或使用,但如果开发人员是图形神经网络爱好者并且正在寻找基于PyTorch的图形深度学习库,那么PyTorchGeometric是必经之路.PyTorchGeometric更成熟,已经开发了大约4年,并且拥有成熟且不断增长的用户和开发者社区。5.Jraph人们可能已经注意到DeepMind在2020年12月发表的一篇博文,其中描述了他们正在努力开发和使用基于功能可区分的编程库JAX的深度学习研究库的强大生态系统。JAX最初是作为Autograd的概念产物推出的,Autograd是一个学术项目,用于在Python(尤其是NumPy)中进行简单但几乎通用的自动微分。JAX是在Google招募了几位最初负责Autograd开发的程序员之后开发的。JAX是一个有趣的包,很大程度上是因为它强调可组合的函数式编程范例。它还关注“可微分编程”的一般概念,而不是主要关注TensorFlow或PyTorch等神经网络。尽管PyTorch和TensorFlow都可以用来构建可微物理模型而不是神经网络,但JAX更容易,更适合从一开始就为科学和其他编程任务进行灵活的可微编程。尽管之前花费了大量时间构建基于TensorFlow的工具(例如Sonnet),但JAX产品足以促使DeepMind开始大规模采用和开发。作为DeepMind为深度学习研究开发基于JAX的生态系统所做努力的一部分,他们开发了一个名为Jraph的图形学习库。与此列表中的其他一些库不同,Jraph是一个轻量级和简约的图形学习库,通常不规定特定的使用方法。Jraph继承了其前身GraphNets的一些设计模式,使用TensorFlow和Sonnet构建。也就是说,Jraph使用了与GraphNets相同的GraphsTuple概念,它是一种数据结构,包含描述节点、边和边方向的信息。Jraph处理的另一个特性为使用掩码和填充处理可变结构图提供了特殊的便利。对于此列表中的大多数其他Python库,这不是问题,但由于在JAX中使用了即时编译,所以这是必需的。这保证了图形在JAX中使用,并不意味着放弃JAX在GPU和CPU硬件上提供的执行加速。4.SpektralSpektral是一个基于Tensorflow2和Keras的图深度学习库,它的logo明显是受吃豆人幽灵小人的启发。如果开发人员打算使用基于TensorFlow的库来满足他们的图形深度学习需求,那么Spektral可能是最佳选择。它的目标是易于使用和灵活,同时保留尽可能接近熟悉的KerasAPI的用法。这意味着开发人员甚至可以使用方便的model.fit()方法训练模型,只要提供Spetkral数据加载器来处理定义图形的TensorFlow友好稀疏矩阵的形成。然而,Spektral的易用性是有代价的,与其他主要库DGL和PyTorchGeometric相比,大多数任务的训练速度要慢得多。Spektral已被广泛采用,如果开发人员想要使用TensorFlow构建图形模型,它可能是一个有吸引力的选择。它可能比Deepmind的GraphNets库得到更好的支持,但从各方面来看,它正在被逐步淘汰,取而代之的是基于JAX的Jraph。Spektral在Apache2.0开源许可下发布,并有一个活跃的问题板,定期将请求集中在一起,使这个库成为一个有吸引力的深度学习库。3.GraphNetsGraphNets是Deepmind的另一个图深度学习库。它建立在TensorFlow和Sonnet(另一个DeepMind库)之上,并可能很快被前面描述的基于JAX的Jraph取代。GraphNets需要TensorFlow1,尽管它只有大约3年的历史,但感觉已经过时了。它在GitHub上拥有令人印象深刻的737个Forks和近5,000个Stars,并且与Google/DeepMind的大多数其他库一样,在Apache2.0下获得许可。GraphNets起源于Jraph使用的GraphsTuple数据结构。尽管GraphNets在GitHub上似乎很流行,但它可能不如此列表中的其他库具有吸引力,除非开发人员正在处理已经大量使用该库的现有代码库。对于使用TensorFlow的新项目,Spektral和DGL可能是更好的选择,因为它们是用更新的技术构建的,并且可能会在几年内继续获得支持。2.DeepGraphLibrary(DGL)DGL与微软的PTGNN或Google/DeepMind的Jraph和GraphNets等大型科技公司无关,而是一些深度学习爱好者的产物,名为“分布式深度机器学习社区”。它在GitHub上拥有超过100名贡献者、超过1500次提交和超过7,000颗星。DGL在提供灵活的后端选择方面也在此列表中独树一帜。该模型可以运行PyTorch、TensorFlow或MXNet,同时提供与推动实验的体验大致相似的体验。它是此列表中寿命较长但仍在积极开发中的库之一,其首次提交可追溯到2018年4月。DGL最近被用于构建SE(3)转换器,这是一个功能强大的图形转换器,具有以下差异:旋转和平移可能是AlphaFold2的基石或灵感来源。该模型是已经令人印象深刻的AlphaFold的继承者,AlphaFold是DeepMind在2020年CASP14蛋白质结构预测挑战赛中令人印象深刻的获胜表现背后的明星。这一事件促使多家新闻机构宣布AlphaFold2是第一个解决重大科学挑战的人工智能项目。DGL是围绕Gilmer等人描述的神经消息传递范式构建的。2017年。它提供了一个灵活的框架,涵盖大多数类型的层,用于构建图神经网络。通过阅读代码库和文档,您会发现DGL是一个庞大的项目。这也意味着有许多(近200个)未解决的问题,对于任何希望为图形领域的高影响深度学习项目做出贡献的人来说,这是一个成熟的机会。DGL被用于许多专门的应用程序,以至于在其之上构建了几个额外的库。DGL-LifeSci是为应用于化学和生物信息学的深度学习图构建的库,而DGL-KE是为处理知识图嵌入而构建的。这两个额外的库都是由AWS实验室开发的。1.PyTorchGeometric排在榜首的库是PyTorchGeometric。PyTorchGeometric或PyG是一个成熟的几何深度学习库,拥有超过10,000颗星和4,400次提交,其中大部分是由才华横溢的博士生RuStu1s发起的。PyG提供了一个实现图神经网络的层列表。它不仅可以非常快速地运行深度图网络,而且PyG还可以用于其他类型的几何深度学习,例如点云和基于网格的模型。PyG对带有示例的教程进行了精心编写的介绍,并且自2017年以来一直在开发中。它已经建立并得到了用户社区和140多个贡献者的大力支持。对于以前使用过PyTorch的人来说,使用PyG会非常熟悉,最明显的区别是数据输入的一些差异。与通常的forward(x)编程模式不同,开发人员将习惯于使用forward(batch),其中“batch”是包含描述图形特征和连接的所有信息的数据结构。对于可以自由选择库的新项目,PyTorchGeometric是无可匹敌的。以下是图深度学习的这些开源代码库的比较:如何选择深度学习库很多情况下,开发人员对深度图学习库的选择会受到他自己、他的雇主之前选择的深度学习库的影响,还是他的恩师影响严重。例如,如果您喜欢KerasAPI和TensorFlow,或者需要与预先存在的代码库保持一致的依赖关系,例如,Spektral可能是合适的库。此处不推荐使用DeepMind的GraphNets和TensorFlow1开始一个新项目,但该库仍会偶尔更新,可能是支持遗留项目的合理选择。如果开发人员希望从头开始,可能有几种诱人的选择。如果说JuliaProgramming的审慎生产力+执行速度优先被认为是机器学习和科学编程的未来,那么GeometricFlux.jl将面临令人兴奋的前景。如果您对函数式编程范式感兴趣并希望保留即时编译(如Julia)的一些速度优势,那么使用基于JAX的Jraph是一个更有吸引力的选择。最后,如果想要一个速度快、功能强大、处于相对成熟和发展成熟状态的库,那么PyTorchGeometric将是一个理想的选择。原标题:深度学习图谱的7个开源库,作者:KevinVu