图上的监督学习需要大量标注数据,在社交网络、生物网络或知识图等多种情形下,获取这些数据通常成本高昂或不切实际。自监督学习(SSL)提供了一种有效的替代方案,它直接从无标注的图结构和特征中学习有意义的节点或图表示。其核心思想是设计“代理”任务,这些任务可以借助图数据本身来解决,使得图神经网络(GNN)编码器能够捕获主要的结构和语义信息,而无需依赖外部标签。这些学习到的表示随后可以通过微调或直接作为特征使用,有效地迁移到各种下游任务中。图上自监督学习的原理图数据拥有丰富的内在结构和特征,可以用于自监督学习。与图像或文本(其中旋转或裁剪等增强操作有标准解释)不同,为图定义有意义的增强操作和代理任务需要认真考虑其独特的性质。目标是从图本身生成监督信号,以训练GNN编码器。图上常见的自监督学习方法图上自监督学习主要分为两大类:对比方法和预测方法。对比学习对比学习旨在通过最大化同一图实体(节点、子图或整个图)不同增强“视图”之间的一致性,同时最小化与不同实体“视图”(即“负样本”)之间的一致性,来学习表示。数据增强: 创建图的不同视图是根本。常见的图增强技术包含:节点丢弃: 随机移除一部分节点。边扰动: 随机添加或移除边。属性掩蔽: 随机掩盖一部分节点特征。子图采样: 提取以特定节点为中心的子图。 增强方式的选择对学习到的表示有明显影响,通常需要进行领域特定的调整。对比目标: 图神经网络编码器$f_\theta$将增强的图视图映射到嵌入。一种常用的目标是InfoNCE(噪声对比估计),它促使正样本对(同一实体的不同视图,$z_i, z_j$)之间的相似性(例如余弦相似性)较高,而负样本对(不同实体的视图,$z_i, z_k$)之间的相似性较低。通常,在计算对比损失之前,会将一个非线性投影头$g_\phi$应用于嵌入($h = g_\phi(z)$): $$ \mathcal{L}{i} = -\log \frac{\exp(\text{sim}(h_i, h_j)/\tau)}{\exp(\text{sim}(h_i, h_j)/\tau) + \sum{k \neq i} \exp(\text{sim}(h_i, h_k)/\tau)} $$ 这里,$\tau$是一个用于缩放相似性的温度超参数。方法:GraphCL: 在图级别应用各种增强操作(节点丢弃、边扰动等),用于图分类预训练。GRACE(使用自适应损坏和估计进行图表示学习): 专注于节点级别的对比学习,通过增强生成两个视图,并对比视图内部和视图间的节点表示。InfoGraph: 将图级别的表示与从同一图导出的块级别(节点)表示进行对比,以最大化互信息。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="helvetica", fontsize=10, margin=0.2]; edge [arrowhead=vee, arrowsize=0.7, fontname="helvetica", fontsize=9]; subgraph cluster_input { label = "输入图/节点"; style=dashed; color="#adb5bd"; G_orig [label="图 G\n(或节点 v)", shape=circle, style=filled, fillcolor="#e9ecef"]; } subgraph cluster_aug1 { label = "增强操作 1"; style=dashed; color="#adb5bd"; G_aug1 [label="增强后的 G'\n(或 v')", shape=circle, style=filled, fillcolor="#d0bfff"]; } subgraph cluster_aug2 { label = "增强操作 2"; style=dashed; color="#adb5bd"; G_aug2 [label="增强后的 G''\n(或 v'')", shape=circle, style=filled, fillcolor="#a5d8ff"]; } subgraph cluster_neg { label = "负样本"; style=dashed; color="#adb5bd"; G_neg [label="其他图/节点\n(G_k / v_k)", shape=circle, style=filled, fillcolor="#ffc9c9"]; } subgraph cluster_encoder { label = "GNN 编码器 + 投影头"; style=dashed; color="#adb5bd"; Encoder1 [label="GNN(.) + Proj(.)"]; Encoder2 [label="GNN(.) + Proj(.)"]; Encoder_neg [label="GNN(.) + Proj(.)"]; } subgraph cluster_loss { label = "对比损失"; style=dashed; color="#adb5bd"; Loss [label="InfoNCE Loss", shape=invtriangle, style=filled, fillcolor="#ffd8a8"]; } G_orig -> G_aug1 [label="增强 1"]; G_orig -> G_aug2 [label="增强 2"]; G_aug1 -> Encoder1; G_aug2 -> Encoder2; G_neg -> Encoder_neg; Encoder1 -> Loss [label="h_i (正样本)"]; Encoder2 -> Loss [label="h_j (正样本)"]; Encoder_neg -> Loss [label="h_k (负样本)"]; {rank=same; Encoder1; Encoder2; Encoder_neg;} }图上对比自监督学习的流程。生成锚定图/节点的两个增强视图,并通过一个共享的GNN编码器和投影头。由此产生的表示在对比损失的引导下,使得正样本的表示相互靠近,同时远离负样本的表示。预测学习预测方法基于预测图或其组件的某些属性来定义代理任务。属性掩蔽: 类似于自然语言处理(NLP)中的BERT,这种方法涉及掩蔽部分节点特征,并训练GNN根据节点的邻域上下文和剩余特征来预测被掩蔽的值。这使得GNN能够学习局部结构和特征依赖关系。上下文预测: 这涉及基于局部上下文预测关系或属性。例如,预测两个节点之间的距离,或者两个节点是否属于同一采样子图。结构预测: 代理任务可以涉及预测图的结构属性,如节点度、聚类系数,甚至预测边的存在(将链接预测用作代理任务)。这些方法通常使用标准损失函数,如交叉熵用于基于分类的预测任务,或均方误差用于基于回归的任务。预训练GNN的应用一旦GNN编码器通过自监督学习完成预训练,它就可以适应下游任务:微调: 整个预训练的GNN(或其部分)在一个较小的标注数据集上,使用特定任务的头部(例如分类层)进行端到端微调。特征提取: 预训练的GNN被用作固定的特征提取器。生成的节点或图嵌入被输入到一个单独的下游模型中(例如支持向量机、多层感知器)。优点与考量为GNN使用自监督学习有若干益处:减少对标签的依赖: 使得从大量现成的无标注图数据中进行学习成为可能。提高泛化能力: 通过自监督学习获得的表示通常能捕捉到更基本的图属性,与纯监督训练相比,这可能带来下游任务上更好的泛化能力,尤其是在标签有限的情况下。初始化: 为后续的监督微调提供良好的权重初始化。然而,设计有效的自监督学习方法需要认真思考:增强设计: 图增强操作必须保留相关的结构或语义信息,同时生成足够多样的视图。不佳的增强会损害性能。代理任务选择: 所选的代理任务应与目标下游任务所需的属性保持一致。负样本采样: 在对比方法中,选择有信息量的负样本对于高效学习非常重要。简单的随机采样可能效率不高。计算成本: 在大型图上进行预训练可能计算量很大。自监督学习是图机器学习中一个快速发展的方面,在标注数据稀缺时为表示学习提供了有力的工具。凭借图的固有结构和特征,自监督学习使得能够训练出多功能的GNN模型,这些模型适用于本章中讨论的各种复杂图分析任务。