Graphmixup论文梳理以及实验总结记录

本文是对“Graphmixup:Improving Class-Imbalanced Node Classification by Reinforcement Mixup and Self-supervised Context Prediction”的精简梳理和总结,并基于此文增加相关评价指标和数据集进行更多的实验分析,并对代码执行过程中遇到的问题以及解决方案进行记录。

获取地址:https://arxiv.org/abs/2106.11133
pdf地址:https://arxiv.org/pdf/2106.11133.pdf

博主关键词:类别不平衡 ·图模型· 自监督学习 节点分类

  1. 摘要

  • 直接在原始空间或特征空间进行mixup,由于少数类的极度稀疏性,可能会产生域外样本(即新合成的样本并不属于该类),故而我们构建semantic relation space,使得特征的mixup得以在semantic level进行。(以往的要么直接在样本的原始空间上,要么是经过诸如grapsage等的GNN框架提取变换后的embedding sapce)。

  • 在节点生成器和边生成器部分,为了同时捕获局部和全局信息,提出了两种基于上下文的自监督技术,引入了两种损失,使得边生成器的质量得到提升。

  • Reinforcement Mixup -- 自适应的决定少数类的生成的样本数量。

  1. 介绍

现有工作主要是基于不同类节点样本大致平衡的假设,实际应用中,存在严重的类不平衡;而对于图上的类不平衡问题,其主要的三个关键问题在于:

  • 如何生成少数类的新节点及其节点特征?

构建semantic relation space,使得特征的mixup得以在semantic level进行

  • 如何捕获生成节点和现有节点之间的连接?

初始想法:通过邻接矩阵重建任务来训练一个edge generated ,然后用它来预测合成的节点和现有节点之间是否存在边;但其存在缺陷:即基于Mse的矩阵重构完全忽略了图的拓扑信息,使得edge generate 过度强调具有相似节点特征之间的联系,而忽略了节点之间的远程依赖关系。而graphmixup的想法则是构造两个基于上下文的自监督任务,去同时考虑图上的局部和全局信息。

  • 如何确定少数类上的抽样比例?

传统任务是基于手工或则启发式估计,或则是多次实验确定,当做一个超参数去调节,而graphmiuxp则提出了一个reinforcement mixup机制去自适应的决定少数类上的过采样比例。

  1. 相关工作

  1. 类不平衡问题

算法级:寻求用适当的惩罚函数或模型正则化直接增加少数类的重要性;RA-GCN[3]提出通过对抗性训练学习参数惩罚函数,重新加权样本以帮助分类器更好地适应大多数和少数类,从而避免偏向任何一个类。DR-GCN[17]通过引入两类正则化来解决类不平衡问题,正则化采用条件对抗训练和潜在分布对齐。

数据级:为少数节点合成新的节点,使得整体类的不平衡问题在数据输入方面就得到缓解。原始的过采样技术/SMOTE/Graph_SMOTE;ImGAGN:一种生成对抗模型,利用生成器生成一组合成的少数节点。然后训练一个GCN鉴别器来区分真实节点和假节点(即生成的),以及少数节点和多数节点。

  1. 图上的自监督任务

预测方法一般通过一些简单的统计分析或专家知识自生成标签,然后根据自生成的标签执行基于预测的任务。在本文中,我们主要关注预测方法,因为它充分考虑了图结构中的上下文信息,包括局部和全局,使我们能够更好地捕获生成节点和现有节点之间的连接

  1. 具体方法

  1. 问题以及概念阐述:

  • G={V(节点集合),E(边的集合)},Xv(节点特征),A(邻接矩阵);类不平衡率h:即数量最少的类的和数量最多的类的比值。

  • 目标:合成少数节点及其对应的边,更新到完整的节点集和边集中,从而推断未知节点的标签。

  • 总体框架:GraphMixup的主要思想是通过语义特征混合模块执行特征混合以在语义关系空间中生成合成少数节点Vs,应用两个基于上下文的自监督任务来训练上下文边缘混合模块,该模块捕获生成节点Vs和现有节点V之间的本地和全局连接Es。最后,我们详细介绍了增强混合机制,其可以通过混合少数类自适应地确定要生成的样本的数量(即上采样比例)。

  1. 基于语义特征空间的mixup

