CS224W 图机器学习10:子图的匹配和计数

1 神经网络子图

子图(subgraphs)是构建图的基础块,能够描述和区分图网络

给定图 G=(V,E),可以给出 2 种方式定义子图 G=(V,E)

子图的定义方式 1:节点诱导子图(Node-induced subgraph)

  • 从图 G 的节点集合中筛选子集来构建子图,VV
  • 然后从图 G 的边集合中筛选子图所有节点的对应边,E=(u,v)E|u,vV
  • 此时子图 G 被称为由节点集合 V 从图 G 中诱导出的子图

子图的定义方式 2:边诱导子图(Node-induced subgraph)

  • 从图 G 的边集合中筛选子集来构建子图,EE
  • 然后根据子图的边找到可能节点,V=vV|(v,u)E for some u
  • 此时子图 G 被称为由边集合 E 从图 G 中诱导出的子图

两种定义方式的区别:

  • 不同领域的最佳子图定义不同。比如对于化学领域,使用“节点诱导子图”定义子图能更好地描述"官能团";而知识图谱则更重视边关系中对于逻辑关系的表达,因此常常使用“边诱导子图”定义子图
  • 一般来说,“节点诱导子图”由于计算成本较低,所以更常用一些;而“边诱导子图”的时间复杂度较大,但是对异常值更为鲁棒,相对不常使用

方便起见,后面将简称“节点诱导子图”为“诱导子图”,“边诱导子图”为“子图”

扩展阅读:图的同构与子图同构

2 子图模式 Motifs

Motifs:出现频率高的、比较重要的部分子图

Motifs 的作用:辅助理解图的运作方式,帮助图数据的预测

Motifs 的概念可以扩展到其他图中(比如无向图/有向图,动态图/静态图等)

Motifs 的示例:

  • 生物神经网络中常存在"前馈环(Feedforward Loop)"用于消除生物噪音或处理复杂信号
  • 食物链网络中常存在“平行环(Parallel Pathways)”来增加系统的冗余度,避免单一链路失效而导致整个系统的异常,从而提高了系统的稳健性
  • 基因调控网络常存在“单输入模块(Single Input Module)”,确保多个基因在适当的时间和条件下被同时激活或抑制,确保系统可以对环境变化做出一致的响应

后续问题的关键在于如何定义子图的频率和重要性?

假设 GQ 是一个小图,GT 是一个目标图数据集

GQ 的图级子图频率定义:GT 中与 GQ 同构的子图数量

GQ 的节点级子图频率定义:

  • 先在 GQ 中定义一个节点 v 作为锚定节点(Anchor)
  • 然后在 GT 中寻找 GQ 的同构子图,并找到锚定节点 v 的对应节点 u
  • 最终所有同构子图中节点 u 的数量,就是 GQ 的节点级子图频率

以上频率定义可以扩展到非连通图,只需把每个连通分量视为一个独立的图即可

3 子图的重要性度量

子图的重要性度量依赖随机图(null-model),简单来说:若一个子图在真实图出现的次数比在随机图中出现的次数越多,该子图的重要性就越大

  • 上图(图源)展示了一个 motif(该子图描述了三个互不相连的节点) 分别在真实图和随机图中的统计情况,该 motif 中真实图中的出现频次远高于随机图,因此重要性较高

随机图一般有两种定义方式:ER 随机图和 configuration model

  • ER 随机图:先定义 n 个节点,再将任意两个节点间以概率 p 生成边
  • Configuration model:先定义一个度数序列 k1,k2,...,kN,然后对 N 个节点进行随机配对,直到满足对应的度数要求;可能导致重边(multiple edges)和自环的情况

随机选择一对边(比如 A-BC-D), 然后交换端点( A-D, C-B);该方式可以得到更多的与原图的节点度数相同的随机图;注意规避可能的重边和自环的情况

子图的重要性度量步骤:

  1. 给定真实图 Greal,然后进行 motifs 的计数,其中第 i 个 motif 的计数为 Nireal
  2. 产生M个随机图(尽量与真实图具有相同的统计量,比如节点数、边数、度数序列),然后进行 motifs 的计数,其中第 i 个 motif 的计数为 Nirand
  3. 使用统计指标(比如 Z-score>2)衡量每种 motif 是否显著

Z-score 的计算公式: Zi=(Nirealmean(Nirand))/std(Nirand),  SPi=Zi/ΣjZj2

  • Zi 可以描述第 i 个 motif 的重要性;Zi=0 意味着该 motif 在真实图和随机图中出现的频次一样多,不存在显著差异,也说明该 motif 不重要
  • SP 是归一化的 Z-score 向量,其维度取决于 motif 的个数;SP 强调了子图的相对重要性,更适合用于不同尺寸的图网络间对比(一般图规模越大,Z-score 越大)

子图的重要性度量示例:

  • 上图中横坐标表示不同的子图(motif),纵坐标表示不同的 SP
  • 颜色则代表领域不同,可以发现相似领域的图网络的 motif 会具有相似的 SP
  • 通过 motif 的重要性度量也能判断图网络的功能;比如子图 13 在社交网络中经常出现,这是因为你的两个亲密好友很有可能也是互相认识的

4 子图嵌入表示和匹配

子图匹配(subgraph matching)问题:如何判断给定的查询图是否为目标图的子图?

