《Effective and Interpretable fMRI Analysis via Functional Brain Network Generation》
前言
这篇是Individual level的,即对每个被试构建一个graph然后对其进行分类。
论文地址:https://hejiecui.com/files/papers/brainnet_gen.pdf
代码地址:寻找中…
一、引入
(1)之前一些基于Individual level的工作,都是把ROI之间的皮尔逊相关系数(或偏相关系数)作为节点间是否有边相连的依据(或直接作为边的权重)。然而,fMRI数据具有高维、低信噪比等特征,如果直接用上述方法去构建图网络,好像并不利于下游任务进行的样子。(2)而且皮尔逊相关系数有正有负,节点又没有适当的特征,大多数的GNN模型都是不适用的。
基于以上两点,作者就提出了一种新的构建图网络的方法,即让模型自己学习出被试的连接矩阵。
二、模型
模型由三部分构成,Feature Encoder、Graph Generator和Graph Predictor。
1.Feature Encoder
这部分的作用就是从fMRI数据中提取更深层的特征he,文章中有两种方法:
(1). biGRU
用时间窗去分割BOLD信号序列,然后在双向循环网络中学习出每个ROI的特征(不是属性)。
(2). CNN
用一维的CNN对节点的时间序列进行卷积,然后再用一些池化的手段得到ROI的特征。
2.Graph Generator
有了 he 之后,就可以构建连接矩阵A了。
用softmax函数处理矩阵he,保证了hA 中所有的值都为正数(进一步可知矩阵A的元素均为正数),并且能突出一些重要的特征,从而使得相关ROI之间的连接强度更大。
3.Graph Predictor
把节点的属性矩阵F以及可学习的连接矩阵A输入到k层的GCN中,得到节点最终的嵌入表示向量。然后将所有节点的表示向量相加作为全局的表示向量并用于分类。
4.Loss Function
一个好的模型真的需要一个合适的损失函数支撑。对比了下自己设计的损失函数和作者设计的损失函数,更加坚定了自己是菜狗的想法…
作者设计的损失函数由四部分组成,分类损失Lce,类内损失Linner,类间损失Lintra 以及稀疏性损失 Lsparsity。
(1). 类内损失Linner
加入这个损失的目的是为了使由同一类被试(患者或正常人)所构建的连接矩阵的差异尽可能小。
(2). 类间损失Lintra
加入这个损失的目的是为了使由不同类被试所构建的连接矩阵的差异尽可能大。
(3). 稀疏性Lsparsity
有很多研究表明脑网络是稀疏连接的,即一个ROI仅与个别ROI有直接的联系。加入这个损失的目的就是为了构建稀疏的网络,以此突出与任务相关的边。
三、实验
我自己用的数据集差不多也是500多个样本,比例也差不多,但我总是碰到过拟合的问题…等找到这个代码的时候,再好好研究一下我自己哪里设计不对了。
1.对比直接用时间序列的模型
用1D-CNN以及bi-GRU模型分别从fMRI数据中提取特征,然后直接用多层感知机进行分类。
2.对比用其他方法构建连接矩阵的模型
(1). 计算时间序列之间的皮尔逊相关系数,并将其绝对值作为ROI之间的连接强度。
(2). 全连接的图,并且连接强度均为1。
用全1矩阵作为连接矩阵时,指标其实也是蛮高的。我认为这反到说明了节点属性对于分类的重要性。
3.消融实验
比较不同损失函数对实验结果的影响。
CE + SL这样的组合表现性能也不错,这说明对连接矩阵的稀疏性进行限制有利于提高指标。
4.可视化
本文提出的模型高亮了默认网络(DMN),与此前的一些研究想一致。而用皮尔逊系数构图的方法,几乎高亮了所有的功能网络,这并不能给下游任务提供多么有效的信息。
作者还做了T检验,比较了哪些功能网络对于性别有较好的区分度。前三名分别是VA、DMN和MR。
问题
文章在Dataset部分提到,经过常规预处理流程后的fMRI数据在时间轴上均为120。我没去了解过PNC这个数据集,不知道这些数据初始时在时间轴的维度是否是相同的。如果不相同,那么slice timing后也是不相同的;如果相同的话,那么只有少部分数据集可以用这个模型(仅以我的了解,大部分数据集是集合了世界各地的数据的,它们在时间轴上的维度不尽相同)。因为该模型需要在fMRI的时间轴上提取出相同维度的特征,如果初始的时间长度不同,那么不管是bi-GRU还是1D-CNN,都不能提出相同维度的特征。