图神经网络汇总和总结

news2024/11/28 10:44:24

下面所有博客是个人对EEG脑电的探索,项目代码是早期版本不完整,需要完整项目代码和资料请私聊。


数据集
1、脑电项目探索和实现(EEG) (上):研究数据集选取和介绍SEED
相关论文阅读分析:
1、EEG-SEED数据集作者的—基线论文阅读和分析
2、图神经网络EEG论文阅读和分析:《EEG-Based Emotion Recognition Using Regularized Graph Neural Networks》
3、EEG-GNN论文阅读和分析:《EEG Emotion Recognition Using Dynamical Graph Convolutional Neural Networks》
4、论文阅读和分析:Masked Label Prediction: Unified Message Passing Model for Semi-Supervised Classification
5、论文阅读和分析:《DeepGCNs: Can GCNs Go as Deep as CNNs?》
6、论文阅读和分析: “How Attentive are Graph Attention Networks?”
7、论文阅读和分析:Simplifying Graph Convolutional Networks
8、论文阅读和分析:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
9、图神经网络汇总和总结
相关实验和代码实现:
1、用于图神经网络的脑电数据处理实现_图神经网络 脑电
2、使用GCN训练和测试EEG的公开SEED数据集
3、使用GAT训练和测试EEG公开的SEED数据集
4、使用SGC训练和测试SEED数据集
5、使用Transformer训练和测试EEG的公开SEED数据集_eeg transformer
6、使用RGNN训练和测试EEG公开的SEED数据集
辅助学习资料:
1、官网三个简单Graph示例说明三种层次的应用_graph 简单示例
2、PPI数据集示例项目学习图神经网络
3、geometric库的数据处理详解
4、NetworkX的dicts of dicts以及解决Seven Bridges of Königsberg问题
5、geometric源码阅读和分析:MessagePassin类详解和使用
6、cora数据集示例项目学习图神经网络
7、Graph 聚合
8、QM9数据集示例项目学习图神经网络
9、处理图的开源库

回顾一下以前看过的图神经网络的综述:

注:看综述主要看对领域相关的分类和发展脉络,综述不会对每一种算法有详细叙述,看详细算法需要在脉络中找到自己合适的部分进行详读。



图类型:

不同的图类型,对应有不同的算法去解决相关问题;

在这里插入图片描述

An overview of variants considering graph type and scale.

注意,这些类别是正交的,这意味着这些类型可以组合,例如,可以处理动态有向异构图。还有一些其他的图类型是为不同的任务设计的,比如超图和有符号图。这里我们不会列举所有类型,但最重要的想法是考虑这些图提供的附加信息。一旦我们指定了图形类型,在设计过程中就应该进一步考虑这些图形类型所提供的附加信息。


图类型
Undirected/Directed有向图中的边都是从一个节点定向到另一个节点,这比无向图提供了更多的信息。无向图中的每条边也可以看作是两条有向边.
Homogeneous/Heterogeneous同构图中的节点和边具有相同的类型,而异构图中的节点和边具有不同的类型.
Dynamic当输入特征或图的拓扑结构随时间变化时,将图视为动态图。在动态图中应考虑时间信息。
Hypergraph超图可以被表示成 G = ( V , E , W e ) G=(V,E,W_e) G=(V,E,We),边 e ∈ E e \in E eE,连接着两个或者更多的顶点,并且被分配一个权重 w ∈ W e w \in W_e wWe.邻接矩阵是一个$
Signed有符号图是有符号边的图,即边可以是正的也可以是负的。SGCN (Derr等人,2018)没有简单地将负边视为缺失边或另一种类型的边,而是利用平衡理论来捕获正边和负边之间的相互作用。直观地说,平衡理论认为,我朋友的朋友(正面边)也是我的朋友,我敌人的敌人(负面边)也是我的朋友。为SGCN模拟正边和负边之间的相互作用提供了理论基础。
Large Graph大规模图.“小”图和“大”图并没有明确的分类标准。该标准仍在随着计算设备的发展而变化(例如gpu的速度和内存)。在本文中,当一个图(空间复杂度为 O ( n 2 ) O(n^2) O(n2))的邻接矩阵或图拉普拉斯数不能被设备存储和处理时,我们将图视为一个大尺度图,这时需要考虑一些采样方法.

