数据结构论坛

首页 » 分类 » 问答 » 图神经网络,强大在哪里
TUhjnbcbe - 2024/4/5 18:46:00

图神经网络介绍

图神经网络(GNN)是一组在图域中工作的深度学习方法。这些网络最近已应用于多个领域,包括:组合优化、推荐系统、计算机视觉。

还可用于对大型系统进行建模,例如社交网络、蛋白质-蛋白质相互作用网络、知识图谱以及其他研究领域。与图像等其他数据不同,因此,针对节点分类、链接预测和聚类。

在本文中,让我们进一步探索图神经网络(GNN)。

什么是图?

图是包含节点和顶点的数据结构。各个节点之间的关系由顶点定义。如果在节点中指定了方向,则称该图为有向图,否则为无向图。

示例是对社交网络中不同人之间的联系进行建模。

GNN(图神经网络)

图神经网络是一类特殊的神经网络,能够处理以图形形式表示的数据。这些网络很大程度上受到卷积神经网络(CNN)和图嵌入的推动。CNN无法处理图数据,因为图中的节点没有按任何顺序表示,而且两个节点之间的依赖信息由边表示。

带有NetworkX的图

让我们花点时间看看如何使用NetworkX创建图表。NetworkX是一个Python包,可用于创建图形。以下是如何使用该包创建一个没有节点的空图。

importnetworkxasnxG=nx.Graph()

复制

然后,您可以使用`add_nodes`函数将一些节点添加到图中。

G.add_nodes_from([2,3])

复制

接下来,使用`add_edges_from`函数向图中添加一些边。

edges=[(2,1),(2,2),(3,2),(4,3),(6,4),(7,5),(14,5)]G.add_edges_from(edges)

复制

该图可以使用Matplotlib进行可视化。这是通过调用`draw`函数并使用Matpotlib显示图形来完成的。

nx.draw(G,with_labels=True,font_weight=bold)importmatplotlib.pyplotaspltplt.show()

复制

图神经网络如何工作?

图神经网络(GNN)的概念最早由FrancoScarselliBruna等人于年提出。在他们的论文“图神经网络模型”中,他们提出了对现有神经网络的扩展,用于处理以图形形式表示的数据。该模型可以处理非循环、循环、有向和无向的图。GNN的目标是学习一个状态嵌入,它封装了每个节点的邻域信息。此嵌入用于生成输出。例如,输出可以是节点标签。

最初的GNN提案有几个限制:

对于固定点,更新节点的隐藏状态效率低下

GNN在每次迭代中使用相同的参数,而其他神经网络在每一层中使用不同的参数

从边缘获得的信息特征建模很困难

传统的图分析方法

图表也可以使用传统方法进行分析。这些方法通常是算法。他们包括:

最短路径算法,例如Dijkstra算法

搜索算法,例如广度优先搜索算法

生成树算法,例如Prim算法

这些方法的挑战是需要先验知识,因此它们不能用于图分类。

图神经网络的类型

有几种类型的图神经网络。让我们来看看其中的几个。

图卷积网络(GCN)

图卷积网络(GCN)使用与普通卷积神经网络相同的卷积操作。

GCN通过检查相邻节点来学习特征。它们通常由图卷积、线性层和非线性激活组成。GNN的工作原理是聚合邻域中的向量,将结果传递给密集的神经网络层。

GCN有两种主要类型,即:

空域:在这些网络中,相邻节点的特征被组合成一个中心节点。特征相加类似于正常的卷积操作。

谱域:在光谱网络中,卷积运算是通过计算图拉普拉斯算子的特征分解在傅里叶域中定义的。

图自动编码器网络

图自动编码器网络由编码器和解码器组成。这两个网络由一个瓶颈层连接。编码通过卷积滤波器从图像中获取特征。解码器尝试重建输入。众所周知,自动编码器模型可以处理链接预测问题中常见的极端类不平衡。因此,图自动编码器网络尝试学习图表示,然后使用解码器重新构建图。