思路:利用嵌入空间捕捉子图同构的属性,然后实现 GNN 预测

前置知识:CS224W 图机器学习04:GNN 深入理解

具体步骤:把子图匹配问题转化为是否存在子图匹配的二元预测问题

  1. 遍历目标图 GT 中节点,假设当前选择的锚定节点为 u
  2. 遍历查询图 GQ 中节点,假设当前选择的锚定节点为 v
  3. 对于每个锚定节点,使用广度优先搜索找到其周围的 k 阶邻
  4. 基于 GNN 在 k 阶邻节点的子图内计算两节点对应的嵌入表示
  5. 根据得到的嵌入表示预测节点 v 的邻居和节点 u 的邻居是否同构

考虑到计算成本,一般设置节点诱导子图的最大深度为 k=35

该方法不仅能用于判断子图匹配问题,还能找到具体的节点映射关系

有序嵌入空间(Order Embedding Space):

  • 将嵌入表示映射到有序嵌入空间(假定向量的所有元素值都是非负的)
  • 当图 A 的各个维度的元素值都小于图 B 时,意味着图 A 是图 B 的子图
  • 反映到上图中,绿圆是红方块的子图,而黄圆则不是红方块的子图

顺序嵌入空间的性质

  1. 传递性(Transitivity):如果 A 是 B 的子图,B 是 C 的子图,那么 A 也是 C 的子图
  2. 反对称性(Anti-symmetry):如果 A 是 B 的子图,并且 B 是 A 的子图,则 A 同构于 B
  3. 交集闭包性(Closure under intersection):只含一个节点的平凡图是任何图的子图

思考:如何确保训练的 GNN 能够保留这种顺序嵌入的结构?

5 顺序嵌入 GNN 的训练

解决思路:在损失函数中添加顺序约束,确保嵌入表示能学习到相关属性

具体方法:

  • 定义最大边界损失(max-margin loss),并通过损失最小化来训练 GNN
  • 其中最大边界损失定义: E(Gq,Gt)=Σi=1D(max(0,zq[i]zt[i]))2
  • E(Gq,Gt)=0,则意味着 GqGt 的子图;当 E(Gq,Gt)>0,则不是

GNN 的训练还需要构建额外的负样本(即 Gq 不是 Gt 子图的情况)

从图数据集 G 中生成查询图 GQ 和目标图 GT

  • 首先从 G 中随机选择锚定节点 v 及其所有的 k 阶邻域节点,构成 GT
  • 对于正样本的合成,每次从锚定节点 v 的所有邻域节点中筛选 10%的节点,重复 k 次后(已筛选到的节点不再纳入抽样过程),得到节点诱导子图构成的 GQ
  • 对于负样本的合成,对正样本 GQ 中的节点/边进行随机的添加或删除

每个训练迭代过程,都会进行样本的合成,避免模型出现过拟合的问题

已训练好的模型在新图上进行推理:

  • 给定查询图和目标图,遍历每个节点并分别作为锚定节点
  • 使用 GNN 计算两个锚定节点的对应嵌入表示,并计算 E(Gq,Gt)
  • E(Gq,Gt)<ϵϵ 是超参数)时,说明查询图是目标图的子图

对于满足顺序约束的嵌入空间,能根据节点的相对位置来判断子图同构的情况

6 SPMiner:频繁子图的挖掘

输入信息:给定目标图 GT 和子图的尺寸参数 k,所需的子图数量 r

目标输出:在 GT 中统计出现频次最高的 r 个尺寸为 k 的子图

初步思路:先迭代所有大小为 k 的子图,再统计每类子图的出现频次

问题:确定特定子图是否在图中存在(子图同构),是一个计算成本很高的事情;而统计频繁子图则是在此基础上的再进行组合运算(指数级);因此该问题是一个 NP-Hard问题

优化思路:使用表示学习来解决该问题

  • 使用 GNN 来直接预测子图同构问题(二分类)
  • 将指数级的组合运算转化为顺序嵌入空间的搜索问题

SPMiner:识别频繁主题的神经模型

  1. 分解(Decompose),遍历目标图 GT 的节点,并分别构建节点诱导子图
  2. 编码(Encoder):使用训练好的 GNN 网络将子图转化为顺序嵌入空间的表示
  3. 搜索过程(Search Procedure):基于生长模式寻找频繁子图,并估计出现频率

步骤 1 和步骤 2 和 子图嵌入表示和匹配一节内容是一致的

搜索过程(Search Procedure)细节:

  1. 首先随机选择一个节点 u(交集闭包性(Closure under intersection):只含一个节点的平凡图是任何图的子图),并构建子图 S=u
  2. 在每次迭代过程中,基于贪心算法找到子图 S 中某一节点的新邻居,添加到 S 中;贪心算法的目标是更新后的 S 的右上区域(对应上图红色方形阴影区域)内的节点数最大化
  3. 重复迭代 k 次后,即可得到一个满足预期尺寸的频繁子图,其右上区域内的节点数对应着该频繁子图出现频率的统计

该方法利用了顺序嵌入空间的特性,实现了频繁子图的高效发现和计数

SPMiner 的性能评估:

  • SPMiner 可以识别出频繁子图 Top 10 中的前 9/8 个,并且识别频率接近真实值

  • 在查找大的 motif 时(k 值在 10~20 之间),SPMiner 也明显要优于传统方法

往年同期文章