Dynamic补充说明:图的结构,例如边和节点,随着时间不断变化。为了将图结构数据与时间序列数据一起建模,DCRNN (Li et al., 2018b)和STGCN (Yu et al., 2018)首先通过gnn收集空间信息,然后将输出输入序列模型,如序列到序列模型或RNNs。不同的是,structure - rnn (Jain et al., 2016)和ST-GCN (Yan et al., 2018)同时收集空间和时间信息。他们用时间连接扩展静态图结构,从而可以将传统gnn应用于扩展图。类似地,DGNN (Manessi et al., 2020)将GCN中每个节点的输出嵌入馈送到单独的lstm中。每个节点共享lstm的权值。另一方面,EvolveGCN (Pareja et al., 2020)认为,直接对节点表示的动态建模将阻碍模型在节点集不断变化的图上的性能。因此,它不是将节点特征作为RNN的输入,而是将GCN的权重输入到RNN中,以捕获图交互的内在动态。最近,一项研究(Huang et al., 2020)根据链路持续时间将动态网络分为几类,并根据现有模型的专业化将其分组。建立了动态图模型的总体框架,并将现有模型纳入总体框架。



设计损失函数

根据不同的任务类型设计损失函数:

Task
Node-level节点级任务以节点为中心,包括节点分类、节点回归、节点聚类等。节点分类试图将节点分类为几个类,节点回归预测每个节点的连续值。节点聚类的目的是将节点划分为几个不相连的组,其中相似的节点应该在同一个组中。
Edge-level任务是边分类和链路预测,这需要模型对边类型进行分类或预测两个给定节点之间是否存在边。
Graph-level任务包括图分类、图回归和图匹配,所有这些都需要模型学习图表示。




根据监督进行分类:

Type
Supervised setting提供有标签数据
Semi supervised setting给出少量的标记节点和大量的未标记节点用于训练。在测试阶段,transductive setting要求模型预测给定未标记节点的标签,而inductive setting提供来自相同分布的新的未标记节点进行推断。大多数节点和边缘分类任务都是半监督的。
Unsupervised setting仅为模型提供未标记的数据以查找模式。节点聚类是典型的无监督学习任务。

Unsupervised setting训练的分类:

在这里插入图片描述



神经网络模块:

传播模块、采样模块、池化模块是图的三个神经网络组成模块;

传播模块:用于在节点之间传播信息,以便聚合的信息可以捕获特征和拓扑信息。在传播模块中,卷积算子和循环算子通常用于聚集来自邻居的信息,而跳跃连接操作用于从节点的历史表示中收集信息,并缓解过平滑问题

采样模块:当图很大时,通常需要采样模块在图上进行传播。采样模块通常与传播模块结合在一起;

池化模块:需要高层次子图或图的表示时,需要池化模块从节点中提取信息;

一个GNN的通常表示:

GNN模型的典型架构如图2的中间部分所示,使用卷积算子、循环算子、采样模块和跳跃连接在每一层传播信息,然后加入池化模块提取高层次信息。这些层通常被堆叠以获得更好的表示。注意,这种架构可以推广大多数GNN模型,但也有例外,例如NDCN (Zang and Wang, 2020)结合了常微分方程系统(ode)和GNN。

在这里插入图片描述

Fig. 2. The general design pipeline for a GNN model



传播模块

在这里插入图片描述


算子类型
convolution operator卷积算子分为谱方法和空间方法。
recurrent operator循环算子和卷积算子之间的主要区别是卷积算子中的层使用不同的权值,而循环算子中的层共享相同的权值。
skip connect许多应用程序展开或堆叠图神经网络层,目的是获得更好的结果,因为更多的层(即k层)使每个节点聚集更多来自邻居k-skip的信息。然而,在许多实验中观察到,更深入的模型并不能提高性能,甚至可能表现得更差。这主要是因为更多的层也可以从指数增长的扩展邻域成员中传播噪声信息。同时,因为当模型深入时,节点在聚合操作后倾向于具有类似的表示,还会导致过度平滑问题。因此,许多方法都试图添加“skip connect”来使GNN模型更深。



采样模块

在这里插入图片描述


GNN模型从上一层的邻域聚集每个节点的消息。直观地,如果我们回溯多个GNN层,支持邻居的大小将随着深度呈指数增长。为了缓解这种“邻居爆炸”问题,一个有效的方法就是抽样。此外,当我们处理大型图时,我们不能总是存储和处理每个节点的所有邻域信息,因此需要采样模块来进行传播。三种图采样模块:节点采样、层采样和子图采样.

采样模块
Node sampling减少相邻节点大小的一种直接方法是从每个节点的邻域中选择一个子集。
Layer sampling层抽样不是对每个节点的邻居进行抽样,而是在每层中保留一小组节点进行聚合,以控制扩展因子。
Subgraph sampling不同于在完整图的基础上对节点和边进行采样,一种根本不同的方法是对多个子图进行采样,并将邻域搜索限制在这些子图内。

