GNN Augmentation and Training

image.png
image.png

Graph Augmentation for GNNs

General GNN Framework

J. You, R. Ying, J. Leskovec. Design Space of Graph Neural Networks, NeurIPS 2020
image.png

Prediction with GNNs

GNN Training Pipeline

image.png
不同的预测头:

  • node-level任务
  • edge-level任务
  • graph-level任务

    GNN Prediction Heads

    想法:不同的任务级别需要不同的预测头。
    image.png

    Prediction Heads: Node-level

    直接使用节点嵌入进行预测。
    在GNN计算后,我们有08 Applications of Graph Neural Networks - 图6维节点嵌入:08 Applications of Graph Neural Networks - 图7。假设我们要进行k-way预测,

  • 分类:k分类;

  • 回归:k目标回归。

08 Applications of Graph Neural Networks - 图8
08 Applications of Graph Neural Networks - 图9:我们将节点嵌入从08 Applications of Graph Neural Networks - 图10映射到08 Applications of Graph Neural Networks - 图11,因此我们可以计算损失。

Prediction Heads: Edge-level

使用“节点嵌入对”进行预测。
假设我们有k-way的预测,
08 Applications of Graph Neural Networks - 图12
image.png
08 Applications of Graph Neural Networks - 图14有哪些选择?
(1)Concatenation + Linear
image.png
08 Applications of Graph Neural Networks - 图16
08 Applications of Graph Neural Networks - 图17将从2维嵌入(因为我们拼接了嵌入)映射到k维嵌入(k-way预测)。
(2)点积
08 Applications of Graph Neural Networks - 图18
这一方法只适应于1维预测,如链接预测。
应用到k-way预测:
与多头注意相似,08 Applications of Graph Neural Networks - 图19是可训练的,
08 Applications of Graph Neural Networks - 图20
08 Applications of Graph Neural Networks - 图21
08 Applications of Graph Neural Networks - 图22

Prediction Heads: Graph-level

使用图中的所有节点嵌入进行预测。
假设我们有k-way预测,
08 Applications of Graph Neural Networks - 图23
在GNN层中,08 Applications of Graph Neural Networks - 图2408 Applications of Graph Neural Networks - 图25相似。
08 Applications of Graph Neural Networks - 图26的选择:
(1)全局均值池化:08 Applications of Graph Neural Networks - 图27
(2)全局最大池化:08 Applications of Graph Neural Networks - 图28
(3)全局求和池化:08 Applications of Graph Neural Networks - 图29
这些选择对于较小的图非常有效,对于大图我们能做得更好吗?
全局池化的问题在一个(大)图上的全局池将丢失信息
toy example:使用1维节点嵌入,

  • 08 Applications of Graph Neural Networks - 图30的节点嵌入:08 Applications of Graph Neural Networks - 图31
  • 08 Applications of Graph Neural Networks - 图32的节点嵌入:08 Applications of Graph Neural Networks - 图33

显然08 Applications of Graph Neural Networks - 图3408 Applications of Graph Neural Networks - 图35有非常不同的节点嵌入,它们的结构应该不同。
如果我们做全局加和池化:

  • 08 Applications of Graph Neural Networks - 图36的节点嵌入:08 Applications of Graph Neural Networks - 图37
  • 08 Applications of Graph Neural Networks - 图38的节点嵌入:08 Applications of Graph Neural Networks - 图39
  • 我们无法区分08 Applications of Graph Neural Networks - 图4008 Applications of Graph Neural Networks - 图41

分层全局池化:
解决方法:分层次地聚合所有节点嵌入。
toy example:通过08 Applications of Graph Neural Networks - 图42聚合。我们首先分别对前2个节点和后3个节点进行聚合,然后我们再次聚合做出最终的预测。

  • 08 Applications of Graph Neural Networks - 图43的节点嵌入:08 Applications of Graph Neural Networks - 图44
    • Round1:08 Applications of Graph Neural Networks - 图45
    • Round2:08 Applications of Graph Neural Networks - 图46
  • 08 Applications of Graph Neural Networks - 图47的节点嵌入:08 Applications of Graph Neural Networks - 图48
    • Round1:08 Applications of Graph Neural Networks - 图49
    • Round2:08 Applications of Graph Neural Networks - 图50
  • 如此便可区分08 Applications of Graph Neural Networks - 图5108 Applications of Graph Neural Networks - 图52

