【Pytorch Geometric学习】 Message Passing 函数解析

本文介绍了PyTorchGeometric和DGL这两个基于消息传递的图神经网络框架。重点阐述了PyTorchGeometric中的MessagePassing类,解释了消息传递的三步过程,包括消息生成、聚合和节点更新,并通过实例展示了如何自定义卷积操作。此外,还提供了相关参考资料以深入理解GNN的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 前言

  此文为自己学习的总结,内容多有参考其他文章内容,并在参考文献处一并给出文章链接。

2 介绍

  Pytorch Geometric和dgl是两个基于Message Passing(消息传递)的图神经网络框架,两个框架的实现方式个人感觉有很大的不同。在此处介绍pyg的消息传递方式。

  图中的卷积计算通常被称为邻域聚合或者消息传递 (neighborhood aggregation or message passing). 定义 x i ( k − 1 ) ∈ R F \mathbf{x}_i ^{( k − 1 )} \in R^F xi(k1)RF为节点 i i i在第 ( k − 1 ) (k-1) (k1) 层的特征 e j , i \mathbf e_{j,i} ej,i 表示节点 j j j到 节点 i i i的边特征,在 GNN 中消息传递可以表示为
x i ( k ) = γ ( k ) ( x i ( k − 1 ) , □ j ∈ N ( i ) ϕ ( k ) ( x i ( k − 1 ) , x j ( k − 1 ) , e j , i ) ) \mathbf{x}_{i}^{(k)}=\gamma^{(k)}\left(\mathbf{x}_{i}^{(k-1)}, \square_{j \in \mathcal{N}(i)} \phi^{(k)}\left(\mathbf{x}_{i}^{(k-1)}, \mathbf{x}_{j}^{(k-1)}, \mathbf{e}_{j, i}\right)\right) xi(k)=γ(k)(xi(k1),jN(i)ϕ(k)(xi(k1),xj(k1),ej,i))
其中 □ \square 表示具有置换不变性并且可微的函数,例如 sum, mean, max 等, γ \gamma γ ϕ \phi ϕ表示可微函数。
  在 PyTorch Gemetric 中,所有卷积算子都是由 MessagePassing 类派生而来,理解 MessagePasing 有助于我们理解 PyG 中消息传递的计算方式和编写自定义的卷积。在自定义卷积中,用户只需定义消息传递函数 ϕ \phi ϕ message(), 节点更新函数 γ \gamma γupdate() 以及聚合方式 aggr=‘add’, aggr=‘mean’ 或则 aggr=max. 具体函数说明如下:

下面具体介绍消息传递的三步曲:

2.1 Message passing消息传递

参考文献

[1]Pytorch-Geometric 中的 Message Passing 解析
[2]pytorch geometric教程一: 消息传递源码详解(MESSAGE PASSING)+实例
[3]SOURCE CODE FOR TORCH_GEOMETRIC.NN.CONV.MESSAGE_PASSING
[4]笔记:Pytorch-geometric: GAT代码超详细解读 | source node | target node | source_to_target
[5]PYG图卷积中的消息传递
[6]Pytorch中GNN的基类torch_geometric.nn.conv.MessagePassing
[7]https://pytorch-geometric.readthedocs.io/en/latest/notes/create_gnn.html

### 如何在强化学习中应用图神经网络 #### 图神经网络与强化学习的融合背景 深度强化学习(DRL)和图神经网络(GNNs)各自拥有独特的优势,在某些应用场景下,两者的结合可以带来更好的效果。例如,在处理复杂关系结构的数据时,GNNs能有效捕捉节点间的关系并进行高效的特征提取;而DRL则擅长于决策制定过程中的优化问题。 #### 应用场景举例 以AlphaGo为例,其采用的是深层神经网络架构,其中包含了由监督学习预训练的价值网络和策略网络[^2]。虽然这里并没有直接提及GNN的应用,但在涉及具有明显拓扑结构的任务环境中(比如社交网络、分子化学等领域),引入GNN作为感知模块的一部分是非常自然的选择。 对于更加复杂的环境建模,如交通流量预测或城市规划等问题,则可以通过构建基于GNN的状态表示器来增强智能体的理解力。这不仅限于静态图形数据集上的操作——随着交互次数增加形成的动态变化也可以被纳入考虑范围之内。 #### 实现方式概述 一种典型的做法是在强化学习框架内嵌入一个专门设计用来处理图结构输入的组件。这个组件通常会先利用消息传递机制完成局部邻域的信息交换,再经过几轮迭代更新得到整个系统的全局表征。之后,这种抽象化的表达形式就可以参与到后续的动作选择环节当中去了。 具体实现方面,考虑到不同个体之间的差异性可能导致所需的最佳配置有所不同,有研究提出了一套名为BN-GNN的新颖解决方案。该方案借助DRL算法自动调整每一轮次中参与计算的有效层深数目,从而更好地适应多样性的样本分布特性,并最终提升整体性能表现[^3]。 ```python import torch from torch_geometric.nn import GCNConv, global_mean_pool as gap class GNNPolicy(torch.nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super().__init__() self.conv1 = GCNConv(input_dim, hidden_dim) self.conv2 = GCNConv(hidden_dim, hidden_dim) self.fc = torch.nn.Linear(hidden_dim, output_dim) def forward(self, data): x, edge_index, batch = data.x, data.edge_index, data.batch # Message passing layers (two-layer GCN). x = self.conv1(x, edge_index).relu() x = self.conv2(x, edge_index).relu() # Global pooling. x = gap(x, batch) # Output layer for policy distribution. return torch.softmax(self.fc(x), dim=-1) ``` 此代码片段展示了如何定义一个简单的基于PyTorch Geometric库的GNN政策函数类`GNNPolicy`。它接收带有边索引和其他属性信息的数据对象作为参数,并返回动作概率分布的结果向量。通过这种方式,可以在强化学习过程中充分利用图结构带来的优势来进行更有效的探索与开发平衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值