在图上发送消息的神经网络MPNN简介和代码实现

简介: 在图上发送消息的神经网络MPNN简介和代码实现

欢迎来到图神经网络的世界,在这里我们在图上构建深度学习模型。你可以认为这很简单。毕竟,我们难道不能重用使用正常数据的模型吗?

640.png

其实不是。在图中所有的数据点(节点)是相互连接的。这意味着数据不再是独立的,这使得大多数标准的机器学习模型毫无用处,因为它们的推导都强烈地基于这个假设。为了克服这个问题,可以从图中提取数字数据,或者使用直接对这类数据进行操作的模型。

创建直接在图上工作的模型更为理想,因为我们可以获得更多关于图的结构和属性的信息。在本文中,我们将研究一种专门为此类数据设计的架构,即消息传递神经网络(MPNNs)。

模型的各种变体

640.jpg

在将模型标准化为单个MPNN框架之前,几位独立研究人员已经发布了不同的变体。这种类型的结构在化学中特别流行,可以帮助预测分子的性质。

Duvenaud等人在2015年发表了有关该主题的第一批著作之一[1]。他使用消息传递体系结构从图分子中提取有价值的信息,然后将其转换为单个特征向量。当时,他的工作具有开创性,因为他使体系结构与众不同。实际上是最早可以在图上运行的卷积神经网络体系结构之一。

640.png

Duvenaud等人创建的消息传递体系结构。 他将模型定义为可区分的层的堆栈,其中每一层是传递消息的另一轮。修改自[1]

Li等人在2016年对此构架进行了另一尝试[2]。在这里,他们专注于图的顺序输出,例如在图[2]中找到最佳路径。为此,他们将GRU(门控循环单元)嵌入其算法中。

尽管这些算法似乎完全不同,但是它们具有相同的基本概念,即消息在图中的节点之间传递。我们将很快看到如何将这些模型组合成一个框架。

将模型统一到MPNN框架

640.gif

节点V1的消息传递体系结构的一个非常简单的示例。在这种情况下,一条消息是邻居的隐藏状态的总和。更新函数是消息m和h1之间的平均值。

毕竟,MPNN背后的想法在概念上很简单。

图中的每个节点都具有隐藏状态(即特征向量)。对于每个节点Vt,我们将隐藏状态的函数以及所有相邻节点的边缘与节点Vt本身进行聚合。然后,我们使用获得的消息和该节点的先前隐藏状态来更新节点Vt的隐藏状态。

有3个主要方程式定义图[3]上的MPNN框架。从相邻节点获得的消息由以下公式给出:

640.png

从邻居节点获取消息。

它是从邻居获得的所有消息Mt的总和。Mt是取决于隐藏状态和相邻节点边缘的任意函数。我们可以通过保留一些输入参数来简化此功能。在上面的示例中,我们仅求和不同的隐藏状态hw。

然后,我们使用一个简单的方程式更新节点Vt的隐藏状态:

640.png

使用先前的隐藏状态和新消息更新节点的状态。

简单地说,通过用新获得的消息mv更新旧的隐藏状态来获得节点Vt的隐藏状态。在上述示例的情况下,更新函数Ut是先前隐藏状态和消息之间的平均值。

我们将此消息传递算法重复指定的次数。之后,我们进入最后的读出阶段。

640.png

将获得的隐藏状态映射到描述整个图形的单个特征向量中。

在此步骤中,我们提取所有新近更新的隐藏状态,并创建描述整个图形的最终特征向量。然后可以将此特征向量用作标准机器学习模型的输入。

就是这样!这些是MPNN的基础。这个框架非常强大,因为我们可以定义不同的消息并根据想要实现的功能更新功能。我建议查看[3]以获得更多信息,以了解MPNN模型的不同变体。

在哪里可以找到模型的实现

MPNN已经被少数深度学习库实现。以下是一些我可以找到的不同实现的列表:

原始模型代码 https://github.com/brain-research/mpnn

Deepchem整合https://github.com/deepchem/deepchem/tree/master/contrib/mpnn

PyTorch的Geometric实现 https://github.com/rusty1s/pytorch_geometric

总结

MPNN框架标准化了由多个研究人员独立创建的不同消息传递模型。该框架的主要思想包括消息,更新和读出功能,它们在图中的不同节点上运行。MPNN模型的一些变体共享此功能,但是它们的定义不同。

引用


[1] Convolutional Networks on Graphs for Learning Molecular Fingerprints

[2] Gated Graph Sequence Neural Networks

[3] Neural Message Passing for Quantum Chemistry

目录
相关文章
|
1月前
|
机器学习/深度学习 存储 算法
回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现
本文详细介绍了回声状态网络(Echo State Networks, ESN)的基本概念、优点、缺点、储层计算范式,并提供了ESN的Python代码实现,包括不考虑和考虑超参数的两种ESN实现方式,以及使用ESN进行时间序列预测的示例。
74 4
回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
完成切换网络+修改网络连接图标提示的代码框架
完成切换网络+修改网络连接图标提示的代码框架
|
29天前
|
安全 网络安全 开发者
探索Python中的装饰器:简化代码,增强功能网络安全与信息安全:从漏洞到防护
【8月更文挑战第30天】本文通过深入浅出的方式介绍了Python中装饰器的概念、用法和高级应用。我们将从基础的装饰器定义开始,逐步深入到如何利用装饰器来改进代码结构,最后探讨其在Web框架中的应用。适合有一定Python基础的开发者阅读,旨在帮助读者更好地理解并运用装饰器来优化他们的代码。
|
1月前
|
数据采集 量子技术 双11
【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 建模方案及代码实现
本文提供了2023年第十三届MathorCup高校数学建模挑战赛C题的详细建模方案及代码实现,针对电商物流网络中的包裹应急调运与结构优化问题,提出了包括时间序列分析在内的多种数学模型,并探讨了物流网络的鲁棒性。
35 2
【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 建模方案及代码实现
|
1月前
|
网络协议 安全 网络安全
网络术语、接口和协议简介
网络术语、接口和协议简介
39 1
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
|
1月前
|
达摩院 供应链 JavaScript
网络流问题--仓储物流调度【数学规划的应用(含代码)】阿里达摩院MindOpt
本文通过使用MindOpt工具优化仓储物流调度问题,旨在提高物流效率并降低成本。首先,通过考虑供需匹配、运输时间与距离、车辆容量、仓库储存能力等因素构建案例场景。接着,利用数学规划方法,包括线性规划和网络流问题,来建立模型。在网络流问题中,通过定义节点(资源)和边(资源间的关系),确保流量守恒和容量限制条件下找到最优解。文中还详细介绍了MindOpt Studio云建模平台和MindOpt APL建模语言的应用,并通过实例展示了如何声明集合、参数、变量、目标函数及约束条件,并最终解析了求解结果。通过这些步骤,实现了在满足各仓库需求的同时最小化运输成本的目标。
|
27天前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
61 0
|
27天前
|
安全 开发者 数据安全/隐私保护
Xamarin 的安全性考虑与最佳实践:从数据加密到网络防护,全面解析构建安全移动应用的六大核心技术要点与实战代码示例
【8月更文挑战第31天】Xamarin 的安全性考虑与最佳实践对于构建安全可靠的跨平台移动应用至关重要。本文探讨了 Xamarin 开发中的关键安全因素,如数据加密、网络通信安全、权限管理等,并提供了 AES 加密算法的代码示例。
33 0