GNN Augmentation and Training
Graph Augmentation for GNNs
General GNN Framework
J. You, R. Ying, J. Leskovec. Design Space of Graph Neural Networks, NeurIPS 2020
Prediction with GNNs
GNN Training Pipeline
不同的预测头:
- node-level任务
- edge-level任务
-
GNN Prediction Heads
Prediction Heads: Node-level
直接使用节点嵌入进行预测。
在GNN计算后,我们有维节点嵌入:
。假设我们要进行k-way预测,
分类:k分类;
- 回归:k目标回归。
Prediction Heads: Edge-level
使用“节点嵌入对”进行预测。
假设我们有k-way的预测,有哪些选择?
(1)Concatenation + Linear将从2维嵌入(因为我们拼接了嵌入)映射到k维嵌入(k-way预测)。
(2)点积
这一方法只适应于1维预测,如链接预测。
应用到k-way预测:
与多头注意相似,是可训练的,
Prediction Heads: Graph-level
使用图中的所有节点嵌入进行预测。
假设我们有k-way预测,
在GNN层中,与
相似。
的选择:
(1)全局均值池化:
(2)全局最大池化:
(3)全局求和池化:
这些选择对于较小的图非常有效,对于大图我们能做得更好吗?
全局池化的问题:在一个(大)图上的全局池将丢失信息。
toy example:使用1维节点嵌入,
的节点嵌入:
的节点嵌入:
显然和
有非常不同的节点嵌入,它们的结构应该不同。
如果我们做全局加和池化:
的节点嵌入:
的节点嵌入:
- 我们无法区分
和
分层全局池化:
解决方法:分层次地聚合所有节点嵌入。
toy example:通过聚合。我们首先分别对前2个节点和后3个节点进行聚合,然后我们再次聚合做出最终的预测。
的节点嵌入:
- Round1:
- Round2:
- Round1:
的节点嵌入:
- Round1:
- Round2:
- Round1:
- 如此便可区分
和
实际应用中的分层全局池化:
Ying et al. Hierarchical Graph Representation Learning with Differentiable Pooling, NeurIPS 2018
DiffPool idea:分层池化节点嵌入
- 在每个级别上利用2个独立的GNNs:
- GNN A:计算节点嵌入
- GNN B:计算节点所属的集群
- 每个级别上的GNNs A和B可以并行执行
- 对于每个池化层:
- 使用GNN B的聚类分配来聚合由GNN A生成的节点嵌入
- 为每个集群创建一个新节点,保持集群之间的边以生成新的池化网络
-
Training Graph Neural Networks
GNN Training Pipeline2 Prediction、Labels,ground-truth来自哪里? 有监督标签
- 无监督信号
GNN Training Pipeline3 Loss function,如何计算最终的loss?
- 分类loss
- 回归loss
GNN Training Pipeline4 Evaluation metrics,如何衡量GNN的好坏?
- Accuracy
-
预测、标签
有监督 VS 无监督:
图的有监督学习:标签来自外部资源,如预测药物分子图的相似性。
图的无监督学习:信号来自图本身,如链接预测。
有时差异是模糊的,在无监督学习中,我们仍然有“监督”,如训练GNN预测节点聚类系数。
“无监督”的另一个名称是“自我监督”。
图的有监督标签:
有监督标签来自于特定的案例,如: 节点标签
:在引文网络中,一个节点属于哪个学科领域;
- 边标签
:在交易网络中,是否有一条边是欺诈的;
- 图标签
:在分子图中,图的药物相似性。
建议:将任务简化为节点/边/图标签,因为它们很容易使用。例如,我们知道一些节点可以形成一个集群,可以将节点所属的集群视为节点标签。
图的无监督信号:
问题:有时我们只有一个图,没有任何外部标签。
解决方案:“自我监督学习”,我们可以在图中找到监督信号。
例如,我们可以让GNN预测如下:
- 节点标签
:节点统计,如聚类系数,PageRank,…;
- 边标签
:链接预测,隐藏两个节点之间的边,预测是否应该有链接;
- 图标签
:图统计,如预测两个图是否同构。
损失计算
设有的数据点,每个数据点可以是一个节点/边/图,
- 节点level:预测
,标签
;
- 边level:预测
,标签
;
- 图levl:预测
,标签
。
使用预测,标签
以表示所有level的预测。
分类:具有离散值的标签,如节点分类;
回归:具有连续值的标签,如预测分子图的药物相似性;
GNN可以应用于这两种设置,区别在于损失函数与评估指标。
分类损失
正如在lecture6中讨论的,交叉熵(CE)是一个常见的分类损失函数:
回归损失
对于回归任务,我们经常使用均方误差(MSE),也就是L2损失。
评估指标
回归
分类
评估图上的分类任务:
多分类任务,
二分类任务:Accuracy、Precision/Recall
ROC曲线:当二分类器的分类阈值变化时,捕获TPR和FPR的权衡。
分类器将随机选择的正实例排名高于随机选择的负实例的概率。
Setting-up GNN Prediction Tasks
如何将我们的数据集分割成训练集/验证集/测试集?
固定分割:我们将分割我们的数据集一次。
训练集:用于优化GNN参数
验证集:开发模型/超参数
测试集:用于报告最终性能
需要注意的是:有时我们不能保证测试集真的能够被使用。
随机分割:我们将随机分割我们的数据集为训练/验证/测试,报告不同随机种子的平均性能。
为什么分裂图是特殊的?
假设我们想要分割一个图像数据集,图像分类的每个数据点都是一幅图像。如下图所示,这里的数据点是独立的,图像5不会影响我们对图像1的预测。
分割图形数据集是不同的,节点分类的每个数据点是一个节点。如下图所示,这里的数据点不是独立的,节点5将影响我们对节点1的预测,因为它将参与消息传递,从而影响节点1的嵌入。
我们该如何解决?
Solution1(直推设置,transductive setting):输入图可以在所有数据集分割(训练集、验证集和测试集)中观察到,只拆分(节点)标签。在训练时,使用整个图计算嵌入,并使用节点1和节点2的标签进行训练。在验证时,我们使用整个图计算嵌入,并在节点3和4的标签上评估。
Solution2(归纳设置,inductive setting):在分割之间打破边以得到多个图。现在我们有三个独立的图,节点5将不再影响我们对节点1的预测。在训练时,我们使用节点1和2上的图计算嵌入,并使用节点1和2的标签进行训练。在验证时,我们使用节点3和4上的图计算嵌入,并在节点3和4的标签上评估。
直推设置:训练/验证/测试集都是相同的图。
- 数据集由一个图组成
- 整个图可以在所有数据集分割中观察到,只分割标签
- 仅适用于节点/边缘预测任务
归纳设置:训练/验证/测试集在不同的图上。
- 数据集由多个图组成
- 每个分割只能观察分割内的图形,一个成功的模型应该概括为不可见的图
- 适用于节点/边/图任务
例子:节点分类
transductive节点分类:所有的拆分都可以观察整个图结构,但只能观察各自节点的标签。
inductive节点分类:假设我们有3个图的数据集,每个分割都有一个独立的图。
例子:图分类
对于图分类,只有归纳设置是明确定义的。因为我们需要在未知图上测试,假设我们有5个图的数据集,每个分割都有独立的图。
例子:链接预测
目标:预测缺失的边。
建立链接预测是很棘手的,链接预测是一个无监督/半监督任务。我们需要自己创建标签和分割数据集。具体来说,我们需要在GNN中隐藏一些边,让GNN预测边是否存在。
对于链接预测,我们将把边分割两次:
- step1:在原始图中分配两种类型的边
- 消息边:用于GNN消息传递
- 监督边:用于计算目标
- step1之后,仅有消息边会保留在图中
- step1之后,监督边被用来监督模型所做的边预测,不会被输入GNN
step2:将边分为训练/验证/测试集
- Option1,inductive链接预测分割
- 假设我们有3个图的数据集,每个inductive分割都会保留一个独立图
- 在训练/验证/测试集中,每个图都会有2种类型的边,即消息边和有监督边。有监督边不会放入GNN中
- Option2,transductive链接预测分割
- 这是人们谈论链接预测时的默认设置
- 假设我们有一个图的数据集
- 根据“transductive”的定义,可以在所有数据集分割中观察到整个图
- 但由于边既是图结构的一部分,又是监督的一部分,因此我们需要对边进行验证/测试
- 为了训练训练集,我们还需要保留训练集的监督边
- (1)训练时:使用训练消息边来预测训练监督边
- (2)验证时:使用训练消息边&训练监督边来预测验证边
- (3)测试时:使用训练消息边&训练监督边&验证边来预测测试边
- 为什么我们要使用越来越多的边?经过训练,GNN已知监督边,因此理想的模型应该在验证时在消息传递中使用监督边,测试时也是如此。
- Summary:
- 注:链接预测设置是棘手和复杂的。我们可能会发现论文做链接预测的方式不同,但如果按照我们的推理步骤,这应该是实现链接预测的正确方法。
- DeepSNAP和GraphGym中已支持。
Summary
本节介绍了一般角度的GNNs:
- Option1,inductive链接预测分割
GNN层:
- Transformation + Aggregation
- 经典GNN层:GCN、GraphSAGE、GAT
- 层连接:
- 过拟合问题
- 解决方法:跳过连接
- 图增强:
- 特征增强
- 结构增强
- 学习目标:
- GNN的完整训练管道