Weisfeiler-Lehman(WL)算法和WL Test的学习笔记
1. 什么是Weisfeiler-Lehman(WL)算法
一維的Weisfeiler-Lehman:
對于任意的節點vi∈Gv_i∈Gvi?∈G:
- 獲取節點{vi{v_i}vi?}所有的鄰居節點jjj的特征{hvjh_{v_j}hvj??}
- 更新該節點的特征hi<?hash∑jhvjh_i < -hash{\sum_{j}h_{v_j}}hi?<?hash∑j?hvj??,hash是一個單射函數(xxx不同則f(x)f(x)f(x)一定不同)
重復以上步驟KKK次直至收斂
2. WL Test
事實上,Weisfeiler-Lehman算法在大多數圖上會得到一個獨一無二的特征集合,這意味著圖上的每一個節點都有著獨一無二的角色定位(例外在于網格,鏈式結構等等)。因此,對于大多數非規則的圖結構,得到的特征可以作為圖是否同構的判別依據,也就是WL Test(例如兩個圖是否是同質的,取決于節點的排列方式)。
3. Weisfeiler-Lehman算法與GCN的關系
有的論文認為,GCN模型可以看作圖上Weisfeiler-Lehman算法的一種變形。
我們回到公式
hvil+1=σ(∑j1cijhvjlWl)h_{v_i}^{l+1}=\sigma(\sum_{j}\frac{1}{c_{ij}}h_{v_j}^lW^l)hvi?l+1?=σ(j∑?cij?1?hvj?l?Wl)
其中,cij=didjc_{ij}=\sqrt{d_id_j}cij?=di?dj??,j∈Nij∈N_ij∈Ni?,NiN_iNi?為iii的鄰居節點,did_idi?,djd_jdj?為iii,jjj的度,這本質上是在模型中使用了對稱規范化后的鄰接矩陣D12AD12D^{\frac{1}{2}}AD^{\frac{1}{2}}D21?AD21?,可以看出這個傳播規則其實是加了參數WlW^lWl后略微變化的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`的相似度了,如果需要更嚴格的對比,可以持續迭代上述過程。
總結
以上是生活随笔為你收集整理的Weisfeiler-Lehman(WL)算法和WL Test的学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 币圈假币泛滥:造假团伙骗走上亿,买别墅开
- 下一篇: 我如何在咨询项目中使用Vagrant和D