课程主页:CS224W | Home
课程视频链接:斯坦福CS224W《图机器学习》课程(2021) by Jure Leskovec
文章目录
1 前言
之前两篇内容介绍了GNN的单个层的构建方式(信息转换和信息聚合)以及如何将每一层GNN连接起来:
接下来两篇文章将介绍上图中的第四步和第五步,图增强部分和训练目标函数部分。
2 对GNN进行图增强
如上图,图增强的基本思路是:使原始输入图和应用在GNN中的计算图不完全相同(即对原始输入进行一定处理后,再得到GNN中应用的计算图)。之后要讨论的图增强分为两种:图特征增强和图结构增强。
为什么要进行图增强呢?
我们在之前的学习过程中都假设原始图数据和应用于GNN的计算图一致,但很多情况下原始图数据可能不适于GNN:
特征层面:输入图可能缺少特征(也可能是特征很难编码)
结构层面:
- 图过于稀疏,导致信息传递的效率低(因为边太少)
- 图过于稠密,导致信息传递的代价高(每次消息转换都需要对好几个节点做运算)
- 图太大,无法将计算图装在GPU内存中
所以我们需要对输入图进行增强。图增强的方法大致分为两类:
图特征增强:因为输入图缺少特征
图结构增强:
- 图过于稀疏,我们可以增加虚拟节点/边
- 图过于稠密→在传递信息时对邻居进行采样
- 图太大→在计算嵌入时对子图进行采样(在后续课程中会专门介绍如何将GNN方法泛化到大型数据上Scale up)
2.1 图特征增强
情形1:输入图上没有节点特征
有时,我们的输入图上是没有节点特征的(通常只有邻接矩阵),这时就需要图特征增强。
标准方法:
a. 给每个节点赋常数特征:
b. one-hot:给每个节点赋唯一ID,将ID转换为独热编码向量的形式(即ID对应索引的元素为1,其他元素都为0)
两种方法比较:
Constant node feature | One-hot node feature | |
表示能力 | 中等:所有节点都一样,但是GNN仍然可以学到图结构信息 | 高:每个节点ID唯一,所以可以储存节点特有的信息 |
泛化能力 | 高:对新节点再赋这个常数就行 | 低:无法泛化到新节点上,因为对新节点再赋ID的话,GNN无法嵌入这个新ID,所以训练前必须知道整个节点集和边集 |
计算开销 | 低:只有一维特征 | 高: |
适用情况 | 所有图 | 小图(没有新节点) |
情形2:GNN难以学习的特定结构
举例:节点所处环上的节点数(Cycle count feature)
问题:因为图上所有节点的度数相同(都是2),所以无论环上有多少个节点,GNN都会得到相同的计算图(二叉树),进而得到相同的节点嵌入,所以无法将节点区分开。
解决方法:加上cycle count这一特征向量(one-hot编码,节点数对应索引的元素为1,其他元素为0)。这样做之后,[0,0,0,1,0,0]将表示一个三角形、[0,0,0,0,1,0]将表示一个正方形。
其他给节点增强特征的方法有:Node degree(计算节点度数作为特征),Clustering coefficient(节点聚类系数:衡量节点邻居的连接程度),Centrality(节点中心度:考虑节点的重要性),PageRank等。
2.2 图结构增强
2.2.1 对稀疏图:添加虚拟节点 / 边
1.添加虚拟边
常用做法:在2-hop邻居之间加虚拟边
适用情况:如作者-论文组成的二部图中,增加2-hop的虚拟边可以在一篇论文的共同作者之间增加联系,他们可以直接交换信息,这意味着GNN层数会变少,训练也会更快。
2. 添加虚拟节点
做法:增加一个虚拟节点,这个虚拟节点与图(或者一个从图中选出的子图)上的所有节点相连
适用情况:在一个非常稀疏的图上,其中两个节点之间相距很远 ,比如10-hop,两节点的信息交换需要经过10层神经网络,花销巨大。
当创建虚拟节点之后,它能直接连接两个相距较远的节点,便于他们交换信息,使得神经网络的深度变浅。
2.2.2 对稠密图:邻居节点抽样
在信息传递的过程中,不再使用一个节点的全部邻居,而改为随机抽样一部分邻居。举例:
在上图中,我们随机选取节点B和D传递信息给A ,而额忽略节点C的信息。(类似于Dropout)
在下一层计算节点的嵌入时,可以抽样不同的邻居,以增加模型鲁棒性:
优点:计算图变小,大大降低计算成本
缺点:可能会损失重要信息
3 总结
本篇文章主要介绍了GNN模型中图特征增强和图结构增强的一些方法,通过图增强能使我们在训练神经网络时取得更好的效果。
4 参考文献
http://web.stanford.edu/class/cs224w/slides/08-GNN-application
cs224w(图机器学习)2021冬季课程学习笔记10 Applications of Graph Neural Networks_诸神缄默不语的博客