【网络表示学习】struc2vec

struc2vec是一种网络表示学习模型,旨在捕捉节点的结构化角色相似度,而非仅仅依赖于近邻相似。通过构建层次带权图并采用随机游走策略,struc2vec能生成反映节点结构角色的表示。模型涉及相似度定义、顶点距离计算、图构造和优化方法,以提高效率和准确性。
摘要由CSDN通过智能技术生成

题目:struc2vec: Learning Node Representations from Structural Identity

作者:Leonardo F. R. Ribeiro, Pedro H. P. Saverese, Daniel R. Figueiredo

来源:KDD 2017

源码:https://github.com/leoribeiro/struc2vec

传统的graph embedding方法如DeepWalk,LINE,SDNE等都是基于近邻相似假设的(Homohily,同质性),两个顶点的共同邻居越多则越相似。然而在一些场景中,两个不是近邻的顶点也可能拥有很高的相似性,可能这些节点在邻域中的角色相似,例如星型结构的中心节点,社区结构之间的桥接节点等。struc2vec就是针对捕捉节点的结构化角色相似度(structural role proximity)提出的模型。

模型

struc2vec总体流程如下:

(1)根据不同距离的邻居信息,分别计算计算节点对的结构相似度 f k ( u , v ) f_k(u,v) fk(u,v) (第k层u和v节点的结构相似度)

(2)构造多层带权有向图 M,其中每层都是带权无向图,层与层之间是有向的

(3)在M中随机游走,构造上下文序列

(4)skip-gram训练序列,得到每个节点的表示

相似度定义

struc2vec从空间结构相似性的角度定义顶点相似度。下图中如果在基于近邻相似的模型中,顶点u和顶点v是不相似的,第一他们不直接相连,第二他们不共享任何邻居顶点。

但是在struc2vec的假设中,顶点u和顶点v是具有空间结构相似的。他们的度数分别为5和4,分别连接3个和2个三角形结构,通过2个顶点(d,e;x,w)和网络的其他部分相连。

直观来看,如果两个顶点的度相同,那么这两个顶点的结构是相似的,若各自邻接顶点仍然具有相同度数,那么他们的相似度就更高。

顶点对距离定义

R_k(u) 表示到顶点u距离为k的顶点集合,则 R_1(u) 表示是u的直接相连近邻集合。

s(S) 表示顶点集合S的有序度序列

通过比较两个顶点之间距离为k的环路上的有序度序列可以推出一种层次化衡量结构相似度的方法。

f_k(u,v) 表示顶点u和v之间距离为k(这里的距离k实际上是指距离小于等于k的节点集合)的环路上的结构距离(注意是距离,不是相似度)。

f_k(u,v)=f_{k-1}(u,v)+g(s(R_k(u)),s(R_k(v))),k\ge 0 \text{ and } |R_k(u)|,|R_k(v)|>0

其中 g(D_1,D_2)\ge 0 是衡量有序度序列 D_1D_2 的距离的函数,并且 f_{-1}=0

注意到f_k(u,v)的计算是在f_{k-1}(u,v)上加上一个非负的值,因此该函数关于k是一个单调不降的函数。并且这个函数只有在两个节点同时存在k跳邻域的时候才有定义。

下面给出一个具体例子:

img

下面就是如何定义有序度序列之间的比较函数了,由于 s(R_k(u))s(R_k(v)) 的长度不同,并且可能含有重复元素。所以文章采用了**Dynamic Time Warping(DTW)**来衡量两个有序度序列。

一句话,DTW可以用来衡量两个不同长度且含有重复元素的的序列的距离(距离的定义可以自己设置)。

基于DTW,定义元素之间的距离函数 d(a,b)=\frac{max(a,b)}{min(a,b)}-1

至于为什么使用这样的距离函数,这个距离函数实际上惩罚了当两个顶点的度数都比较小的时候两者的差异。举例来说, a=1,b=2 情况下的距离为1, a=101,b=102 情况下的距离差异为0.0099。这个特性正是我们想要的。

构建层次带权图

根据上一节的距离定义,对于每一个 k 我们都可以计算出两个顶点之间的一个距离,现在要做的是通过上一节得到的顶点之间的有序度序列距离来构建一个层次化的带权图(用于后续的随机游走)。

每一层是一个带权完全图(任意两个节点都有边相连),因此有 n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1) 条边

我们定义在某一层k中两个顶点的边权为 w_k(u,v)=e{-f_k(u,v)},k=0,...,k*

这样定义的边权都是小于1的,当且仅当距离为0的是时候,边权为1。

img

通过有向边将属于不同层次的同一顶点连接起来,具体来说,对每个顶点,都会和其对应的上层顶点还有下层顶点相连。边权定义为

w(u_k,u_{k+1})=\log{(\Gamma_{k}(u)+e)},k=0,...,k^*-1

w(u_k,u_{k-1})=1

其中 \Gamma_k(u) 是第k层与u相连的边的边权大于平均边权的边的数量。\Gamma_k(u) = \sum_{v \in V} 1(w_k(u,v)>\bar{w_k})\bar{w_k} 就是第k层所有边权的平均值。

\bar w_k 第k层所有边权的平均值。\Gamma_k(u) 实际上表示了第k层中,有多少节点是与节点u相似的,如果u与很多节点都相似,说明此时一定处于低层次,考虑的信息太少,那么\Gamma_k(u)将会很大,即w(u_k,u_{k+1})>w(u_k,u_{k-1}),对于这种情况,就不太适合将本层中的节点作为上下文了,应该考虑跳到更高层去找合适的上下文,所以高层的权重更大。

img

采样获取顶点序列

使用有偏随机游走在构造出的图 M 中进行顶点序列采样。 每

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值