图神经网络的基本结构

news2025/1/11 7:37:51

文章目录

  • 图神经网络的基本结构
  • 图谱和图傅里叶变换
  • 基于频谱域的GNN和基于空间域的GNN的比较
  • 图神经网络的任务需求和模型要求
    • 任务需求
    • 模型要求
  • 图神经网络的实用框架
  • GCN
  • 图神经网络的几道面试题

图神经网络的基本结构

图神经网络 (Graph Neural Network, GNN) 是一类用于处理图数据的深度学习模型。它可以对图的节点和边进行学习,适用于各种图结构的任务,如节点分类、链接预测、社区发现等。图神经网络的基本结构通常由以下两部分组成:

  1. 节点嵌入(Node Embedding):将图中的每个节点映射为一个低维向量表示,通常使用一些线性变换、非线性激活函数和归一化等技术来实现。节点嵌入的目的是捕捉节点的特征和局部结构信息。

  2. 图卷积(Graph Convolution):利用节点嵌入和图结构信息对节点特征进行更新,从而实现对整个图的表示学习。图卷积运算通常可以看作是一种基于局部邻域特征的聚合操作,同时考虑节点特征和局部拓扑结构信息。图卷积的主要目的是通过迭代更新节点嵌入从而实现对图结构的表示学习。

除了这两部分,图神经网络还可能包括其他一些模块,如注意力机制、池化层和分类器,用于更好地处理图数据的特点和复杂性。

需要注意的是,不同类型的图神经网络可能具有不同的节点嵌入和图卷积设计,例如,GCN使用拉普拉斯矩阵和傅里叶变换来进行图卷积,而GAT使用注意力机制来融合不同节点之间的信息。

图谱和图傅里叶变换

图谱是图的拉普拉斯矩阵的特征值。 具体来说,给定图G=(V,E),其中V和E分别表示图G的节点集和边集,假设n表示节点数,图G的邻接矩阵A为一个n x n的矩阵,如果节点i,j之间有边相连,则Aij=1,否则Aij=0。图G的度矩阵为D=diag(d1, d2,…,dn),其中di表示第i个节点在图中的度数(degree)。定义图的拉普拉斯矩阵 L = D - A,对其进行特征值分解:
在这里插入图片描述
其中,在这里插入图片描述是按照特征值从小到大的顺序排列,在这里插入图片描述是对应的特征向量组成的正交矩阵。上述特征值集合在这里插入图片描述即为图G的图谱。

图傅里叶变换(Graph Fourier Transform)是一种基于图信号处理的技术,类似于传统傅里叶变换,但适用于处理图数据。

在传统傅里叶变换中,将一个连续信号或离散信号通过傅里叶变换转换到频域中,这个频域展现了信号的频率特征,通常用于对信号进行滤波、去噪、压缩等操作。在图傅里叶变换中,类似的,我们把一个图信号(Graph Signal)通过傅里叶变换转换到图频域中,用于进行图结构分析、滤波等操作。

图傅里叶变换的计算方式和传统傅里叶变换存在显著的区别,它需要先将图转换为拉普拉斯矩阵(Laplacian Matrix),然后使用拉普拉斯矩阵对应的特征向量和特征值进行傅里叶变换。具体来说,假设有一个n个节点的图G,邻接矩阵为A,度数矩阵为D,则可以通过以下方式计算得到Laplacian Matrix:L = D - A。

将L的特征向量组成的矩阵记为U,特征值组成的向量记为λ,则可以得到图傅里叶变换:

f̂ = U^T * f,其中f是原始图信号,f̂是其在图傅里叶变换中的频域表示。

图傅里叶变换可以用于信号恢复、图形压缩、图像分析等多种应用,尤其适用于处理规则和不规则的图结构。

基于频谱域的GNN和基于空间域的GNN的比较

基于频谱域的GNN和基于空间域的GNN是目前两种主流的GNN模型。二者有着不同的特点和适用场景,下面进行简要比较:

  1. 原理

