下面所有博客是个人对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 e∈E,连接着两个或者更多的顶点,并且被分配一个权重 w ∈ W e w \in W_e w∈We.邻接矩阵是一个$ |
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》