gnn原理和公式表达
时间: 2025-03-07 16:05:42 浏览: 45
### 图神经网络 (GNN) 的工作原理
图神经网络是一种专门用于处理图形结构数据的深度学习模型。其核心思想是在节点级别上聚合邻居的信息来更新节点表示。
对于给定的一个无向图 \( G=(V,E) \),其中 \( V \) 是顶点集合而 \( E \subseteq V\times V\) 则代表边集,每个节点 \( v_i\in V \) 都有一个特征向量 \( h_{v_i}^{(0)} \)[^1]。随着层数加深,在第\( l \)-层中,节点 \( i \)'s 特征会通过如下方式迭代更新:
\[h_v^{l+1}=f(h_v^l,\{h_u^l|(u,v)\in E\})\]
这里函数 \( f(\cdot ) \) 可以被设计成不同的形式;一种常见的做法是采用消息传递机制,即先计算来自相邻节点的消息再汇总这些信息并应用激活函数得到新的隐藏状态:
\[m_v=\sum _{(w,v)\in E}\phi(e_{vw},h_w,h_v),\quad h'_v=\sigma(W[m_v;h_v])\]
在这个过程中, \( e_{vw} \) 表示边上可能存在的额外属性或权重,\( W \) 和 \( b \) 分别指代可训练参数矩阵和偏置项,\( ; \) 符号意味着连接操作,最后使用非线性变换如ReLU作为激活函数 σ 来引入表达能力。
当涉及到具体实现时,可以利用 PyTorch Geometric 库简化构建过程:
```python
import torch
from torch_geometric.nn import GCNConv
class Net(torch.nn.Module):
def __init__(self):
super().__init__()
self.conv1 = GCNConv(dataset.num_node_features, 16)
self.conv2 = GCNConv(16, dataset.num_classes)
def forward(self, data):
x, edge_index = data.x, data.edge_index
x = self.conv1(x, edge_index)
x = F.relu(x)
x = F.dropout(x, training=self.training)
x = self.conv2(x, edge_index)
return F.log_softmax(x, dim=1)
```
上述代码片段展示了如何定义一个简单的两层GCN,并完成前向传播的过程。
阅读全文
相关推荐
