基于频谱域的GNN依靠图傅里叶变换将图信号(节点特征)转化到频域进行处理,节点特征的传播实质上是在频域上进行的。而基于空间域的GNN则通过聚合每个节点周围的邻居节点特征来更新当前节点的特征表示。

  1. 优缺点

基于频谱域的GNN具有较强的表达能力和稳定性,因为图傅里叶变换可以提供全局结构信息,能够捕捉图的本质特征。同时在一些平滑性较强的图上效果较好。但是基于频谱域的GNN存在运算量较大和具有较高的计算复杂度的问题。

基于空间域的GNN计算效率较高且易于实现,对于具有明显的局部特征的图(如社交网络、语义网络等)效果优秀。但是基于空间域的GNN难以处理全局结构信息和复杂图的边缘特征。

  1. 适用场景

基于频谱域的GNN适用于处理规则化或较平滑的图上,如Molecular Graphs(分子图结构)、Image Graphs(视觉任务图结构)等。而基于空间域的GNN适用于处理非规则化和复杂的图上,如Social Graphs(社交网络)、Textual Graphs(文本任务图结构)等。

总的来说,选择基于频谱域的GNN还是基于空间域的GNN需要根据具体应用场景和任务的特点来进行选择和评估。

图神经网络的任务需求和模型要求

任务需求

  1. 节点分类:给定一个图和部分节点的标签,预测剩余节点的标签。

  2. 链接预测:给定一个图,预测两个节点之间是否有边。

  3. 社区发现:给定一个图,把节点分为若干个社区。

  4. 图特征提取:从原始图像数据中提取出高层次的特征表示,用于后续的分类和识别。

模型要求

  1. 空间不变性:GNN应该对图中节点的排列没有偏见,即空间不变性。

  2. 局部性:对于每个节点,GNN 应该只考虑其邻居节点的信息,而不考虑整个图的信息,即局部性。

  3. 可复现性:GNN 应该能够对同一张图进行多次模型训练并得到相同的结果。

  4. 可扩展性:GNN 应该能够处理大规模的图数据,同时防止模型过拟合和欠拟合。

  5. 鲁棒性:GNN 应该能够处理缺失数据或噪声数据的情况,并保持稳定的性能。

为了满足上述要求,GNN 模型通常具有以下几个特征:

  1. 基于邻接矩阵的卷积运算,在每个节点上进行卷积、池化和全连接操作。

  2. 节点表示的更新方式通常基于节点本身的特征以及它的邻居节点的特征,用来表示节点在整个图中的上下文信息。

  3. GNN 通常使用梯度下降算法进行训练,同时结合正则化、Dropout 等技术来避免模型过拟合。

  4. 对于大规模的图数据,GNN 通常使用采样、聚合等方法来减少计算量和存储量。

  5. GNN 通常会采用多层模型,并多次迭代地更新节点表示以达到更好的表现效果。

图神经网络的实用框架

