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的学习笔记相关推荐

  1. 目标检测经典算法和API详解(笔记)

    文章目录 商品目标检测 1. 目标检测概述 1.1.项目演示介绍 学习目标 1.1.1 项目演示 1.1.2 项目结构 1.1.3 项目安排 1.2 图像识别背景 学习目标 1.2.1 图像识别三大任 ...

  2. 数据结构与算法—最小生成树(Prim算法和Kruskal算法算法详解)

    前言 在数据结构与算法的图论中,(生成)最小生成树算法是一种常用并且和生活贴切比较近的一种算法.但是可能很多人对概念不是很清楚.我们看下百度百科对于最小生成树定义: 一个有 n 个结点的连通图的生成树 ...

  3. 最长不下降子序列的O(n^2)算法和O(nlogn)算法

    转帖 最长不下降子序列的O(n^2)算法和O(nlogn)算法 最长不下降子序列(LIS:Longest Increasing Subsequence) //用句通俗的话说,我讲的很通俗易懂~~ 问题 ...

  4. BF算法和KMP算法

    给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式.这里将介绍处理串匹配问题的两种算法,BF算法和KMP算法. BF算法 (暴力匹配 ...

  5. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)

    Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...

  6. 操作系统之存储管理——FIFO算法和LRU算法

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  7. RSA算法和RSA数字签名算法的实现

    RSA算法和RSA数字签名算法的实现 http://blog.chinaunix.net/uid-21880738-id-1813146.html 顾婷婷 李涛 (四川大学计算机系(西区) 成都 61 ...

  8. 若S作主串,P作模式串,试分别写出利用BF算法和KMP算法的匹配过程。

    目   录 题目: 百度文库-答案: (1) (2) MOOC标准答案: (1) (2) mooc答案-截图: 数据结构(C语言版)-严蔚敏2007 题目: 设字符串S='aabaabaabaac', ...

  9. python选择排序从大到小_经典排序算法和Python详解之(一)选择排序和二元选择排序...

    本文源自微信公众号[Python编程和深度学习]原文链接:经典排序算法和Python详解之(一)选择排序和二元选择排序,欢迎扫码关注鸭! 扫它!扫它!扫它 排序算法是<数据结构与算法>中最 ...

最新文章

  1. python 生成pdf收据_python如何与以太坊交互并将区块链信息写入SQLite
  2. Dubbo -- 系统学习 笔记 -- 示例 -- 服务分组
  3. javascript递归函数问题
  4. python如何实时捕捉cmd显示_如何从Python脚本中捕获Python解释器和/或CMD.EXE的输出? -问答-阿里云开发者社区-阿里云...
  5. Python实例讲解 -- tkinter canvas (设置背景图片及文字)
  6. 利用函数重载编写函数max_彻底理清重载函数匹配
  7. C++调用tensorflow训练好的SSD物体检测模型-opencv3.4.3
  8. 渤海银行天津分行计算机笔试,关于渤海银行笔试经验分享
  9. 目标检测---数据集格式转化及训练集和验证集划分
  10. Android车牌识别sdk开发包,基于Android和iOS平台的车牌识别SDK开发包
  11. Mblock的扩展模块的编写
  12. mysql workbench pk_mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI_MySQL - numeric
  13. 职场中该如何自学?看书/看视频
  14. JMeter 扩展开发:扩展 TCP 取样器
  15. 小学生python编程写游戏_教你如何像玩游戏一样学Python
  16. 常用加密与解密算法示例代码
  17. 用4433法则+python代码筛选债券基金
  18. 无人机项目跟踪六十七----电子罗盘电路
  19. System.Data.OleDb.OleDbException: 至少一个参数没有被指定值。
  20. steam搬砖项目:靠谱吗,细说下搬砖的核心内容

热门文章

  1. 河北省理科2001——2010年一分一档表
  2. Web 前端基础知识面试大全
  3. 【工具封装】Python 实现将阿拉伯数字 === 转换成中文大写数字
  4. 一个菜鸟实习生的月总结
  5. CSS实用技巧第一讲:文字处理
  6. python是不是现在主流的人工智能编程语言_AI编程:5种最流行的人工智能编程语言...
  7. C++ 模板问题(一) -- 如何识别模板类型
  8. zzulioj1017C语言答案,郑州轻工业大学oj题解(c语言)1017,1018 if典型题
  9. 二十一世纪大学英语读写基础教程学习笔记(原文)——10 - The Future(未来)
  10. linux/windows下基于opc ua协议使用open62541开发客户端-上