GraphGym是一个非常适合初学者到高阶学者研究GNN的开源组件,在这里对写出GrapyGym并开源的尤佳轩大佬表达感谢和敬佩~太强了
1.简介
本节内容主要来源于snap官网和GraphGym的论文。
GraphGym主要在探讨并解决三个问题,一是GNN怎么设计;二是探讨这些用GNN的不同的task之间是否具有一定的相似程度,进而高效的进行方法移植;三是如何评估一个GNN模型。
1.1 GNN design space
设计GNN主要有三个角度需要考虑:一是层内的GNN设计,二是层与层之间的GNN如何连接,三是GNN的训练参数如何设置。
层内设计:正则化、dropout、激活函数与聚合函数。
层间设计:层间连接是否需要skip、预处理层、信息传递层、后处理层
训练参数:batchsize、学习率、优化器选择、epochs
整个设计见下图所示。
1.2 GNN task space
task这里主要基于一个前提:不同类型的task和数据集在不同的gnn的效果表现不一样,因此比较不同类task,评估task的相似程度,进而给出可能的相似task的最佳gnn模型。
方法:给若干个模型的ancor,评估这些模型的distance。
1.3 Design space evaluation
感觉这里像是在像超参数一样,对不同的gnn组件设计及该项对结果的影响。例如:是否有BatchNorm对结果的影响、不同激活函数对node、graph level的影响等。
2 代码详解
主目录下的analysis提供类似1.3的解释,run目录下直接运行的脚本文件,graphgym目录下是论文里各个组件的详情。2的内容主要说graphgym目录下的代码详情。
移动到 graphgym目录下,代码分布见下图。下文看代码的逻辑是先看train文件,再看其他的细节文件。
2.1 train.py文件
先看最重要的train函数。可以看出这里最重要的调用就是train_epoch函数,次之是eval_epoch函数。
train_epoch 函数里涉及很多调用,这些调用都在上面图中的文件里。
2.2 model