论文链接
论文链接:struc2vec: Learning Node Representations from Structural Identity
论文简介
对于传统的例如DeepWalk、LINE、SDNE等graph embedding方法都是基于近邻相似假设的;
其中DeepWalk、Node2vec是通过窗口在walk长度以内的随机游走在图中对顶点序列进行采样拉来构造顶点的邻近集合的,LINE是构造邻接点对和顶点的距离为1的集合;
上述算法对于远距离具有构造相似性的节点就无能为力了。
而在一些场景中,两个不是近邻的顶点也可能拥有很高的相似性,对于这类相似性,上述方法是无法捕捉到的,Struc2Vec就是针对这类场景提出的,克服了此前的局限性。
struc2vec的主要思想
1.忽略节点和边缘属性以及它们在网络中的位置来评估节点之间的结构相似性;
2.建立层次结构来度量节点在不同尺度上的结构相似性,允许对结构相似的含义有更加严格的概念;
3.为结点生成随机上下文,节点是通过加权随机游走遍历一个多层图观察到的结构相似的节点序列。
STRUC2VEC
- 考虑获取网络中节点的结构标识的学习表示的问题,struc2ves应该有下面的属性特点:
1.节点的潜在表示之间的距离应该与其结构相似性密切相关,即具有相同局域网络结构的两个节点应该具有相同的潜在表征,相对的不同结构特征的节点应该相距较远;
2.潜在表示不应依赖于任何节点或边缘属性,节点的结构标识必须与其在网络中的“位置”无关。
学习节点潜在表示的通用框架struc2vec主要由四个步骤组成:
1.确定图中不同邻域大小的每个顶点对之间的结构相似性;
2.构造一个加权多层图,其中网络中的所有节点都存在与每一层中,每一层对应于衡量结构相似的层次结构;
3.使用多层图为每个节点生成上下文,特别的,在多层图上使用有偏随机游走来生成节点序列;
4.应用一种技术从节点序列给定的上下文中的学习潜在表示,例如SkipGram。
测量结构相似性
struct2vec的第一步是在不使用任何节点或边属性的情况下确定两个节点之间的结构相似性。
一般认为,两个节点具有相同的度在结构上是相似的,但是如果它们的邻居也有相同的度,那么它们在结构上就更加相似。
- 设G=(V,E)表示一个无向无权图,n=|V|表示网络中的节点数,k*表示其直径(最长跳数),Rk(u)是距离节点u在k跳范围内的节点集合,s(S)表示对节点集合S进行按度排序的序列;另fk(u,v)表示u和v之间的结构距离,考虑其k跳邻域,有:
其中g(D1,D2)≥0测量有序度序列D1到D2之间的距离,f−1=0。
通过定义,fk(u,v)在k中是不递减的,并且只有当u或v都存在k跳节点时才定义fk(u,v)。
最后一步是确定比较两个度序列的函数,s(Rk(u))和s(Rk(v))可以是两个不同的大小,采用动态时间扭曲(DTW)来测量两个有序度序列之间的距离。
DTW是指两个序列A和B之间的最优对齐,可以衡量两个不同长度且含有重复元素的的序列的距离:
构建上下文图(多层加权图)
文章构造了一个多层加权图来编码节点之间的结构相似性,每一层k中两个节点之间的边权重由以下公式给出:
只有当fk(u,v)被定义且权值与结构距离成反比时,边界才被定义;这样定义的边权都是小于1的,当且仅当距离为0的是时候,边权为1。
通过有向边将属于不同层次的同一顶点连接起来,具体来说,对每个顶点,都会和其对应的上层顶点还有下层顶点相连。边权定义为:
上式其中Γk(u)是第k层与u相连的边的边权大于平均边权的边的数量,表达式如下,其中wk就是第k层所有边权的平均值:
Γk(u)实际上表示了第k层中,有多少节点是与节点u相似的,如果u与很多节点都相似,说明此时一定处于低层次,考虑的信息太少,那么Γk(u)将会很大,就会出现w(uk,uk+1) > w(uk,uk-1)的情况,这种情况就不太适合将本层中的节点作为上下文了,应该考虑跳到更高层去找合适的上下文,所以高层的权重更大。
为结点生成上下文(采样获取顶点序列)
-
文章使用多层图M为每个结点u生成上下文,使用有偏随机游走在构造出的图M中进行顶点序列采样。每次采样时,首先决定是在当前层游走,还是切换到上下层的层游走。
-
假设随机游走到了uk,那么下一步可能的走向是uk+1,uk-1,vk,wk,留在本层继续游走的概率为q,自然跳层的概率就是1-q。
假设留在当前层游走,设当前处于k层,则从u到v的概率为,其中Zk(u)是k层中关于顶点u的归一化因子:
假设切换到其他的层,则选择k+1或k-1层时,从uk到uk+1或uk-1的概率为:
请注意,每次walker步进一个层时,它都将当前顶点作为其上下文的一部分,与层无关。
复杂性和优化
DTW计算序列距离的时间复杂度为O(l^2),通过一定的优化可以降到O(l),其中l是序列的最大长度;对于任意节点u和层k,度序列有:
计算k层所有距离的复杂度为:
总共k层,最后的复杂度为O(k*n^3)。
文章提供了三种优化方法:
优化度序列的长度(OPT1),为了降低比较大序列的代价,文章提出了这个方法压缩有序度列,压缩有序度序列是一个具有度和出现次数的元组,比如{1,1,1,1,2,2,5,5,5,8}压缩成{(1,4),(2,2),(5,3),(8,1)}。
修改DTW距离函数如下,其中a0,b0为度数,a1,b1为度出现的次数:
优化成对相似性计算的数量(OPT2),在原始的方法中,每一层k中,任意两个顶点之间的相似度都要计算。然而这是不必要的。
因为两个度数相差很大的顶点,即使在k=0的时候他们的距离非常大,那么在随机游走时这样的边就几乎不可能被采样到。
- 优化提出在计算顶点u和其他顶点之间的距离时,只计算那些与顶点u的度数接近的顶点的距离。具体做法就是在顶点u对应的有序度序列中进行二分查找,查找的过程就是不断逼近顶点u的度数的过程,只计算查找路径上的顶点与u的距离。这样每一次需要计算的边的复杂度从O( n^2)缩减到O(nlogn)。
优化限制带权图层数(OPT3),层次带权图M中的层数是由图的直径k* 决定的。但是对很多图来说,图的直径会远远大于顶点之间的平均距离。
当k接近k* 时,环上的度序列s(Rk(u))的长度也会变得很短,fk(u,v)和fk-1(u,v)会变得接近,因此将图中限制为k’<k* ,使用最重要的一些层来评估结构相似度,这样的限制显著降低构造M时的计算和存储开销。
算法步骤
Struc2vec算法的大体步骤为,这里面的每步的具体算法都在之前的部分讲过了:
1.获取每一层的顶点对距离;
2.根据顶点对距离构建带权层次图;
3.在带权层次图中随机游走采样顶点序列。
实验评价
文章通过杠铃图、空手道网络、边缘去除鲁棒性、分类、可扩展性等方面,在不同的场景中评估struc2vec,以说明它在捕捉节点的结构标识方面的潜力。
总结
结构同一性是网络中的一个对称性概念,根据网络结构来识别节点。文章提出了struc2vec,一个新的灵活的框架来学习表示,捕捉网络中节点的结构特征。
struc2vec通过考虑节点有序度序列定义的层次度量来评估节点对的结构相似性,并使用加权多层图生成上下文。
与DeepWalk、node2vec和RolX等最新技术相比,struc2vec在捕捉节点的结构标识方面表现出色。它通过明确关注结构同一性来克服它们的局限性,且在节点标签更依赖于其角色或结构标识的分类任务中更优越。