Node sampling: GraphSAGE (Hamilton et al., 2017a)对固定数量的邻居进行采样,确保每个节点的邻居大小为2到50个。为了减少采样方差,Chen等人(2018a)利用节点的历史激活作为控制变量,引入了一种基于控制变量的GCN随机逼近算法。该方法将接受域限制在1跳附近,并使用历史隐藏状态作为一个可负担的近似。PinSage (Ying et al., 2018a)提出了基于重要性的抽样方法。通过模拟从目标节点开始的随机行走,该方法选择规范化访问次数最高的top T节点。

Layer sampling:FastGCN (Chen et al., 2018b)直接对每一层的接受野进行采样。它使用重要性抽样,其中重要节点更有可能被抽样。与上述固定采样方法相比,Huang等人(2018)引入了一种参数化和可训练的采样器,以前一层为条件进行分层采样。此外,该自适应采样器在优化抽样重要性的同时降低了方差。LADIES (Zou等人,2019)打算通过从节点的邻居并集中生成样本来缓解分层采样中的稀疏性问题.

Subgraph sampling:ClusterGCN (Chiang et al., 2019)通过图聚类算法对子图进行采样,而GraphSAINT (Zeng et al., 2020)则直接对节点或边进行采样以生成子图



池化模块

在这里插入图片描述

在计算机视觉领域,卷积层之后通常是池化层,以获得更多的一般特征。复杂且大规模的图通常具有丰富的层次结构,这对于节点级和图级分类任务具有重要意义。与这些池化层类似,很多工作都侧重于在图上设计分层池化层。两种池化模块:直接池化模块和分层池化模块。

池化模块
Direct pooling modules直接池化模块直接从具有不同节点选择策略的节点学习graph-level表示。这些模块在某些变体中也称为读出函数。Simple Node Pooling、Set2set、SortPooling
Hierarchical pooling modules前面提到的方法直接从节点学习图表示,它们不研究图结构的层次结构。Hierarchical pooling modules遵循分层池模式并按层学习图形表示的方法。Graph Coarsening、Edge-Conditioned Convolution (ECC) 、gPool、EigenPooling、SAGPool。



参考:

1、图神经网络(GNN)模型原理及应用综述_图神经网络模型_的博客-CSDN博客

2、《Graph neural networks: A review of methods and applications》

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

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

相关文章

LeetCode——二叉树的层序遍历

102. 二叉树的层序遍历 I 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]…

超级详解MySQL执行计划explain

1、什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解。 MySQL本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构…

窗函数的总结

1. 为什么要加窗 每次FFT变换只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断。即使是周期信号,如果截断的时间长度不是周期的整数倍(周期截断),那么,截取后的信号将会存在泄…

C++算法初级10——动态规划

C算法初级10——动态规划 文章目录C算法初级10——动态规划最优化问题动态规划分析流程和条件最优化问题 生活中我们常常遇到这样一些问题: 看到上面的例子,我们发现这些问题都是在最大化(或者最小化)某个指标:最小化…

leetcode重点题目分类别记录(三)动态规划深入与素数理论

文章目录动态规划背包问题01背包抽象出求解目标尝试进程子问题拆分基本情况根据拆分过程定义dp数组与转移方程遍历顺序与状态压缩模板归纳题目应用变种提升组合问题多维01背包有特殊限制的01背包完全背包尝试进行子问题拆分转移方程题目应用变种提升-求组合/排列数打家劫舍变种…

二维数组的总结

一、时间复杂度和空间复杂度 时间复杂度和空间复杂度是衡量算法效率的两个重要指标。时间复杂度是指算法执行所需的时间,而空间复杂度是指算法执行所需的内存空间。 计算时间复杂度和空间复杂度需要分析算法中各个操作的执行次数和内存使用情况。具体的计算方法可以…

【matlab代码】提取任意多边形内的nc数据--以海洋温度为例子