图神经网络目前有多种可用的实用框架,以下是其中比较流行的几个实用框架:

  1. PyTorch Geometric(https://pytorch-geometric.readthedocs.io/en/latest/)
    是使用 PyTorch 建立的一个处理图结构数据的计算库,它支持大量的传统图算法和 Graph Neural Network (GNN)算法。该框架适用于处理大规模、高维度的图结构数据。

  2. Deep Graph Library(https://www.dgl.ai/)
    是一个用于处理图结构数据的深度学习库,支持多种深度学习模型,如图卷积网络、图注意力网络等。该框架适用于处理大规模、分布式图结构数据。

  3. GraphConv(https://github.com/mdeff/cnn_graph)
    是一个使用 TensorFlow 实现的 GNN 框架,尤其适用于处理空间二维数据的图结构信息。该框架的核心是使用图卷积网络对图的节点进行卷积操作,以提取特征信息。

  4. Deep Graph Nets(https://github.com/dsgiitr/dgmc)
    是一个使用 TensorFlow 实现的动态图神经网络(Dynamic Graph Neural Networks, DGN)框架,可以对不同的图动态编辑和更新,从而适应更加复杂的场景。

以上实用框架都提供了完备的图神经网络算法模型和相应的实现方式,使用时可以根据具体需求进行选择。

GCN

对于一个输入图,他有N个节点,每个节点的特征组成一个特征矩阵X,节点与节点之间的关系组成一个邻接矩阵A,X和A即为模型的输入。

GCN是一个神经网络层,它具有以下逐层传播规则:
在这里插入图片描述

其中,

  • ˜A = A + I,A为输入图的领接矩阵,I为单位矩阵。
  • ˜D为˜A的度矩阵,˜Dii = ∑j ˜Aij
  • H是每一层的特征,对于输入层H = X
  • σ是非线性激活函数
  • W为特定层的可训练权重矩阵

经过多层GCN逐层传播,输入图的特征矩阵由X变为Z,但邻接矩阵A始终保持共享,如下图:
在这里插入图片描述可以使用pyg(torch_geometric)搭建GCN网络:

import torch
import torch.nn as nn
from torch_geometric.nn import GCNConv
import torch.nn.functional as F


class GCN(torch.nn.Module):
    def __init__(self, in_channels, hidden_channels, out_channels):
        super().__init__()

        self.conv1 = GCNConv(in_channels, hidden_channels)
        self.conv2 = GCNConv(hidden_channels, out_channels)

    def forward(self, x, edge_index):
        x = self.conv1(x, edge_index)
        x = x.relu()
        x = F.dropout(x, p=0.5, training=self.training)
        x = self.conv2(x, edge_index)
        return x

在这里插入图片描述

图神经网络的几道面试题

以下是对于前面提到的一些图神经网络常见面试题的简要解析:

  1. 请简要介绍一下图神经网络是什么,有哪些应用场景?

图神经网络是一种针对图数据的深度学习模型,其主要应用于节点分类、图分类、链接预测、推荐系统等领域,最近也被应用于化学、物理、社交网络等领域的相关研究。

  1. 图卷积神经网络与普通卷积神经网络的区别是什么?

普通卷积神经网络(CNN)主要应用于处理在欧几里得空间中的数据。而图卷积神经网络(GCN)则主要应用于处理不规则图上的数据,其核心是对图上的邻接矩阵进行卷积运算。

  1. 什么是邻接矩阵和特征矩阵?

邻接矩阵描述了图中各个节点之间的连接关系,是一个 n×n 的二维矩阵,其中 n 表示节点的数量,对于节点 i 和 j,若其有连接,则邻接矩阵 Aij=1;否则 Aij=0。特征矩阵则描述了节点的特征信息,是一个 n×d 的二维矩阵,其中 d 表示节点特征的维度,每行表示一个节点的特征向量。

  1. 请简要介绍一下图卷积神经网络中的消息传递机制。

在图卷积神经网络中,每个节点会从其相邻节点那里接收信息,然后对这些信息进行汇聚,最终更新自身的特征表示。 具体来说,每个节点 i 会接收其相邻节点 j 对其传递的特征表示(特征矩阵V)和其邻接矩阵Aij 。 对这些信息进行汇聚后,节点 i 会得到对它的更新特征表示。

  1. 什么是图注意力网络(Graph Attention Network,GAT)?与传统 GCN 的区别是什么?

图注意力网络(GAT)是一种基于自注意力机制的图神经网络模型,其可以通过自适应地融合周围节点的信息来更新当前节点的特征表示。相较于传统的 GCN,GAT 的最大特点就是相邻节点的重要性不再是固定的,而是可以根据具体情况进行自适应地学习。

  1. 请简述一下 GraphSAGE 的计算过程。

GraphSAGE 是一种基于异构图中节点的邻居进行向量化的图神经网络方法。具体来说,它采用了一种类似于聚合池化的方式,将当前节点所在的子图中的所有节点向量拼接起来,然后通过一个神经网络模型(通常是多层感知机)来进行转换,并将转换后的结果作为当前节点的新特征表示。

  1. 什么是 Graph Auto-Encoder(GAE)?有哪些应用场景?

Graph Auto-Encoder(GAE)是一种用于无监督图表示学习的方法,其主要思想是通过训练一个编解码器,来实现一个低维的、半监督的特征嵌入表示。应用场景包括社交网络、蛋白质结构预测等领域。

  1. 请简述一下图神经网络中的 Graph Pooling 操作。

图神经网络中的 Graph Pooling 操作主要用于缩减图中节点的数量。具体来讲,它将当前子图中的若干个节点汇总成一个新的节点,然后再进行下一轮的特征提取。

  1. 什么是 ChebNet?与传统 GCN 的区别是什么?

ChebNet 是一种基于切比雪夫多项式的图卷积神经网络模型,它主要的优势在于可以同时考虑局部邻域信息和全局信息,具有更好的泛化性能。与传统 GCN 的区别主要在于,它使用 Chebyshev 多项式逼近邻接矩阵的拉普拉斯算子,进而把复杂的卷积操作转换成矩阵乘法,减少了计算复杂度。

  1. 什么是图表示学习?请举例说明。

图表示学习是指将复杂的图结构转化成低维的向量表达形式。例如,对于社交网络图中的用户节点,可以通过对节点的相邻节点进行聚合,并将聚合后的结果作为当前节点的新特征表示。又例如,对于生物分子中的原子结构,可以通过逐层转化耦合基础的图卷积神经网络来进行表示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/667907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UI自动化测试的痛点有哪些?怎么解决

目录 前言 1、需求不稳定,频繁变更的项目 2、开发维护周期短的项目 3、被测系统开发不规范,可测试性需求不明确 总结: 前言 当我们找工作的时候查看招聘信息发现都需要有自动化测试经验,由此看来测试人员不会一点自动化测试技…

【已解决】无法启动此程序,因为计算机中丢失vcruntime140.dll(解决方案)

vcruntime140.dll是什么什么文件呢?为什么电脑在运行一些游戏的时候会出现丢失vcruntime140.dll,然后游戏运行失败?这个dll文件是电脑重要的运行库文件。丢失了会导致很多程序无法运行。下面将介绍【已解决】无法启动此程序,因为计算机中丢失vcruntime1…

AOP介绍

AOP的介绍AOP相关概念相关概念:细谈通知 Spring AOP使用准备工作前置通知具体实现环绕通知配置规则表达式解析 Spring AOP原理 AOP的介绍 AOP:AOP是一种思想;面向切面编程。它对某一类的事情做集中处理;更准确的说是面向集中功能的编程 Spri…

【Linux常用命令上】——Linux系统02

目录索引 快速复习导航:查看Linux的ip:查看当前用户:切换路径:退出当前文件夹:用户工作目录: 文件树:测试网路是否正常连接:清除指令:查看当前操作系统信息:s…

SpringBoot整合模板引擎Thymeleaf(3)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 概述 在本章节详细介绍Thymeleaf的内置对象及其工具类。 Thymeleaf内置对象 对象描述#ctx上下文对象#vars同 #ctx,表示上下文变量#locale上下文本地化&#…

Java集合中ArrayList、LinkedList异同(面试题)

为什么一般都使用 List list new ArrayList() ,而不用 ArrayList alist new ArrayList()呢? 1. 问题就在于List有多个实现类,如 LinkedList或者Vector等等, 现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢&#xf…

自定义异常

打开搜索界面,快捷键:双击shift键盘 如何创立一个自己定义简单的异常,如下: 1,先用extends继承Exception(总异常类)然后定义私有类变量 2,用快捷键;latinsert 选择构造器(Constru…

Python+Requests+Unittest接口自动化测试

(1)接口自动化测试的意义、前后端分离思想 接口自动化测试的优缺点: 优点: 测试复用性。 维护成本相对UI自动化低一些。 为什么UI自动化维护成本更高? 因为前端页面变化太快,而且UI自动化比较耗时(比如等待页面元素的…

C高级 day37

1、编写一个名为myfirstshell.sh的脚本,它包括以下内容。 1、包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOME的值…

ESP32 S3-OLED显示小数函数

ESP32 S3 ardino平台,配中景园7针0.96OLED屏显示小数 OLED网上的驱动代码一般厂商发货会提供驱动程序,但是显示小数很多都没有编写。这里编写了一段可显示任意位小数的代码(以正点原子代码为基础),需要显示有符号的小数…

HDFS读写流程

读数据流程 客户端向NameNode请求文件的位置:客户端想要访问一个文件时,会向NameNode发送一个请求,要求获取该文件在HDFS上的位置信息。 NameNode将位置信息返回给客户端:NameNode接收到客户端的请求后,会返回该文件所…

【人脸检测0】视频分解图片与图片合成视频

一,引言 目标:这小节主要通过两个demo熟悉视频分解图片与图片合成视频的OpenCV的应用 环境:python3.6+OpenCV3.3.1 二,示例 Demo1:视频分解图片 目标: 1.指定文件夹中读取视频文件 2.将视频文件分解为图片 3.将图片保存在指定文件夹中 # -*-coding:utf-8-*- #auth…

Eureka配置文件详解

Eureka配置文件详解 文章目录 Eureka配置文件详解一、Eureka instance 配置项:二、Eureka Client 配置项三、Eureka Dashboard仪表板配置项四、Eureka Server配置项4.1 server与client关联配置4.2 server 自定义实现的配置4.3 server 与 remote 关联的配置4.4 serve…

《计算机图形学基础教程(孔令德)》期末考试-复习重点

文章目录 第一章(重点):考概念1. 计算机图形的两种表示方法 P52. 计算机图形学、模式识别、计算机视觉等等之间的关系 P63. 计算机图形学的研究内容 ( 笔记P7 )4. 发展历史 P75. 图形显示设备的发展 P96. 相关名词解释…

导入动画

资料 Rig Animation Unity性能优化 参数设置建议 Animation Type 不存在动画选择None;非人形动画选择Generic;人形动画可选择Generic或Humanoid。 需要反向动力学或动画重定向使用Humanoid,其他情况可使用Generic 骨骼数目相差不大时,Generci比Humano…

GWAS:表型的标准化(the normalization of phenotype)

GWAS表型的标准化方法一般有Quantile normalization、Inverse rank normalization、Z-score normalization等。 各自区别如下: 一、Quantile normalization 该方法将每个样本中表型值进行排序,然后将其规范化到一个标准分布,通常是正态分布…

uniapp多级联动选择器,区域选择组件分享

uniapp官方的多级联动选择器效果怎么样就不多说了,一言难尽。。。。 然后我对比了多个组件库,发现了uview组件库,里面有个picker选择器还可以,这是链接 但是在使用过程中也发现了该组件的一些问题 1、操作栏只能显示在顶部&…

MAC搭建M1环境的stable-diffusion

MAC M1 搭建 stable-diffusion 环境 文章目录 MAC M1 搭建 stable-diffusion 环境环境准备1. 硬件环境2. 系统环境3. 基础软件环境 主要参考资料操作步骤1. 下载git2. 下载conda3. 创建python环境4. 下载仓库5. 安装依赖6. 转换模型7. 验证和测试8. 构造Web界面9. 测试WebUI10.…

2023软件测试面试热点问题,3天刷完你的软件测试就牛了~

与开发工程师相比,软件测试工程师前期可能不会太深,但涉及面还是很广的。 在一年左右的实习生或岗位的早期面试中,主要是问一些基本的问题。 涉及到的知识主要包括MySQL数据库的使用、Linux操作系统的使用、软件测试框架问题、测试环境搭建问…