构建多个语义空间,并在每个空间中进行聚合和转换,最后将每个空间中的语义特征合并为连接的语义特征。

  1. Semantic Relation Learning

(1)input node features --- low-dimensional hidden space

(2)generate a semantic relation graph Gk;G(k.i.j) -- 节点i和节点j的权重系数

(3) a graph descriptor dk for each relation graph Gk

(4) loss for train the exactor

  1. Semantic Feature Learning

(1)taking the weighted sum of its neighbors to learn the semantic features

(2)different semantic relation spaces can be concated to produce a final semantic feature

(3)semantic feature exactor is similar to GAT

  1. Minority Node Generation

linear interpolation on sample v from one target minority class with its nearest neighbor nn(v) to generate a new minority node.

  1. Contextual Edge Mixup

  1. origin idea

(1)trained on the raw node set and edge set and then used to predict the connectivity between generated nodes and existing nodes。

(2)loss -- L(rec)

problem -- 只考虑基于特征相似性的节点之间的连通性,可能会忽略重要的图结构信息

  1. Context-based Self-supervised Prediction
  • L(local)-- 图结构局部特征

(1) 预测不同节点对之间的最短距离,并将其分为四类(0,1,2,>=3);

(2) 损失函数 f(w)将输入线性映射为4维向量

  • L(global)-- 图结构全局特征

(1) 将图分为多个簇,具有最高程度的节点被视为对应的簇中心,计算各个节点到簇中心的距离

(2) 将学习目标表述为回归问题

  • L(edge)-- 节点特征组合

  1. Synthetic Edge Generation.
  • continuous edges

  • binary edges

  1. Reinforcement Mixup Mechanism

以往将上采样尺度α设置为所有少数类的固定超参数;搜索启发式的估计值而新的方法自适应地更新少数类的上采样尺度,我们将更新过程建模为马尔可夫决策过程(MDP)

  • State:在这一轮,为少数类生成的新节点,ai为比例,ai(init)初始比例,ki每个epoch会改变,增量

  • Action:根据reward对ki进行增加或减少

  • Transition:依据前述公式以及上述数目生成新节点

  • Reward:依据marco-F1评分,决定reward

  • Termination:终止条件:多个epoch修改量不超过一个阈值,则停止

  • cacluate:Q-learning algorithm

  1. Optimization Objective & Training Strategy

  • GNN classifier

  • Lnode

  • two-stage training strategy

  • 使用损失Ldis和Ledge对semantic feature extractor and edge predictor进行预训练(此时不涉及合成节点)

  • 用Lnode训练feature extractor and node classifier

  1. 具体实验

  1. Experimental setups

  • Datasets and Hyperparameters

(1)three dataset // BlogCatalog , WiKi CS , Cora

(2)imbalance ratios h -- varied(0.1-0.6) and more

  • Baselines and Metrics

(1)Baselines (11个)

(2)Metrics:ACC / AUC-ROC/Macro-F1

  1. Class-Imbalanced Classification (Q1)

demonstrates the advantage of soft continuous edges over thresholded binary edges

  1. Robustness to Different Imbalance Ratio (Q2)

GraphMixup generalizes well to different imbalance ratios

The improvement gain of GraphMixup is more significant when the imbalance ratio is extreme

  1. Influence of Bottleneck Encoder (Q3)

  • consider three common encoders: GCN , SAGE , and GAT .on the Cora dataset.

  • GraphMixup works well with all four bottleneck, SFE slightly better