【matlab代码】提取任意多边形内的nc数据–以海洋温度为例子 本文来源于对象想提取一个矩形内的温度数据,从而求平均能看出时间序列变化。 由于平时我们矩形是和经纬度平行,我们可以直接使用lon,lat进行寻找。 例子如图: 图片 这样的水平图,大家都会,直接: find(lon…

数据库作业合集

目录[TOC](目录)数据库作业第七章(1)习题7关系模式(2)习题8关系模式数据库作第三章34数据库作第二章6数据库作业第三章59数据库作业第八章(1)统计离散数学的成绩分布情况,即按照各分数段统计人数…

ROS--URDF集成Gazebo仿真小车和rviz结合

ROS–URDF集成Gazebo仿真小车 实现流程: 需要编写封装惯性矩阵算法的 xacro 文件为机器人模型中的每一个 link 添加 collision 和 inertial 标签,并且重置颜色属性在 launch 文件中启动 gazebo 并添加机器人模型工作目录 1.编写封装惯性矩阵算法的 head.xacro 文件…

【MySQL】B+树索引——InnoDB 中的索引方案;MylSAM 中的索引方案 和 InnoDB 中的索引方案 对比

一、InnoDB 中的索引方案 1. 聚簇索引 聚簇索引 有两个特点: 使用记录主键值的大小进行记录和页的排序,这包括3方面的含义. (1)页〈包括叶子节点和内节点〉内的记录按照主键的大小顺序排成一个单向链表,页内的记录被…

MongoDB 介绍和基本操作

一、MongoDB数据库 1、MongoDB是一种非关系型数据库,是用C语言编写的。其特点是高性能、易部署、易使用,存储数据方便。 2、MongoDB特点: 面向集合存储,易于存储对象类型数据;支持动态查询,支持完全索引&…

灌区量测水系统

1)灌区量测水 灌区量测水是水资源管理的基础,是推进节水农业和水价改革的重要手段。常规在主要水闸处,监测闸前和闸后水位及闸门开启状态(闸位),通过实时监测数据,计算过闸流量。要实现全灌区水资源动态配置、精准灌溉&#xff0…

C语言小项目 -- 通讯录完整代码(登陆系统+动态开辟 + 文件操作)

目录 📰0. 项目介绍 📰1. 开发环境及框架 📰2. 通讯录账户模块功能分析实现: 📱2.1 通讯录账户菜单界面及数据结构设计 📱2.2 通讯录账户注册功能实现 📱2.3 通讯录账户登录功能实现 &am…

完美解决丨 - [SyntaxError: invalid syntax](#SyntaxError-invalid-syntax)

目录 报错名称SyntaxError: invalid syntaxNameError: name xx is not definedIndentationError: expected an indented blockAttributeError: xx object has no attribute xxTypeError: xx object is not callableValueError: I/O operation on closed fileOSError: [Errno 2]…

目前的Android 市场怎么样?还好吗?

如今,随着互联网和移动设备的普及,Android 系统已成为全球最大的移动操作系统之一,成为最受欢迎的应用程序开发平台之一。作为一名 Android 开发者,我们生活中的大部分应用程序都是基于 Android 平台开发的,而我们的工…

从字节码分析String创建的几种方式

一.String a new String("a"); 1.到底会不会进入常量池 String a new String("a"); 通过idea中jclasslib插件获取到字节码 0 new #2 3 dup 4 ldc #3 <a> 6 invokespecial #4 <java/lang/String.<init> : (Ljava/lang/String;)V>9 as…

MongoDB 聚合管道中使用数组表达式运算符获取数组长度($size)和反转数组($reverseArray)

数组表达式运算符主要用于文档中数组的操作&#xff0c;本篇我们主要介绍如何使用数组表达式运算符获取数组的长度以及对数组中的数据进行反转&#xff1a; 一、准备数据 初始化成员数据 db.persons.insertMany([{ "_id" : "1001", "name" : …

go错误处理

func test() {num1 : 10num2 : 0result : num1 / num2fmt.Println("result", result)} func main() {test()for {fmt.Println("运行完毕&#xff01; main 下面的代码")time.Sleep(time.Second)}}在默认情况下&#xff0c;当发生错误后(panic) ,程序就会…

港联证券|揭秘涨停 旅游板块掀涨停潮

今天&#xff0c;A股三大股指低开低走。沪深两市收盘共38股涨停。剔除7只ST股&#xff0c;合计31股涨停。另外&#xff0c;14股封板未遂&#xff0c;整体封板率为73.08%。 涨停战场&#xff1a;6股封单资金超亿元 港联证券核算&#xff0c;从收盘涨停板封单量来看&#xff0c;…

【Pytorch】数据预处理

Pytorch是机器学习里面常用的框架之一&#xff0c;我们在学习机器学习之前最好需要学习如何使用这个框架对我们将要使用的数据数据进行预处理操作。 如果我们想要学习好pytorch里面的方法&#xff0c;我们需要常去用一下dir()和help()函数&#xff0c;它们一个会帮我们查看某个…