由于在实际的训练中,原始的图结构往往不是训练的最优图结构。下面我们考虑如何对图进行增强(graph augmentation),这个类似于数据扩增,提升训练效率,模型的泛化能力及测试集的准确率。

这种图增强的方法分为两种类型:

  • 图特征增强;
  • 图结构增强。

需要图增强的原因有如下几点:

  • 输入图的节点可能比较缺乏特征;
  • 图结构可能过于稀疏,从而没有足够的信息传递;
  • 图结构可能过于稠密,进而导致信息传递出现冗余;
  • 图可能过大,使得一整个图结构没办法直接放入GPU中进行训练。

针对上面几点,分别针对性地给出相应的方法。


① 缺乏特征

总体而言,针对这种情况,直接使用特征增强(feature augmentation)。但具体而言,需要使用特征增强的情况又分为两类:a. 完全没有节点特征信息b. 一些图的结构难以直接被GNN学习

a. 针对完全没有节点特征信息的情形(只有一个邻接矩阵的信息),可以用一个常数值作为每个节点的特征;或者使用每个节点的一个独立编码作为节点对应的特征,而后再转为 One-hot 编码。两种方法的示意图如下:

两种方法的优缺点分别如下:

b. 有些结构难以被GNN学习,例如下图所示的循环结构:

在GNN的消息传递机制中,这种循环结构会变成这种无穷长度的图形式,

这样就会使得GNN的训练失效。在实际的训练中,高效的训练图形式是下述这种二分树的形式:

因此,针对上面这种环的情况,是需要为节点加入特征,环中每个节点的特征为每个环的节点个数,并转化为计数编码(编码从0个节点开始)

除此之外,还有下述这些常见的节点嵌入的方法(前面都介绍过的方法)可以作为节点特征:

  • 节点的度
  • 聚类系数
  • PageRank值
  • 中心性

② 针对稀疏图结构的增强

对于稀疏图结构的增强,通常针对原始结构增加虚拟边或者虚拟节点

  • 添加虚拟边

最常见的一个做法是将原本节点的二阶邻居(2-hop neighbors)也作为节点的邻居。换言之,就是使用 A + A 2 A + A^2 A+A2 来替代原本的邻接矩阵 A A A

我们可以通过下面这个二部图(bipartite graph)来举例:

这是一个作者与论文连接的二部图,如果我们用上面所述的,考虑原本作者节点的二阶邻居也作为作者的邻居,那么就是额外考虑作者与作者之间的协作图。

  • 添加虚拟节点

这种方法其实是有点像 PageRank 中,以一定概率跳到其他任意一个节点的感觉。具体而言,就是添加一个新的节点,使得这个节点与所有的边都有连接。

那么假如在一个非常稀疏的图中,有两个节点 A , B A, B A,B之间的最短路径为10。那么在添加了虚拟节点后,所有节点之间都存在一条距离为2的路径。同样, A , B A, B A,B之间的最短路径此时为2:

A − 虚拟节点 − B A- \text{虚拟节点} - B A虚拟节点B

这种方法能有效提升信息在GNN中的传递效率。


③ 针对稠密图结构的增强(Augmentation)

实际上对稠密的图结构的 augment 已经不能直译为“增强”,这里其实有一丝减弱的意味。具体而言,就是对每次的信息传递过程,进行随机采样的操作。这样不仅能增加图的丰富性,同时还能降低计算复杂度,通常都能提升实际的表现。

一个传统的图网络如下:

经过采样之后的图网络可以变为如下的这些形式:

更多推荐