本blog为零基础多图详解图神经网络(GNN/GCN)【论文精读】_哔哩哔哩_bilibili的学习笔记
原论文链接A Gentle Introduction to Graph Neural Networks (distill.pub)
个人学习记录,仅供参考,如果错漏请见谅!
一、GNN结构
给全局向量、顶点向量、边向量分别构造多层感知机MLP(全连接层),共有3个MLP,构成一层GNN(输入和输出均为图)
不同类型的输入向量(全局/顶点/边)放入对应的MLP,得到更新的向量-->效果:全局/顶点/边的属性attributes改变但是图的结构没有发生变化
缺失向量-->解决办法:pooling汇聚,用已知的向量相加得到缺失的向量
以下为用GNN完成某一任务的全部结构
缺点:没有在GNN中放入图的结构信息,只是利用了属性-->解决方法:信息传递,类似前述pooling,eg.输入的顶点向量改为自己与相连的顶点向量的加和sum,再放入MLP得到更新结果,如下所示
于是GNN更新为以下结构,和前面相比多了pooling汇聚
再进一步,前面的pooling都是在GNN之后做的,下面可以在GNN里面提前做pooling
这样可以在把边的信息传递给顶点
终极版:全局/顶点/边向量都pooling:全局向量同时包括顶点和边的信息,更新如下
最终效果如下所示(最后一层图的一个顶点可能就包含了整张图的信息)
二、GNN调参(GNN对超参数较为敏感,不同的超参数设置可能导致很大的模型性能差别)
可调的超参数有:
GNN层数layer
每个向量embedding的长度
pooling的方法:sum/取平均mean/取最大值max
信息传递:在哪些向量之间进行信息传递
三、相关技术
图采样:因为多层GNN后,最后一层图的一个顶点可能就包含了整张图的信息,对它算梯度时需要保存整张图的中间结果,太consume,所以每次取一个小图,在上面做汇聚pooling/aggregate
graph attention networks:前面的pooling是简单sum,但是也可以像卷积一样有权重再加和,但是卷积每一个窗口内不同位置的权重是不一样的(固定位置固定权重),而图上顶点的位置不固定-->解决方法:类似注意力机制,权重取决于两个顶点向量之间的关系(比如点乘后softmax),而不是位置