Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Graph Neural Network (GNN)

图神经网络(GNN)通过在相邻节点之间传递消息,从节点和边中学习。内容涵盖消息传递、GCN、GAT、实际应用和代码。

图神经网络(GNN)是一种直接在图上运行的神经网络:图由节点和连接节点的边组成,节点和边都可以带有特征。分子(原子和化学键)、社交网络(用户和关注关系)、道路网络(交叉口和路段)、3D 网格以及人体骨架的关节都属于图。图没有固定的网格或顺序,每个节点的邻居数量也各不相同,因此卷积神经网络(CNN)的滑动滤波器和循环神经网络(RNN)的逐步读取方式无法直接应用。GNN 通过消息传递来处理这些特点:每个节点会反复根据邻居的特征向量更新自身特征,从而生成嵌入,同时编码节点自身的属性及其在图中的位置。

消息传递的工作原理#

GNN 层分三步更新每个节点。每个邻居都会发送一条消息,通常是对其特征进行学习得到的变换。节点使用忽略顺序的函数聚合收到的消息,例如求和、求平均或取最大值。然后,节点将聚合结果与自身特征结合,形成新的表示。由于聚合过程忽略顺序,因此结果不受节点编号方式的影响。Justin Gilmer 及其同事于 2017 年将许多 GNN 描述为这一消息传递神经网络框架的实例。最后一层之后,特定任务的头部会读取节点嵌入,用于给节点打标签、预测缺失边或对整个图分类:

每一层都会将节点的视野扩展一跳,因此经过 k 层后,节点的嵌入会受到 k 条边以内所有节点的影响,这些节点构成了图中的感受野。下面的 PyTorch 代码片段构建了一个包含六个节点的路径图,应用三层图卷积层,并使用 Thomas Kipf 和 Max Welling 的 GCN 中的归一化方法,再通过 autograd 列出每一层之后哪些输入节点会影响节点 0:

import torch
from torch import nn

# A path graph 0-1-2-3-4-5 as an adjacency matrix with self-loops
A = torch.eye(6)
for i in range(5):
    A[i, i + 1] = A[i + 1, i] = 1
deg = A.sum(dim=1)
A_hat = A / torch.sqrt(deg[:, None] * deg[None, :])  # GCN normalization D^-1/2 (A + I) D^-1/2

torch.manual_seed(0)
x = torch.randn(6, 4, requires_grad=True)  # 4 input features per node
layers = [nn.Linear(4, 4) for _ in range(3)]

h = x
for k, layer in enumerate(layers, start=1):
    h = torch.tanh(A_hat @ layer(h))  # each node mixes in its neighbors' transformed features
    grad = torch.autograd.grad(h[0].sum(), x, retain_graph=True)[0]
    print(f"After layer {k}, node 0 depends on nodes {grad.abs().sum(dim=1).nonzero().flatten().tolist()}")

它会输出 [0, 1]、[0, 1, 2] 和 [0, 1, 2, 3]:节点 0 的感受野每层恰好扩展一跳。

常见的 GNN 架构#

  • GCN:图卷积网络计算 H′ = σ(D̃^(−1/2) Ã D̃^(−1/2) H W),其中 Ã 是带自环的邻接矩阵,D̃ 是其度矩阵:先对每个节点及其邻居进行按度加权的平均,再乘以所有节点共享的权重矩阵 W。
  • GraphSAGE:为每个节点采样固定数量的邻居,并学习聚合器,因此可扩展到超大图,也能为训练之后出现的节点生成嵌入。
  • GAT:图注意力网络使用学习得到的注意力分数为每个邻居分配权重,而不是使用固定的、基于度的权重。
  • GIN:图同构网络对邻居求和并应用 MLP。Keyulu Xu 及其同事证明,这使它区分图的能力与 Weisfeiler-Lehman 测试一样强;该测试代表了标准消息传递方法的上限。
  • 图 Transformer:在所有节点之间应用自注意力,并添加根据图结构计算的位置编码。标准的 Transformer 本身就是一个作用于全连接 token 图上的 GNN。

堆叠过多层会导致过平滑:反复求平均会使节点嵌入彼此靠近,直到无法区分。这就是许多 GNN 只使用两三层的原因,原始 GCN 就使用了两层。PyTorch Geometric 和 Deep Graph Library (DGL) 可在稀疏边列表上高效实现这些层。

实际应用#

  • 天气预报:Google DeepMind 的 GraphCast 于 2023 年发表于《Science》,它在覆盖全球的多尺度网格上运行消息传递,可在一分钟内生成分辨率为 0.25° 的 10 天预报;在 1,380 个验证目标中的 90% 上,其表现优于最准确的业务化确定性系统。
  • 药物发现:2020 年,MIT 研究人员训练了一个有向消息传递网络,根据分子图预测抗菌活性,并用它发现了 halicin。这种化合物在结构上不同于已知抗生素,并在实验室测试中杀死了多种耐药细菌。
  • 推荐系统:Pinterest 的 PinSage 从包含 30 亿个 Pin 和看板、180 亿条边的图中学习 Pin 嵌入,训练数据有 75 亿个样本。
  • 基于骨架的动作识别:ST-GCN 将身体关节视为节点,在每一帧中用骨骼连接这些节点,并将相邻帧中的同一关节相连,再根据生成的时空图对动作分类。YOLO26姿态估计模型会为每一帧中的每个人返回 17 个 COCO 关键点,这些关节坐标正是构建此类骨架图的基础。
  • 知识图谱:一种将事实存储为实体-关系-实体三元组的数据结构。GNN 是一种可以从知识图谱中学习的模型,例如可用于预测缺失链接。
  • 几何深度学习:围绕数据对称性构建网络的更广泛领域,涵盖网格上的 CNN、图上的 GNN,以及网格和流形上的模型。
  • CNN:应用于图像的 CNN 是在网格图上进行消息传递的一种特殊情况。网格图中的每个像素都具有相同数量、相对位置固定的邻居,因此 CNN 可以为每个邻居位置学习独立权重,而不规则图上的 GNN 则做不到这一点。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来