循环图神经网络

图递归神经网络(GRNN)利用多关系图并使用基于图的正则化器来提高平滑度并减轻过度参数化。由于邻域的确切大小并不总是已知的,因此使用循环GNN层来使网络更加灵活。GRNN可以学习适合数据的最佳扩散模式。它还能够处理节点涉及多个关系的情况。该网络在计算上也很便宜,因为操作的数量相对于图边的数量是线性缩放的。

门控图神经网络(GGNN)

门控图神经网络(GGNN)在长期依赖问题上的表现优于循环图神经网络。长期依赖关系由节点和边缘门编码。长期时间依赖性由时间门编码。因此,门控图神经网络通过添加门控机制来改进循环图神经网络。这些门负责记住和忘记不同状态下的信息。

GNN应用列表

现在让我们花点时间看看GNN可以做什么:

节点分类:这里的目标是通过考虑节点的标签来预测节点的标签。

链接预测:在这种情况下,目标是预测图中各个实体之间的关系。例如,这可以应用于社交网络的预测连接。

图聚类:这涉及将图的节点划分为集群。可以基于边权重或边距离或通过将图视为对象并将相似的对象分组在一起来进行分区。

图分类:这需要将图分类为一个类别。这可以应用于自然语言处理中的社交网络分析和文档分类。NLP中的其他应用包括文本分类、提取文本之间的语义关系和序列标记。

计算机视觉:在计算机视觉领域,GNN可用于生成目标检测区域。它们还可用于生成场景图的图像分类。然后场景生成模型识别图像中的对象以及它们之间的语义关系。该领域的其他应用包括交互检测和区域分类。

与GNN相关的问题

图神经网络是强大的网络。但是,有几个与它们相关的已知问题:

本质上是浅的:传统的神经网络可以非常深入以获得更好的性能。不幸的是,GNN通常很浅,大多数只有三层。深度GNN的创建仍然是一个活跃的研究领域。

动态图:动态图的结构不断变化,因此难以建模。动态GNN也是一个活跃的研究领域。

缺乏标准的图形生成方法:没有生成图形的标准方法。在某些应用程序中,使用完全连接的图,而在其他算法中检测图节点。

可扩展性:在推荐系统和社交网络等应用中大规模应用GNN是一项挑战。这里的主要障碍是这些方法的计算成本很高。

示例:使用PyTorch绘制神经网络图

PyTorch可以与DGL结合构建用于节点预测的图神经网络。DeepGraphLibrary(DGL)是一个Python包,可用于使用PyTorch和TensorFlow实现GNN。

让我们看一个PyTorch示例。第一步是导入包并加载数据。

importdglimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFimportdgl.datadataset=dgl.data.CoraGraphDataset()g=dataset[0]

复制

该示例展示了如何为Cora数据集上的半监督节点分类模型构建GNN。下一步是定义将使用邻域信息计算节点表示的图卷积网络。这是使用`dgl.nn.GraphConv`完成的。

fromdgl.nnimportGraphConvclassGCN(nn.Module):def__init__(self,in_feats,h_feats,num_classes):super(GCN,self).__init__()self.conv1=GraphConv(in_feats,h_feats)self.conv2=GraphConv(h_feats,num_classes)defforward(self,g,in_feat):h=self.conv1(g,in_feat)h=F.relu(h)h=self.conv2(g,h)returnh#Createthemodelwithgivendimensionsmodel=GCN(g.ndata[feat].shape[1],16,dataset.num_classes)

复制

下一步是训练神经网络。培训的完成方式类似于您在PyTorch或TensorFlow中进行培训的方式。

deftrain(g,model):optimizer=torch.optim.Adam(model.parameters(),lr=0.01)best_val_acc=0best_test_acc=0features=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]foreinrange():#Forwardlogits=model(g,features)#Computepredictionpred=logits.argmax(1)#Computeloss#Notethatyoushouldonly

1
查看完整版本: 图神经网络,强大在哪里