通过对具有K=4个语义关系的128维潜在特征的相关性分析,我们发现只有SFES的相关图显示出四个清晰的对角块,这表明了其提取高度独立的语义特征的优异能力.

  1. Self-Supervised Prediction Analysis (Q4)

  • 消融实验 // LP,GP,LP and GP,no // 都有提升,合起来提升最大

  1. RL Process Analysis (Q5)

  • GraphMixup-Fix -- 删除reinforcement组件,为少数类采样设置固定的比例,进行实验,小于0.8时都是上升,但超过后会出现下降.

  • 可视化上采样率累计和变化的更新过程;Cora最终收敛到0.3,初始0.5,加起来正好是0.8,符合单独查询的结果,证明了有效性,即可以自适应的确定上采样比例

  1. 代码执行

  1. 配置代码环境,上传服务器,测试代码

  • 下载相关依赖,nni,pymetis

  1. 依据readme.md进行相关train,test源码的测试,得到论文的相应结果

  1. python train.py --dataset data_name --setting pre-train
  • 问题1:文件夹丢失;解决:在工程中对应建save文件夹,在save文件夹中建立cora和BlogCatalog,同样的建立checkpoint文件夹

  • 成功开跑代码

  • 注意其在代码执行过程中会先跑2000遍

  • 跑完之后,会继续执行类似代码,直到early——stopping;但是此处跑完之后并没有保存pre-train模型的参数,而且之后模型用的也只是上部分代码保存的参数,而且pre——train——500,1000,1500,2000,是盲选2000吗?或许这个不重要?

  • Early stopping !

(1)条件是什么

(2)Final result指的是什么?

  1. python train.py --dataset cora --setting fine-tune --load pre-train_2000
  1. 增加其他论文中对应的评价指标,继续跑代码,进行对比

  • 输入:logits 预测的每类的分数,labels 真实的类别

  • ACC

  • AUC-ROC --sklearn.metric--roc_auc_score 调包

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html

  • F1-SCORE

  • cmAccuracy:明确balanced_accuracy_score输入的labels和preds的形式:皆为一维数组

  1. 着重观察dataload的形式,以及后续api的调用,确定准确的数据接口形式

  1. cora数据集
  • 该数据集包含机器学习领域2708篇文章,总共有7种类别(Case_Based,Genetic_Algorithms,Neural_Networks,Probabilistic_Methods,Reinforcement_Learning,Rule_Learning),在最终的语料库中,每一篇论文都引用或至少被另一篇论文引用,包含5429条边;每个出版物都有1433个特征组成,每个特征仅有0-1表示,包含5429条边;

  • cora.cites (5429*(1(被引用论文的ID)+1(引用上述论文的ID)))

  • cora.content (2708*(1(paper_id)+1433(word_attributes )+1(class_label)))

  • 实际应用:随机选择个类作为少数类,其余类作为多数类样本,其中所有多数类都具有20个样本,而少数类则是20*(class_imbalance_ratio)

  • 训练集,验证集,测试集的数量分配问题?(以往是训练140,验证140,测试2428),训练的时候,会将整张图输入进去,所有的节点都会参与训练过程,唯一的区别是,训练的时候只用训练集节点去更新梯度,其他节点仅仅作为特征。依据预先核定的样本数量取训练样本,验证样本固定为25个,测试样本固定为55个,返回的是引用值。

  • 更改加入指标后得到相应结果为:(Graphmixup)

似乎结果比对比论文好一点,但是其使用的测试数据量不同也是其中一个原因,其测试为每一类固定数量55,总量为385个,但对比论文测试是2428个?这个后续需要调整成一样

im-ratio -0.5 全部默认参数时

acc auc_roc f1 cmA

