引言:当世界被连接成图 #
在传统的深度学习中,我们处理的数据通常是欧几里得空间中的规则结构:图像是规则的像素网格,文本是线性序列,音频是时间序列信号。然而,现实世界中的许多数据并非如此规整——社交网络、分子结构、知识图谱、推荐系统中的用户-物品交互……这些数据都以**图(Graph)**的形式存在。
图神经网络(Graph Neural Networks,GNN)的出现,标志着深度学习从处理规则数据向处理非欧几里得数据的重大跨越。本节将深入探讨GNN的核心原理、主流架构、技术挑战以及前沿应用,帮助你建立完整的图学习知识体系。
一、图的数学表示与基本概念 #
1.1 图的定义与类型 #
在数学上,一个图 $G = (V, E)$ 由顶点集(Vertex Set) $V$ 和边集(Edge Set) $E$ 组成。根据边的特性,图可以分为:
- 有向图 vs 无向图:边是否有方向
- 同构图 vs 异构图:节点和边的类型是否单一
- 静态图 vs 动态图:图结构是否随时间变化
- 同配图 vs 异配图:相似节点是否倾向于连接
**邻接矩阵(Adjacency Matrix)**是图最常用的矩阵表示: $$ A_{ij} = \begin{cases} 1 & \text{if } (v_i, v_j) \in E \ 0 & \text{otherwise} \end{cases} $$
对于加权图,$A_{ij}$ 表示边的权重;对于有向图,$A$ 通常非对称。
1.2 节点特征与图特征 #
在GNN中,每个节点 $v_i$ 关联一个特征向量 $x_i \in \mathbb{R}^{d}$,所有节点的特征矩阵为 $X \in \mathbb{R}^{n \times d}$($n$ 为节点数)。图级别的特征可以通过聚合节点/边特征得到,例如:
- 图统计特征:直径、聚类系数、度分布
- 谱特征:拉普拉斯矩阵的特征值
- 学习特征:通过GNN自动提取
**拉普拉斯矩阵(Laplacian Matrix)**是图信号处理的核心: $$ L = D - A $$ 其中 $D$ 是度矩阵(对角矩阵,$D_{ii} = \sum_j A_{ij}$)。归一化拉普拉斯定义为: $$ L_{\text{sym}} = D^{-1/2} L D^{-1/2} = I - D^{-1/2} A D^{-1/2} $$
1.3 图学习的任务类型 #
图学习任务可分为三个层次:
- 节点级任务:预测节点属性(如节点分类、链接预测)
- 边级任务:预测边的存在或属性(如推荐系统)
- 图级任务:预测整个图的性质(如图分类、性质预测)
二、图神经网络的核心思想:消息传递 #
2.1 为什么CNN不能直接用于图? #
传统CNN在图像上的成功依赖于:
- 规则的网格结构(固定邻域)
- 平移不变性(卷积核可共享)
- 固定的卷积核尺寸
而图数据具有以下挑战:
- 非规则结构:节点度数不统一
- 无序性:节点的邻居没有自然顺序
- 尺度变化:子图结构差异大
GNN通过**消息传递机制(Message Passing)**解决了这些挑战。
2.2 消息传递框架 #
现代GNN大多基于**消息传递神经网络(Message Passing Neural Network,MPNN)**框架,包含两个核心步骤:
步骤1:消息传递(Message Passing) 对于每个节点 $v$,从其邻居 $u \in \mathcal{N}(v)$ 收集消息: $$ m_v^{(t)} = \sum_{u \in \mathcal{N}(v)} M_t(h_v^{(t-1)}, h_u^{(t-1)}, e_{uv}) $$ 其中:
- $h_v^{(t-1)}$ 是节点 $v$ 在第 $t-1$ 层的隐藏状态
- $e_{uv}$ 是边 $(u, v)$ 的特征
- $M_t$ 是可学习的消息函数
步骤2:节点更新(Node Update) 使用聚合的消息更新节点表示: $$ h_v^{(t)} = U_t(h_v^{(t-1)}, m_v^{(t)}) $$ 其中 $U_t$ 是可学习的更新函数。
2.3 聚合函数的设计 #
不同的聚合方式导致了不同的GNN变体:
| 聚合方式 | 公式 | 特点 |
|---|---|---|
| Mean聚合 | $\text{MEAN}({h_u})$ | 简单平均,对称性好 |
| Sum聚合 | $\sum_{u} h_u$ | 保留强度信息 |
| Max聚合 | $\text{MAX}({h_u})$ | 捕捉显著特征 |
| Attention聚合 | $\sum_{u} \alpha_{uv} h_u$ | 自适应权重 |
PyTorch Geometric中的通用消息传递接口:
from torch_geometric.nn import MessagePassing
class MyGNN(MessagePassing):
def __init__(self, in_channels, out_channels):
super().__init__(aggr='mean') # 或 'sum', 'max', 'add'
self.lin = Linear(in_channels, out_channels)
def forward(self, x, edge_index):
# x: [num_nodes, in_channels]
# edge_index: [2, num_edges]
return self.propagate(edge_index, x=x)
def message(self, x_j):
# x_j: 邻居节点特征
return self.lin(x_j)
三、经典GNN架构解析 #
3.1 图卷积网络GCN #
**GCN(Graph Convolutional Network)**是第一个将卷积操作推广到图域的成功尝试,基于谱图理论。
3.1.1 谱图卷积基础 #
图傅里叶变换定义为: $$ \mathcal{G}(x) = U^T x $$ 其中 $U$ 是拉普拉斯矩阵 $L$ 的特征向量矩阵。谱卷积: $$ x *{\mathcal{G}} g\theta = U g_\theta U^T x $$ 其中 $g_\theta = \text{diag}(\theta)$ 是滤波器的频域表示。
Chebyshev多项式近似:为避免计算特征向量分解,使用 $K$ 阶Chebyshev多项式近似: $$ g_{\theta’} *{\mathcal{G}} x \approx \sum{k=0}^{K} \theta’k T_k(\tilde{L}) x $$ 其中 $\tilde{L} = \frac{2}{\lambda{\max}} L - I$,$T_k(x)$ 是第 $k$ 阶Chebyshev多项式。
3.1.2 一阶近似(原始GCN) #
令 $K=1, \lambda_{\max} \approx 2$,得到简化版: $$ g_{\theta’} *_{\mathcal{G}} x \approx \theta_0’ x + \theta_1’ (L - I)x = \theta_0’ x - \theta_1’ D^{-1/2} A D^{-1/2} x $$
进一步约束 $\theta_0’ = \theta_1’ = \theta$,得到GCN的前向传播公式: $$ H^{(l+1)} = \sigma(\tilde{D}^{-1/2} \tilde{A} \tilde{D}^{-1/2} H^{(l)} W^{(l)}) $$ 其中:
- $\tilde{A} = A + I$(添加自环)
- $\tilde{D}{ii} = \sum_j \tilde{A}{ij}$
- $W^{(l)}$ 是可学习参数
- $\sigma$ 是激活函数(如ReLU)
直观理解:每个节点的新特征 = 自身特征 + 加权平均的邻居特征
PyTorch实现:
import torch
import torch.nn as nn
import torch.nn.functional as F
class GCNLayer(nn.Module):
def __init__(self, in_features, out_features):
super().__init__()
self.linear = nn.Linear(in_features, out_features)
def forward(self, x, adj):
# x: [num_nodes, in_features]
# adj: [num_nodes, num_nodes] 归一化邻接矩阵
x = self.linear(x)
x = torch.spmm(adj, x) # 稀疏矩阵乘法
return F.relu(x)
class GCN(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim, num_layers):
super().__init__()
self.convs = nn.ModuleList()
self.convs.append(GCNLayer(input_dim, hidden_dim))
for _ in range(num_layers - 2):
self.convs.append(GCNLayer(hidden_dim, hidden_dim))
self.convs.append(GCNLayer(hidden_dim, output_dim))
def forward(self, x, adj):
for conv in self.convs[:-1]:
x = conv(x, adj)
x = self.convs[-1](x, adj) # 最后一层不激活
return F.log_softmax(x, dim=1)
3.1.3 GCN的理论性质 #
- 感受野:$l$ 层GCN的感受野为 $l$-跳邻域
- 过平滑问题:深层GCN节点表示趋于相同
- 计算复杂度:$O(|\mathcal{E}| \cdot d^2)$,$|\mathcal{E}|$ 为边数
3.2 图注意力网络GAT #
**GAT(Graph Attention Network)**引入注意力机制,自适应地学习邻居权重。
3.2.1 注意力机制 #
对于边 $(i, j)$,注意力系数: $$ e_{ij} = \text{LeakyReLU}(\mathbf{a}^T [W h_i | W h_j]) $$ 归一化: $$ \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k \in \mathcal{N}(i)} \exp(e_{ik})} $$
节点 $i$ 的更新: $$ h_i’ = \sigma\left(\sum_{j \in \mathcal{N}(i)} \alpha_{ij} W h_j\right) $$
3.2.2 多头注意力 #
类似Transformer,使用多头注意力增强表达能力: $$ h_i’ = |{k=1}^{K} \sigma\left(\sum{j \in \mathcal{N}(i)} \alpha_{ij}^{(k)} W^{(k)} h_j\right) $$
优势:
- 自适应权重(无需预定义图结构)
- 可解释性(注意力权重反映关系强度)
- 并行计算(注意力机制独立)
PyTorch Geometric实现:
from torch_geometric.nn import GATConv
class GAT(torch.nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim, num_heads=4):
super().__init__()
self.conv1 = GATConv(input_dim, hidden_dim, heads=num_heads)
self.conv2 = GATConv(hidden_dim * num_heads, output_dim, heads=1)
def forward(self, x, edge_index):
x = F.elu(self.conv1(x, edge_index))
x = self.conv2(x, edge_index)
return F.log_softmax(x, dim=1)
3.3 GraphSAGE:大规模图的采样策略 #
GraphSAGE(Graph Sample and AggreGatE)针对大规模图设计,核心创新是邻居采样和可学习聚合函数。
3.3.1 邻居采样 #
对于每个节点,均匀采样固定数量的邻居(而非使用全部邻居):
- 优点:计算复杂度与图规模解耦
- 缺点:引入随机性,需要多次采样平均
3.3.2 聚合函数设计 #
GraphSAGE提出三种聚合器:
Mean Aggregator $$ h_v^{(k)} = W^{(k)} \cdot \text{MEAN}({h_v^{(k-1)}} \cup {h_u^{(k-1)}, \forall u \in \mathcal{N}(v)}) $$
LSTM Aggregator 将邻居视为序列,使用LSTM聚合(需随机打乱顺序)
Pooling Aggregator $$ \text{AGGREGATE}_k = \text{MAX}({\text{ReLU}(W h_u + b), \forall u \in \mathcal{N}(v)}) $$
完整算法流程:
def GraphSAGE(node_features, adj, num_samples, num_layers):
# 邻居采样
sampled_neighbors = sample_neighbors(adj, num_samples, num_layers)
# 逐层聚合
for k in range(num_layers):
for v in nodes:
# 聚合邻居特征
aggregated = AGGREGATE({h_u for u in sampled_neighbors[v]})
# 更新节点特征
h_v^{(k)} = CONCAT(h_v^{(k-1)}, aggregated)
h_v^{(k)} = σ(W^{(k)} h_v^{(k)})
return node_features
3.3.3 归一化 #
GraphSAGE使用 $L_2$ 归一化: $$ h_v^{(k)} = \frac{h_v^{(k)}}{|h_v^{(k)}|_2} $$ 这有助于稳定训练并提升泛化性能。
四、高级GNN架构 #
4.1 图同构网络GIN #
GIN(Graph Isomorphism Network)证明了在Weisfeiler-Lehman图同构测试框架下,GIN是最强大的GNN。
4.1.1 WL测试与GNN的关系 #
WL测试通过迭代着色判断两个图是否同构: $$ c_v^{(k)} = \text{HASH}((c_v^{(k-1)}, {c_u^{(k-1)}, u \in \mathcal{N}(v)})) $$
GIN将聚合函数映射为: $$ h_v^{(k)} = \text{MLP}^{(k)}\left((1 + \epsilon^{(k)}) \cdot h_v^{(k-1)} + \sum_{u \in \mathcal{N}(v)} h_u^{(k-1)}\right) $$
关键点:
- 使用单射函数(Injective Function)作为聚合器
- MLP保证单射性(足够宽)
- $\epsilon^{(k)}$ 是可学习参数(控制自身权重)
4.1.2 理论保证 #
GIN在区分非同构图方面的能力与WL测试等价,这意味着:
- 更强的表达能力:可区分更多图结构
- 局限性:仍无法区分某些复杂图(如强正则图)
4.2 图自编码器GAE #
**GAE(Graph Autoencoder)**用于无监督表示学习和链接预测。
4.2.1 编码器-解码器架构 #
编码器:使用GCN生成节点嵌入 $$ Z = \text{GCN}(X, A) $$
解码器:重构邻接矩阵 $$ \hat{A} = \sigma(Z Z^T) $$
损失函数: $$ \mathcal{L} = |A - \hat{A}|F^2 = \sum{i,j} (A_{ij} - \hat{A}_{ij})^2 $$
4.2.2 变分图自编码器VGAE #
引入变分推断,正则化隐空间: $$ \mathcal{L} = \mathbb{E}_{q(Z|A,X)}[\log p(A|Z)] - \text{KL}(q(Z|A,X) | p(Z)) $$ 其中 $p(Z) = \mathcal{N}(0, I)$ 是先验分布。
实现:
class VGAE(nn.Module):
def __init__(self, input_dim, hidden_dim, latent_dim):
super().__init__()
self.conv1 = GCNConv(input_dim, hidden_dim)
self.conv_mu = GCNConv(hidden_dim, latent_dim)
self.conv_logvar = GCNConv(hidden_dim, latent_dim)
def encode(self, x, edge_index):
x = F.relu(self.conv1(x, edge_index))
mu = self.conv_mu(x, edge_index)
logvar = self.conv_logvar(x, edge_index)
return mu, logvar
def reparameterize(self, mu, logvar):
std = torch.exp(0.5 * logvar)
eps = torch.randn_like(std)
return mu + eps * std
def decode(self, z, edge_index):
# 内积解码器
return (z[edge_index[0]] * z[edge_index[1]]).sum(dim=1)
def forward(self, x, edge_index):
mu, logvar = self.encode(x, edge_index)
z = self.reparameterize(mu, logvar)
return self.decode(z, edge_index), mu, logvar
4.3 异构图神经网络HeteroGNN #
异构图包含多种类型的节点和边(如知识图谱中的"实体-关系-实体")。
4.3.1 关系特定的聚合 #
HeteroGNN为每种关系类型维护独立的权重矩阵: $$ h_v^{(l+1)} = \sigma\left(\sum_{r \in \mathcal{R}} \sum_{u \in \mathcal{N}_r(v)} W_r^{(l)} h_u^{(l)}\right) $$ 其中 $\mathcal{N}_r(v)$ 是通过关系 $r$ 连接到 $v$ 的邻居集。
4.3.2 元路径(Meta-path) #
预先定义的语义路径,例如在学术网络中:
- “作者-论文-作者”(APA):作者合作
- “作者-论文-会议-论文-作者”(APCPA):相同会议
RGCN(Relational GCN)实现:
from torch_geometric.nn import RGCNConv
class RGCN(nn.Module):
def __init__(self, num_nodes, input_dim, hidden_dim, num_relations):
super().__init__()
self.embedding = nn.Embedding(num_nodes, input_dim)
self.conv1 = RGCNConv(input_dim, hidden_dim, num_relations)
self.conv2 = RGCNConv(hidden_dim, hidden_dim, num_relations)
def forward(self, x, edge_index, edge_type):
x = self.embedding(x)
x = F.relu(self.conv1(x, edge_index, edge_type))
x = self.conv2(x, edge_index, edge_type)
return x
五、GNN的训练挑战与解决方案 #
5.1 过平滑问题 #
现象:深层GNN(>2-3层)的节点表示趋于相同,导致性能下降。
5.1.1 原因分析 #
每层GCN执行一次平均操作,$K$ 层后相当于 $K$-跳拉普拉斯平滑: $$ H^{(K)} \approx (S^K) X $$ 其中 $S = D^{-1/2} A D^{-1/2}$。当 $K \to \infty$,$S^K$ 趋于行秩为1的矩阵。
5.1.2 解决方案 #
残差连接(ResGCN) $$ H^{(l+1)} = \sigma(\tilde{A} H^{(l)} W^{(l)}) + H^{(l)} $$
跳跃连接(JK-Net) 拼接所有层的表示: $$ h_v = \text{CONCAT}(h_v^{(0)}, h_v^{(1)}, \dots, h_v^{(K)}) $$
归一化技巧(PairNorm, DropEdge)
- PairNorm:每层归一化节点特征
- DropEdge:随机丢弃边,防止过平滑
- 非局部传播 打破对称性,例如使用随机游走: $$ H^{(l+1)} = (1-\alpha) H^{(l)} + \alpha \tilde{A} H^{(l)} W^{(l)} $$
5.2 过度压缩问题 #
现象:节点特征在聚合后损失信息。
解决方案:
- 增加特征维度
- 使用更强大的聚合器(如Attention)
- 使用跳跃连接保留原始特征
5.3 归纳式偏差 vs 表达能力 #
GCN的归纳式假设:相连的节点标签相似(同配性)
局限性:异配图(相似节点不相连)上性能下降
解决方案:
- GAT(自适应权重)
- 使用高阶邻居信息
- 结合图结构信息和节点内容特征
六、GNN在不同领域的应用 #
6.1 社交网络分析 #
应用场景:
- 社区发现:检测紧密连接的节点群
- 影响者识别:通过PageRank、中心性指标
- 推荐系统:社交推荐(朋友买什么)
- 虚假信息传播:建模信息扩散路径
案例:社交网络中的节点分类
# 使用Cora引文网络
from torch_geometric.datasets import Planetoid
dataset = Planetoid(root='/tmp/Cora', name='Cora')
data = dataset[0] # 图数据
# 训练GCN
model = GCN(input_dim=dataset.num_features,
hidden_dim=64,
output_dim=dataset.num_classes,
num_layers=2)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
for epoch in range(200):
model.train()
optimizer.zero_grad()
out = model(data.x, data.edge_index)
loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask])
loss.backward()
optimizer.step()
6.2 推荐系统 #
GNN在推荐中的优势:
- 显式建模用户-物品交互图
- 捕捉高阶连接关系(“买了A也买B的用户还买了C”)
- 处理冷启动问题(利用内容特征)
PinSage算法(Pinterest推荐):
- 图卷积:随机游走采样邻居
- 信息聚合:加权平均邻居嵌入
- 特征组合:拼接用户和物品嵌入
6.3 生物信息学 #
分子性质预测:
- 节点:原子
- 边:化学键
- 任务:毒性预测、溶解度预测、药物筛选
蛋白质-蛋白质相互作用:
- 节点:蛋白质
- 边:相互作用
- 预测:新相互作用链接预测
案例:分子分类
from torch_geometric.nn import global_mean_pool
class MolecularGNN(nn.Module):
def __init__(self, node_dim, hidden_dim, output_dim):
super().__init__()
self.conv1 = GINConv(nn.Linear(node_dim, hidden_dim))
self.conv2 = GINConv(nn.Linear(hidden_dim, hidden_dim))
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, x, edge_index, batch):
x = F.relu(self.conv1(x, edge_index))
x = F.relu(self.conv2(x, edge_index))
# 图级别读出
x = global_mean_pool(x, batch)
return self.fc(x)
6.4 知识图谱 #
任务:
- 链接预测:预测缺失的三元组(头实体, 关系, 尾实体)
- 实体分类:预测实体类型
- 知识图谱补全
TransE、RotatE等几何模型:将实体和关系嵌入到向量空间。
七、GNN前沿研究方向 #
7.1 图Transformer #
将Transformer的注意力机制扩展到图域:
Graph-BERT:
- 只使用节点内容,不依赖图结构
- 使用随机游走生成候选邻居
- 适用于无监督预训练
7.2 自监督图学习 #
对比学习:
- GraphCL:图增强(节点删除、边扰动、子图采样)
- InfoGraph:最大化互信息
掩码自编码:
- BGRL(Bootstrapped Graph Representation Learning)
- MGRL(Masked Graph Representation Learning)
7.3 动态图学习 #
时间图:图结构随时间演变
方法:
- RNN+GNN:在时间步之间使用RNN,在每层使用GNN
- 时空注意力:同时建模时间和空间依赖
- 事件驱动:仅在事件发生时更新节点表示
应用:交通流量预测、疫情传播建模。
7.4 可扩展GNN #
挑战:十亿级节点、百亿级边的图无法全量放入内存。
解决方案:
- 分布式训练:GraphSage、DistDGL
- 图采样:Cluster-GCN(图聚类后分块训练)
- 量化与剪枝:压缩GNN模型
7.5 图结构学习 #
问题:输入图结构可能不完整或有噪声。
方法:
- 联合学习:同时学习图结构和节点表示
- 可微分图:使用Gumbel-Softmax松弛离散图采样
- 注意力引导:使用注意力权重作为邻接矩阵
八、GNN工具链与实践 #
8.1 主流框架对比 #
| 框架 | 语言 | 特点 | 适用场景 |
|---|---|---|---|
| PyTorch Geometric | Python | 高效、灵活、社区活跃 | 研究、原型开发 |
| DGL | Python/C++ | 分布式训练、后端优化 | 大规模工业应用 |
| Deep Graph Library | 多语言 | 跨平台、高性能 | 生产部署 |
| Spektral | Python | TensorFlow生态 | TF用户 |
8.2 PyTorch Geometric实战 #
安装:
pip install torch-geometric
pip install torch-sparse -f https://data.pyg.org/whl/torch-2.0.0+cu118.html
完整训练流程:
import torch
from torch_geometric.datasets import TUDataset
from torch_geometric.loader import DataLoader
from torch_geometric.nn import GCNConv, global_mean_pool
# 1. 加载数据
dataset = TUDataset(root='/tmp/MUTAG', name='MUTAG')
loader = DataLoader(dataset, batch_size=32, shuffle=True)
# 2. 定义模型
class GCN(torch.nn.Module):
def __init__(self, hidden_channels, num_classes):
super().__init__()
self.conv1 = GCNConv(dataset.num_features, hidden_channels)
self.conv2 = GCNConv(hidden_channels, hidden_channels)
self.lin = Linear(hidden_channels, num_classes)
def forward(self, x, edge_index, batch):
x = self.conv1(x, edge_index).relu()
x = self.conv2(x, edge_index).relu()
x = global_mean_pool(x, batch) # 图级别池化
return self.lin(x)
# 3. 训练
model = GCN(hidden_channels=64, num_classes=dataset.num_classes)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
for epoch in range(100):
for data in loader:
optimizer.zero_grad()
out = model(data.x, data.edge_index, data.batch)
loss = F.cross_entropy(out, data.y)
loss.backward()
optimizer.step()
8.3 大规模图训练技巧 #
- 使用稀疏矩阵:
torch.sparse或scipy.sparse - GPU加速:将图数据和特征都移到GPU
- 混合精度训练:使用
torch.cuda.amp - 邻居缓存:对静态图预采样邻居
- 负采样:链接预测时高效采样负边
九、总结与展望 #
9.1 GNN vs 传统方法 #
| 方法 | 优点 | 缺点 |
|---|---|---|
| 统计方法(网络分析) | 可解释性强 | 无法利用节点内容 |
| 图嵌入(DeepWalk、node2vec) | 快速 | 仅利用结构,无特征融合 |
| GNN | 端到端学习,融合结构与内容 | 训练复杂,可扩展性挑战 |
9.2 核心要点回顾 #
- 消息传递:GNN的核心机制,通过聚合邻居信息更新节点表示
- 三大架构:GCN(谱方法)、GAT(注意力)、GraphSAGE(采样)
- 训练挑战:过平滑、过度压缩、可扩展性
- 应用广泛:社交网络、推荐系统、生物信息、知识图谱
9.3 未来趋势 #
- 预训练大模型:图领域的"BERT"
- 多模态GNN:融合文本、图像、图结构
- 因果图学习:结合因果推断
- 量子图神经网络:利用量子计算加速
- 神经符号结合:GNN + 符号推理
十、参考文献与推荐阅读 #
核心论文:
- Kipf & Welling (2017). “Semi-Supervised Classification with Graph Convolutional Networks”
- Veličković et al. (2018). “Graph Attention Networks”
- Hamilton et al. (2017). “Inductive Representation Learning on Large Graphs”
- Xu et al. (2019). “How Powerful are Graph Neural Networks?”
- Wang et al. (2020). “Graph Benchmarking for Systematic Evaluation of Graph Neural Networks”
开源项目:
- PyTorch Geometric: https://github.com/pyg-team/pytorch_geometric
- DGL: https://github.com/dmlc/dgl
- OGB (Open Graph Benchmark): https://ogb.stanford.edu/
数据集:
- 引文网络:Cora, Citeseer, Pubmed
- 社交网络:Reddit, PPI
- 分子数据:ZINC, MUTAG
- 知识图谱:WN18RR, FB15k-237
- 推荐系统:MovieLens, Yelp
结语:图神经网络将深度学习的触角延伸到了非欧几里得空间,开启了处理关系型数据的新范式。从社交媒体到分子科学,从推荐系统到知识工程,GNN正在重塑我们理解和利用复杂网络的方式。掌握GNN,就是掌握了连接数据、挖掘关系、预测未来的能力。在下一节中,我们将探讨另一个前沿方向——因果机器学习,理解AI如何从"相关性"走向"因果性"。