Weisfeiler-Lehman test及其扩展
- 引言
- 图同构
- WL test(Weisfeiler-Lehman test)
- 一维Weisfeiler-Lehman test的一个例子
- WL子树核(WL subtree kernel)
- 参考文献
引言
在阅读GNN相关论文时,经常会碰到一个概念叫做WL test(Weisfeiler-Lehman test),然而网上对这个概念的相关介绍却很少。本人在查阅了一些资料后,将自己对这个概念的理解记录下来,希望能和大家交流学习。由于本人学识有限,有不妥之处还请大家批评指正。
图同构
在介绍具体的Weisfeiler-Lehman test和Weisfeiler-Lehman算法之前,先对图同构(Graph Isomorphism)的概念进行简单的回顾。图同构是图论中用来描述两个图在拓扑结构上是否完全等价的一个概念,如果两个图
和
完全等价,我们称
和
是同构的;否则,
和
是非同构的。显然,两个图
和
等价的必要条件是:
和
必须是同阶的(
和
有相同的节点数目)。描述两个图同构的严格数学定义为:两个简单图
和
是同构的,当且仅当存在一个将
的节点
映射到
的节点
的一一对应
,使得
中任意两个节点
和
相连接,当且仅当
中对应的两个节点
和
相连接。如果
和
是有向图,那么同构的定义中还进一步要求对于
中任意两个相连的节点
和
,边
与它在
中对应的边
方向相同。类似地可以定义两个多重图的同构关系。
关于图同构的一个具体例子如下,为方便起见,两图中对应节点被染成了相同的颜色:
WL test(Weisfeiler-Lehman test)
判断两个图是否为同构的是一个非常困难的问题,目前还没有一个可以在多项式时间内求解的算法。除了一些极端的情况外,WL test是用来判断两个图是否是同构的一个有效的方法,它的一维形式“naive vertex refinement”类似于GNN中的邻居信息聚合。具体操作分为两步:
(1)聚合当前节点
及当前节点
邻居节点的标签;
(2)用一个哈希函数将(1)中的聚合结果映射为一个新的标签并赋给节点
。
将上述两个步骤迭代多次,判断两个图
和
的节点标签是否相同,若相同,则认为图
和
是同构的;否则,
和
是非同构的。如果设
表示节点
的标签,那么标签的更新公式可以表示为:
其中,
表示迭代次数,
表示图中节点
的邻居节点集合。
一维Weisfeiler-Lehman test的一个例子
给定有标签的图
和
:
1.聚合两图中每个节点及其邻居节点的标签,当前节点自身的标签和其邻居节点标签之间用逗号隔开,邻居节点标签按升序排列,聚合结果如下:
2.用定义在多重集上的哈希函数在1中结果的基础上进行计算,得到每个节点的新的标签,并将新标签赋给相应节点:
如果两个图
和
是同构的,则在某次迭代之后,这两个图对应节点的标签会变成完全相同的。
WL子树核(WL subtree kernel)
WL子树核是Shervashidze等人于2011年基于WL test提出的概念,它用来度量两个图之间的相似性。子树核用WL test迭代过程中不同节点标签的数量来作为图的特征向量。在WL test的第k次迭代过程中,一个节点的标签表示以该节点为根,高为k的一个子树结构。听起来有点太抽象了,下面用一个例子来说明:
上图中左边的部分表示原始的Graph,右边表示在经过两次WL test迭代后,以节点2为根的高为2(这里高的2和两次迭代相对应)的rooted subtree(根子树)的结构。除了上图右边所示的以节点2为根的高为2的根子树结构,以节点1,3,4为根的子树结构如下图所示(涂黑的表示节点2):
由于节点1和节点4对称,所以节点1和节点4对应的子树结构是相同的,因此,两次WL test迭代后形成的不同节点标签数为3。
参考文献
- [HOWPOWERFUL AREGRAPHNEURALNETWORKS?][1]
- [GNN 教程:Weisfeiler-Leman 算法][2]
- [图同构][3]