Weisfeiler-Lehman(WL)算法和WL Test的学习笔记
1. 什么是Weisfeiler-Lehman(WL)算法2. WL Test3. Weisfeiler-Lehman算法与GCN的关系4. Weisfeiler-Lehman算法应用Weisfeiler-Lehman算法通常被用在解决图的相似性问题上5. 举例说明①聚合邻居节点的标签得到一个标签的字符串,对字符串进行升序排列。②对字符串进行哈希处理,这里生成了一个一一映射的字典,这一步也可以使用
1. 什么是Weisfeiler-Lehman(WL)算法
一维的Weisfeiler-Lehman:
对于任意的节点
v
i
∈
G
v_i∈G
vi∈G:
- 获取节点{ v i {v_i} vi}所有的邻居节点 j j j的特征{ h v j h_{v_j} hvj}
- 更新该节点的特征 h i < − h a s h ∑ j h v j h_i < -hash{\sum_{j}h_{v_j}} hi<−hash∑jhvj,hash是一个单射函数( x x x不同则 f ( x ) f(x) f(x)一定不同)
重复以上步骤 K K K次直至收敛
2. WL Test
事实上,Weisfeiler-Lehman算法在大多数图上会得到一个独一无二的特征集合,这意味着图上的每一个节点都有着独一无二的角色定位(例外在于网格,链式结构等等)。因此,对于大多数非规则的图结构,得到的特征可以作为图是否同构的判别依据,也就是WL Test(例如两个图是否是同质的,取决于节点的排列方式)。
3. Weisfeiler-Lehman算法与GCN的关系
有的论文认为,GCN模型可以看作图上Weisfeiler-Lehman算法的一种变形。
我们回到公式
h
v
i
l
+
1
=
σ
(
∑
j
1
c
i
j
h
v
j
l
W
l
)
h_{v_i}^{l+1}=\sigma(\sum_{j}\frac{1}{c_{ij}}h_{v_j}^lW^l)
hvil+1=σ(j∑cij1hvjlWl)
其中,
c
i
j
=
d
i
d
j
c_{ij}=\sqrt{d_id_j}
cij=didj,
j
∈
N
i
j∈N_i
j∈Ni,
N
i
N_i
Ni为
i
i
i的邻居节点,
d
i
d_i
di,
d
j
d_j
dj为
i
i
i,
j
j
j的度,这本质上是在模型中使用了对称规范化后的邻接矩阵
D
1
2
A
D
1
2
D^{\frac{1}{2}}AD^{\frac{1}{2}}
D21AD21,可以看出这个传播规则其实是加了参数
W
l
W^l
Wl后略微变化的hash函数。如果我们采用合适的非线性函数
σ
\sigma
σ然后随机初始化参数矩阵那么这个矩阵就会是正交的,这个更新策略就会非常可靠。这样子我们就可以通过局部图结构中的距离得到非常有意义的平滑嵌入表示。这也就是很多文章将GCN视作Weisfeiler-Lehman变形的理由。
4. Weisfeiler-Lehman算法应用
Weisfeiler-Lehman算法通常被用在解决图的相似性问题上,虽然算法要解决的问题聚焦在Graph层面上,但是其立足点还是在节点上,如果我们能够找到一种衡量节点独立性(unique)的方法,那么我们就可以将图视作一个包含这些独立性节点的集合,两张图的相似性可以转化为两个集合的Jaccard相似度。
5. 举例说明Wisfeiler-Lehman算法应用
给定两图G和G’,其中每个节点都已经打上了标签(实际应用中,有些时候我们并拿不到节点的标签,这时可以对节点都标上“1”这个标签)
要比较G和G’的相似性,我们来看看weisfeiler-lehman算法是怎么做的:
①聚合邻居节点的标签得到一个标签的字符串,对字符串进行升序排列。
②对字符串进行哈希处理,这里生成了一个一一映射的字典,这一步也可以使用其它的字符串哈希函数,只要保证碰撞率尽量小就可以。
③将哈希过的值重新赋值给相应的节点
这样第一轮迭代之后,G={6、6、8、10、11、13},G’={6,7,9,10,12,13}于是利用Jaccard公式就可以计算出G和G`的相似度了,如果需要更严格的对比,可以持续迭代上述过程。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)