本博客是将自己探索EEG项目的博客总结,包含数据的处理、模型选择、模型训练、模型验证和结论,博客的代码是早期版本不完整,需要完整代码请私聊;
主要:
1、在EEG(脑电)项目中,使用图神经网络对脑电进行处理,具体包括baseline的GCN图架构、复现baseline论文的RGNN架构、注意力机制图架构、Transformer图架构、注重效率的simple图架构等,进行实验和对比。
2、学习图神经网络相关的资料。是学习图神经网络的一个完整项目;
下面所有博客是个人对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、处理图的开源库
图卷积网络(GCN)及其变体已经受到了极大的关注,并已成为学习图表示的事实上的方法。GCN主要从最近的深度学习方法中获得灵感,因此可能会继承不必要的复杂性和冗余计算。在本文中,通过连续去除非线性和折叠连续层之间的权重矩阵来减少这种过度复杂度。从理论上分析了得到的线性模型,并表明它对应于一个固定的低通滤波器,然后是一个线性分类器。值得注意的是,实验评估表明,这些简化不会对许多下游应用的准确性产生负面影响。此外,所得到的模型可以扩展到更大的数据集,自然是可解释的,并且与FastGCN相比可以产生高达两个数量级的加速。
算法原理:
如图所示,GCN转换特征向量重复的通过K层,然后使用一个线性分类器作为最终的表示;相对的,SGC减少整个过程从而去简化特征传播步骤,紧跟着logistic回归。
X
′
=
(
D
^
−
1
/
2
A
^
D
^
−
1
/
2
)
K
X
Θ
,
\mathbf{X}^{\prime} = {\left(\mathbf{\hat{D}}^{-1/2} \mathbf{\hat{A}} \mathbf{\hat{D}}^{-1/2} \right)}^K \mathbf{X} \mathbf{\Theta},
X′=(D^−1/2A^D^−1/2)KXΘ,
这里的
A
^
=
A
+
I
\mathbf{\hat{A}} = \mathbf{A} + \mathbf{I}
A^=A+I指的是带着自环的邻接矩阵和对角度矩阵
D
^
i
i
=
∑
j
=
0
A
^
i
j
\hat{D}_{ii} = \sum_{j=0} \hat{A}_{ij}
D^ii=∑j=0A^ij,邻接矩阵可以通过edge_weight tensor包含其他值而不仅是1表示边权值。
注释:K-hop的中文的直译为K-跳,也可以被意译为K邻。在图上面,所谓K邻操作,指的是从某个顶点出发,寻找到所有的与其最短路径为K跳(或K步)的顶点的集合。K值为正整数>=1。
geometric开源代码实现
重要参数(其他参数和普通的一样):
1、K:K-hop,也就是K邻近。论文中研究K=2和K=3的情况,结果如下,K=2时精度上升较多于K=3时:
2、cached (bool, optional)
设置True时,会缓存 ( D ^ − 1 / 2 A ^ D ^ − 1 / 2 ) K X {\left(\mathbf{\hat{D}}^{-1/2} \mathbf{\hat{A}} \mathbf{\hat{D}}^{-1/2} \right)}^K \mathbf{X} (D^−1/2A^D^−1/2)KX,因为这个在每次运算都是不变的,在转导学习时必须True,但是默认是False.
参考:
[1902.07153] Simplifying Graph Convolutional Networks (arxiv.org)
了解图数据库,先从基础知识开始 (2) - 知乎 (zhihu.com)
torch_geometric.nn — pytorch_geometric documentation (pytorch-geometric.readthedocs.io)