实际应用中的分层全局池化:
Ying et al. Hierarchical Graph Representation Learning with Differentiable Pooling, NeurIPS 2018
DiffPool idea:分层池化节点嵌入
image.png

  • 在每个级别上利用2个独立的GNNs:
    • GNN A:计算节点嵌入
    • GNN B:计算节点所属的集群
  • 每个级别上的GNNs A和B可以并行执行
  • 对于每个池化层:
    • 使用GNN B的聚类分配来聚合由GNN A生成的节点嵌入
    • 为每个集群创建一个新节点,保持集群之间的边以生成新的池化网络
  • 联合训练GNN A和GNN B

    Training Graph Neural Networks

    image.png
    GNN Training Pipeline2 Prediction、Labels,ground-truth来自哪里?

  • 有监督标签

  • 无监督信号

GNN Training Pipeline3 Loss function,如何计算最终的loss?

  • 分类loss
  • 回归loss

GNN Training Pipeline4 Evaluation metrics,如何衡量GNN的好坏?

  • Accuracy
  • ROC AUC

    预测、标签

    有监督 VS 无监督:
    图的有监督学习:标签来自外部资源,如预测药物分子图的相似性。
    图的无监督学习:信号来自图本身,如链接预测。
    有时差异是模糊的,在无监督学习中,我们仍然有“监督”,如训练GNN预测节点聚类系数。
    “无监督”的另一个名称是“自我监督”。
    图的有监督标签:
    有监督标签来自于特定的案例,如:

  • 节点标签08 Applications of Graph Neural Networks - 图55:在引文网络中,一个节点属于哪个学科领域;

  • 边标签08 Applications of Graph Neural Networks - 图56:在交易网络中,是否有一条边是欺诈的;
  • 图标签08 Applications of Graph Neural Networks - 图57:在分子图中,图的药物相似性。

建议:将任务简化为节点/边/图标签,因为它们很容易使用。例如,我们知道一些节点可以形成一个集群,可以将节点所属的集群视为节点标签。
图的无监督信号:
问题:有时我们只有一个图,没有任何外部标签。
解决方案:“自我监督学习”,我们可以在图中找到监督信号。
例如,我们可以让GNN预测如下:

  • 节点标签08 Applications of Graph Neural Networks - 图58:节点统计,如聚类系数,PageRank,…;
  • 边标签08 Applications of Graph Neural Networks - 图59:链接预测,隐藏两个节点之间的边,预测是否应该有链接;
  • 图标签08 Applications of Graph Neural Networks - 图60:图统计,如预测两个图是否同构。

这些任务不需要任何外部标签。

损失计算

设有08 Applications of Graph Neural Networks - 图61的数据点,每个数据点可以是一个节点/边/图,

  • 节点level:预测08 Applications of Graph Neural Networks - 图62,标签08 Applications of Graph Neural Networks - 图63
  • 边level:预测08 Applications of Graph Neural Networks - 图64,标签08 Applications of Graph Neural Networks - 图65
  • 图levl:预测08 Applications of Graph Neural Networks - 图66,标签08 Applications of Graph Neural Networks - 图67

使用预测08 Applications of Graph Neural Networks - 图68,标签08 Applications of Graph Neural Networks - 图69以表示所有level的预测。
分类:具有离散值的标签08 Applications of Graph Neural Networks - 图70,如节点分类;
回归:具有连续值的标签08 Applications of Graph Neural Networks - 图71,如预测分子图的药物相似性;
GNN可以应用于这两种设置,区别在于损失函数评估指标

分类损失

正如在lecture6中讨论的,交叉熵(CE)是一个常见的分类损失函数:
image.png

回归损失

对于回归任务,我们经常使用均方误差(MSE),也就是L2损失。
image.png

评估指标

回归

使用GNN的标准评价指标,假设有08 Applications of Graph Neural Networks - 图74个数据点,
image.png

分类

评估图上的分类任务:
多分类任务,08 Applications of Graph Neural Networks - 图76
二分类任务:Accuracy、Precision/Recall
image.png
ROC曲线:当二分类器的分类阈值变化时,捕获TPR和FPR的权衡。
image.png
分类器将随机选择的正实例排名高于随机选择的负实例的概率。

Setting-up GNN Prediction Tasks

