图神经网络模型综述
作者:1小柱子8_814 | 来源:互联网 | 2024-11-28 13:27
本文综述了图神经网络(GraphNeuralNetworks,GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。
### 图神经网络模型综述 随着数据科学的发展,传统的数据存储模型逐渐向图和动态模型转变。图神经网络(Graph Neural Networks, GNN)作为一种新兴的模型,能够在图结构数据中捕捉复杂的依赖关系。尽管模型中可能存在隐性的结构,但显性的结构往往更易于引导和控制。 #### 关键组件 GNN 的核心组件包括传播模块、采样模块和池化模块: 1. **传播模块**:用于在节点之间传播信息,使得聚合的信息能够同时捕获特征信息和拓扑信息。 2. **采样模块**:通常需要在图上进行传播,采样模块通常与传播模块结合使用,以提高效率和准确性。 3. **池化模块**:当需要高级子图或图的整体表示时,池化模块可以从节点中提取关键信息。 #### 传播模块的实现 传播模块通常包含卷积算子和递归算子,这些算子用于聚合来自邻居节点的信息。此外,跳过连接操作可以从节点的历史表示中收集信息,并缓解过度平滑(over-smoothing)问题。 #### GNN 的工作流程 GNN 将图映射到输出的过程通常分为两个步骤: 1. **节点表示生成**:通过传播步骤,生成每个节点的表示。 2. **输出模型**:使用输出模型将每个节点的表示和标签映射为最终的输出。 为了处理图的整体分类任务,一些模型建议引入一个特殊的“超级节点”(supernode),该节点通过特殊边与所有其他节点相连,从而简化整体分类任务。 #### 一般 GNN 模型架构 以下是一般的 GNN 模型架构示意图:  #### 实现代码示例 以下是使用 DGL 库实现的一个简单的 GNN 模型示例: ```python # -*- coding: utf-8 -*- """ ============================================================= File Name: gcn.py Author: songdongdong Date: 2021/3/8 15:44 Description: GCN (Graph Convolutional Networks) 是一种图卷积网络,提出于 2017 年。 GCN 与 CNN 类似,都是特征提取器,不同的是 GCN 提取的是图数据特征。 ============================================================= """ import torch import torch.nn as nn import torch.nn.functional as F from dgl.nn.pytorch import GraphConv # DGL 库中的图卷积层 from dgl.data import CoraGraphDataset class GCN(nn.Module): def __init__(self, g, in_feats, n_hidden, n_classes, n_layers, activation, dropout): super(GCN, self).__init__() self.g = g self.layers = nn.ModuleList() self.layers.append(GraphConv(in_feats, n_hidden, activation=activation)) # 输入层 for i in range(n_layers - 1): self.layers.append(GraphConv(n_hidden, n_hidden, activation=activation)) self.layers.append(GraphConv(n_hidden, n_classes)) # 输出层 self.dropout = nn.Dropout(p=dropout) def forward(self, features): h = features for i, layer in enumerate(self.layers): if i != 0: h = self.dropout(h) h = layer(self.g, h) return h @torch.no_grad() def evaluate(self, model, features, labels, mask): model.eval() with torch.no_grad(): logits = model(features) logits = logits[mask] labels = labels[mask] _, indices = torch.max(logits, dim=1) correct = torch.sum(indices == labels) return correct.item() * 1.0 / len(labels) def train(self, n_epochs=100, lr=1e-2, weight_decay=5e-4, n_hidden=16, n_layers=1, activation=F.relu, dropout=0.5): data = CoraGraphDataset() g = data[0] features = g.ndata['feat'] labels = g.ndata['label'] train_mask = g.ndata['train_mask'] val_mask = g.ndata['val_mask'] test_mask = g.ndata['test_mask'] in_feats = features.shape[1] n_classes = data.num_classes model = GCN(g, in_feats, n_hidden, n_classes, n_layers, activation, dropout) loss_fcn = torch.nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=weight_decay) for epoch in range(n_epochs): model.train() logits = model(features) loss = loss_fcn(logits[train_mask], labels[train_mask]) optimizer.zero_grad() loss.backward() optimizer.step() acc = self.evaluate(model, features, labels, val_mask) print(f'Epoch {epoch} | Loss: {loss.item():.4f} | Accuracy: {acc:.4f}') acc = self.evaluate(model, features, labels, test_mask) print(f'Test accuracy: {acc:.2%}') if __name__ == '__main__': gcn = GCN() gcn.train() ``` #### 相关资源 - [RESIDUAL GATED GRAPH CONVNETS](https://arxiv.org/abs/1711.07553) - [GRAPH CONVOLUTIONAL NETWORKS](https://arxiv.org/abs/1609.02907) - [Transformers 作为一种图神经网络](https://arxiv.org/abs/2010.02502) - [DGL 官方教程](https://docs.dgl.ai/en/latest/api/python/dgl.nn.html)
推荐阅读
尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ...
[详细]
蜡笔小新 2024-12-26 11:29:15
本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ...
[详细]
蜡笔小新 2024-12-25 17:38:50
本文详细介绍TensorFlow中的数据读写操作,包括TFRecord文件的创建与读取,以及数据集(dataset)的相关概念和使用方法。 ...
[详细]
蜡笔小新 2024-12-19 16:23:17
尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ...
[详细]
蜡笔小新 2024-12-24 08:48:32
2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归 中通过 AddPrinter 和 AddPrintTransformer 方法自定义类型(尤其是集合类型)的输出格式,提供了详细的指南和示例代码。 ...
[详细]
蜡笔小新 2024-12-22 12:09:23
本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ...
[详细]
蜡笔小新 2024-12-27 19:42:28
本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ...
[详细]
蜡笔小新 2024-12-27 16:38:48
本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ...
[详细]
蜡笔小新 2024-12-27 08:43:40
本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ...
[详细]
蜡笔小新 2024-12-26 11:24:01
本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ...
[详细]
蜡笔小新 2024-12-26 11:21:09
本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ...
[详细]
蜡笔小新 2024-12-26 10:54:04
本文深入探讨了基于Pairwise和Listwise方法的排序学习,结合PaddlePaddle平台提供的丰富运算组件,详细介绍了如何通过这些方法构建高效、精准的排序模型。文章不仅涵盖了基础理论,还提供了实际应用场景和技术实现细节。 ...
[详细]
蜡笔小新 2024-12-23 04:23:16
本文详细介绍了如何在 Vue 3.0 中使用翻牌数字组件,包括其基本设置和高级配置,旨在帮助开发者快速掌握并应用这一动态视觉效果。 ...
[详细]
蜡笔小新 2024-12-17 11:54:45
本文探讨了在多智能体系统中应用分布式奖励估计技术,以解决由于环境和代理互动引起的奖励不确定性问题。通过设计多动作分支奖励估计和策略加权奖励聚合方法,本研究旨在提高多智能体强化学习(MARL)的有效性和稳定性。 ...
[详细]
蜡笔小新 2024-12-15 17:04:36