趋近智
在为传统机器学习模型(如图像分类器)切分数据时,过程非常直接。你只需随机打乱数据集,并将其分为训练集、验证集和测试集。之所以这样做,是因为每个数据点(在此例中为图像)都被假定为独立同分布(i.i.d.)的。一张图像并不会影响另一张。
在图数据中,这一假设完全失效。节点的定义不仅取决于其特征,还取决于它们与其他节点的连接。GNN 的本质正是利用这些连接。如果你随机将节点分配到不同的集合,可能会导致模型直接或间接地在测试集信息上进行训练,这一问题被称为数据泄漏。例如,测试节点的特征可能会利用相邻训练节点的信息进行更新。这会使评估结果不可靠,并得到过于乐观的性能衡量标准。
为了处理这种依赖性,我们使用两种不同的设置来切分图数据:直推式(Transductive)和归纳式(Inductive)。
在直推式设置中,我们在训练期间可以访问 整个 图。这意味着从一开始,所有节点和所有边对模型都是可见的。但是,我们只能访问部分节点的标签,这些节点构成了我们的训练集。目标是推断出同一图中剩余节点的标签。
可以将其想象为在已有的地图上填空。你可以看到所有的城市和道路,但只有部分城市标明了人口。你的任务是预测那些未标明人口的城市的人口数。
在训练期间,GNN 可以在整个图结构中传递消息。然而,在计算损失时,我们只考虑模型对训练集节点的预测。验证集和测试集由同一图中的其他节点组成,我们使用它们来评估模型对未见邻居的泛化能力。
工作原理:
train_mask 表示哪些节点用于损失计算和反向传播。val_mask 和 test_mask 则表示哪些节点用于评估。单个图上的直推式切分。模型可以看到所有节点和边。它在有标签的节点(绿色)上进行训练,并通过对同一图中其他节点的预测(黄色为验证,红色为测试)进行评估。
许多经典的节点分类基准测试(如 Cora 引用网络)都使用这种设置进行评估。任务是在给定完整引用网络(边)的情况下对学术论文(节点)进行分类。
在归纳式设置中,模型在一组节点或图上进行训练,然后需要在全新的、完全未见的节点或图上进行预测。这与标准的机器学习工作流更为接近,对于大多数新数据不断产生的生产应用来说也是必需的。
想象一下训练一个检测欺诈交易的模型。你会在过去几周的交易图上进行训练。目标是部署此模型来检测 下周 交易图中的欺诈行为,其中将包含新的客户和新的交互。模型不能假定它已经见过需要进行预测的节点。
为了实现这一点,训练集、验证集和测试集必须严格分离。如果你是切分一个大型单图,这意味着验证和测试节点及其所有连接边必须从训练期间模型所见的图中完全移除。
工作原理:
归纳式切分。模型在一组图(左侧)上训练,并在一个新的、未见的图(右侧)上进行评估。测试图的结构和节点在训练期间是不可用的。
像 GraphSAGE 这样使用邻域采样的架构特别适合归纳学习,因为它们被明确设计用于为任何节点生成嵌入,无论该节点在训练期间是否出现过。
| 维度 | 直推式学习 | 归纳式学习 |
|---|---|---|
| 图访问权限 | 模型在训练期间能看到整个图结构。 | 模型只能看到训练图。 |
| 任务目标 | 推断固定图中未标记节点的标签。 | 泛化到对全新的图或节点进行预测。 |
| 评估数据 | 来自用于训练的 同一个 图中的未标记节点。 | 训练期间未见过的全新节点或图。 |
| 常见用例 | 单个网络上的半监督节点分类。 | 欺诈检测、分子性质预测、产品推荐。 |
| 示例模型 | GCN(原始定义) | GraphSAGE, GAT(两者均可使用) |
选择直推式还是归纳式设置完全取决于你的问题。
在实现训练流水线时,请务必留意这一区别。使用节点掩码进行切分是直推式设置的标志。为你的训练、验证和测试集创建真正独立的图对象,则是归纳式设置所必需的。误判设置会导致数据泄漏,并导致模型在实际部署时表现糟糕。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造