test : 0.761038961 0.938091303 0.761554171 0.761038961

  1. BlogCatalog数据集
  • 基于微软学术图表的合作者图表。节点表示作者,边缘表示合作作者关系。这些特征源自每个作者论文的论文关键词。同时,班级标签标明了每位作者最活跃的学习领域;节点数为10312,边条数为333983,label维度为39,原始数据集包含两个文件:

  • Node.csv:以字典的形式存储用户的信息,但是只包含节点的id

  • Egde.csv:存储博主的社交网络好友等,以此来构图

  • 其中blogcatalog.embeddings_64:节点特征的64维度嵌入(10312*65)blogcatalog.mat:其中包含边的连接关系(邻接矩阵10312*10312)以及节点的特征(10312,39)

  • 训练,验证,测试划分:根据每一类的量/2或者/4得到,eg:第一类167个,下述为对应量;实际应用:将14个数量少于100的类视为少数类

  • 代码耗时

agent.get_label(),计算不同对之间的最短距离处此处慢,此处未用GPU,因为计算self.graph时,已经将adj转换到cpu上了;可能是调试的问题,实际运行的时候并不会很慢

  • pre_train

  1. fine-tune //OOM 分析以及解决方法--显存碎片化使用机制
  • CUDA out of memory. Tried to allocate 654.00 MiB (GPU 1; 23.70 GiB total capacity; 19.51 GiB already allocated; 122.56 MiB free; 22.48 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.

  • 找到train阶段的batch处,减少batch;寻找后似乎未发现无batch_size相关变量,故而暂时放弃

  • 从显存管理机制入手:更改max_split_size_mb

(1)显存碎片化引起的CUDA OOM;分析reversed-allocated = 22.48 - 19.51 = 2.97GB >654MB 但是 free =122.56MB,符合消息中的reversed memory >> allocated memory;显然显存是够的,但是因为碎片化而无法分配,故而关注PYTORCH_CUDA_ALLOC_CONF这个环境变量设置。

(2)实际逻辑:默认情况下阈值变量max_split_size_mb为 INT_MAX,即全部 Block 都可以拆分,所以导致OOM的显存请求发生时,所有大于该请求的空闲Block有可能都已经被分割掉了;而将max_split_size_mb设置为小于该显存请求的值,会阻止大于该请求的空闲Block被分割。如果显存总量确实充足,即可保证大于该请求的空闲Block总是存在,从而避免了分配失败的发生。

(3)进一步优化,确立最佳设立值:将max_split_size_mb设置为小于OOM发生时的显存请求大小最小值的最大整数值,就可以在保证跑大图的可行性的同时最大限度照顾性能。

(4)具体linux系统上实现:

  • Auc_test: 0.643864,cmA_test:0.100623

F1_test : 0.095101, Acc_test: 0.243684,

  1. wiki_cs数据集
  1. 增加对比论文中另外三个数据集的data_load,完成代码更改,进行对比实验

  1. cora对比
  • adj, features, labels,idx_train, idx_val, idx_test, class_num_mat,GNN /Graphmixup

  1. Citeseer
  • 同cora为论文引用的关系,节点3327,边为9228,train=val=831,test=1663,文件形式为:

  • 更改相关参数,num_im_class,clu_nclass,dis_nclass,k_num;

  • 更改adj处的代码,未用稀疏性tensor

  • pre_train阶段

  • fine-tune

  1. Amazon Comp
  • 更改相关参数,num_im_class,clu_nclass,dis_nclass,k_num;更改adj处的代码,未用稀疏性tensor

  • acc auc_roc f1 cmA

test: 0.8147930.973865,0.753112 0.739426

  1. Coauthor CS
  • 14个类,取两个为少数类,边总数为163788;节点总数为18333,train=val=4579,test=9164

更改相关参数,num_im_class,clu_nclass,dis_nclass,k_num;更改adj处的代码,未用稀疏性tensor

  • acc auc_roc f1 cmA

test: 0.892405 0.981469 0.838285 0.826319

本文仅是记录,尚有部分问题未解决,理解也可能不对,欢迎大家讨论指正。

【论文速递 | 精选】

论坛地址:https://bbs.csdn.net/forums/paper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值