image.png
如何将我们的数据集分割成训练集/验证集/测试集?
固定分割:我们将分割我们的数据集一次。
训练集:用于优化GNN参数
验证集:开发模型/超参数
测试集:用于报告最终性能
需要注意的是:有时我们不能保证测试集真的能够被使用。
随机分割:我们将随机分割我们的数据集为训练/验证/测试,报告不同随机种子的平均性能。
为什么分裂图是特殊的?
假设我们想要分割一个图像数据集,图像分类的每个数据点都是一幅图像。如下图所示,这里的数据点是独立的,图像5不会影响我们对图像1的预测。
image.png
分割图形数据集是不同的,节点分类的每个数据点是一个节点。如下图所示,这里的数据点不是独立的,节点5将影响我们对节点1的预测,因为它将参与消息传递,从而影响节点1的嵌入。
image.png
我们该如何解决?
Solution1(直推设置,transductive setting):输入图可以在所有数据集分割(训练集、验证集和测试集)中观察到,只拆分(节点)标签。在训练时,使用整个图计算嵌入,并使用节点1和节点2的标签进行训练。在验证时,我们使用整个图计算嵌入,并在节点3和4的标签上评估。
Solution2(归纳设置,inductive setting):在分割之间打破边以得到多个图。现在我们有三个独立的图,节点5将不再影响我们对节点1的预测。在训练时,我们使用节点1和2上的图计算嵌入,并使用节点1和2的标签进行训练。在验证时,我们使用节点3和4上的图计算嵌入,并在节点3和4的标签上评估。
image.png
直推设置:训练/验证/测试集都是相同的图。

  • 数据集由一个图组成
  • 整个图可以在所有数据集分割中观察到,只分割标签
  • 仅适用于节点/边缘预测任务

归纳设置:训练/验证/测试集在不同的图上。

  • 数据集由多个图组成
  • 每个分割只能观察分割内的图形,一个成功的模型应该概括为不可见的图
  • 适用于节点/边/图任务

例子:节点分类
transductive节点分类:所有的拆分都可以观察整个图结构,但只能观察各自节点的标签。
image.png
inductive节点分类:假设我们有3个图的数据集,每个分割都有一个独立的图。
image.png
例子:图分类
对于图分类,只有归纳设置是明确定义的。因为我们需要在未知图上测试,假设我们有5个图的数据集,每个分割都有独立的图。
image.png
例子:链接预测
目标:预测缺失的边。
建立链接预测是很棘手的,链接预测是一个无监督/半监督任务。我们需要自己创建标签和分割数据集。具体来说,我们需要在GNN中隐藏一些边,让GNN预测边是否存在。
image.pngimage.png
对于链接预测,我们将把边分割两次:

  • step1:在原始图中分配两种类型的边
    • 消息边:用于GNN消息传递
    • 监督边:用于计算目标
    • step1之后,仅有消息边会保留在图中
    • step1之后,监督边被用来监督模型所做的边预测,不会被输入GNN
  • step2:将边分为训练/验证/测试集

    • Option1,inductive链接预测分割
      • 假设我们有3个图的数据集,每个inductive分割都会保留一个独立图
      • 在训练/验证/测试集中,每个图都会有2种类型的边,即消息边和有监督边。有监督边不会放入GNN中
      • image.png
    • Option2,transductive链接预测分割
      • 这是人们谈论链接预测时的默认设置
      • 假设我们有一个图的数据集
      • 根据“transductive”的定义,可以在所有数据集分割中观察到整个图
      • 但由于边既是图结构的一部分,又是监督的一部分,因此我们需要对边进行验证/测试
      • 为了训练训练集,我们还需要保留训练集的监督边
      • image.png
      • (1)训练时:使用训练消息边来预测训练监督边
      • (2)验证时:使用训练消息边&训练监督边来预测验证边
      • (3)测试时:使用训练消息边&训练监督边&验证边来预测测试边
      • 为什么我们要使用越来越多的边?经过训练,GNN已知监督边,因此理想的模型应该在验证时在消息传递中使用监督边,测试时也是如此。
      • Summary:image.png
      • 注:链接预测设置是棘手和复杂的。我们可能会发现论文做链接预测的方式不同,但如果按照我们的推理步骤,这应该是实现链接预测的正确方法。
      • DeepSNAPGraphGym中已支持。

        Summary

        本节介绍了一般角度的GNNs:
  • GNN层:

    • Transformation + Aggregation
    • 经典GNN层:GCN、GraphSAGE、GAT
  • 层连接:
    • 过拟合问题
    • 解决方法:跳过连接
  • 图增强:
    • 特征增强
    • 结构增强
  • 学习目标:
    • GNN的完整训练管道