Struc2vec理论
1)介绍
Struc2Vec是从空间结构相似性的角度定义顶点相似度的。
根据下图,如果在基于近邻相似的模型中,顶点 u u u和顶点 v v v是不相似的,第一他们不直接相连,第二他们不共享任何邻居顶点。
而在struc2vec的假设中,顶点 u u u和顶点 v v v是具有空间结构相似的。他们的度数分别为5和4,分别连接3个和2个三角形结构,通过2个顶点 ( d , e ; x , w ) (d,e;x,w) (d,e;x,w)和网络的其他部分相连。
直观来看,具有相同度数的顶点是结构相似的,若各自邻接顶点仍然具有相同度数,那么他们的相似度就更高。
2)距离定义
令 R k ( u ) R_k(u) Rk(u)表示到顶点 u u u距离为 k k k的顶点集合,则 R 1 ( u ) R_1(u) R1(u)表示是 u u u的直接相连近邻集合。
令 s ( S ) s(S) s(S)表示顶点集合 S S S的有序度序列。
通过比较两个顶点之间距离为k的环路上的有序度序列可以推出一种层次化衡量结构相似度的方法。
令
f
k
(
u
,
v
)
f_k(u,v)
fk(u,v)表示顶点
u
u
u和
v
v
v之间距离为
k
k
k(这里的距离
k
k
k实际上是指距离小于等于
k
k
k的节点集合)的环路上的结构距离(注意是距离,不是相似度)。
f
k
(
u
,
v
)
=
f
k
−
1
(
u
,
v
)
+
g
(
s
(
R
k
(
u
)
)
,
s
(
R
k
(
v
)
)
)
,
k
≥
0
a
n
d
∣
R
k
(
u
)
∣
,
∣
R
k
(
v
)
∣
>
0
f_k(u,v)=f_{k-1}(u,v)+g(s(R_k(u)),s(R_k(v))),\\ k\geq 0 \quad and \quad |R_k(u)|,|R_k(v)| >0
fk(u,v)=fk−1(u,v)+g(s(Rk(u)),s(Rk(v))),k≥0and∣Rk(u)∣,∣Rk(v)∣>0
其中
g
(
D
1
,
D
2
)
≥
0
g(D_1,D_2)\geq 0
g(D1,D2)≥0是衡量有序度序列
D
1
D_1
D1和
D
2
D_2
D2的距离的函数,并且
f
−
1
=
0
f_{-1}=0
f−1=0
由于 s ( R k ( u ) ) s(R_k(u)) s(Rk(u))和 s ( R k ( v ) ) s(R_k(v)) s(Rk(v))的长度不同,并且可能含有重复元素。所以文章采用了**Dynamic Time Warping(DTW)**来衡量两个有序度序列。
基于DTW,定义元素之间的距离函数: d ( a , b ) = m a x ( a , b ) m i n ( a , b ) − 1 d(a,b)=\frac{max(a,b)}{min(a,b)}-1 d(a,b)=min(a,b)max(a,b)−1
这个距离函数实际上惩罚了当两个顶点的度数都比较小的时候两者的差异。举例来说 a = 1 , b = 2 a=1,b=2 a=1,b=2情况下的距离为1, a = 101 , b = 102 a=101,b=102 a=101,b=102 情况下的距离差异为0.0099。
3)构建多层带权重图
根据上一节的距离定义,对于每一个 k k k 我们都可以计算出两个顶点之间的一个距离,现在要做的是通过上一节得到的顶点之间的有序度序列距离来构建一个层次化的带权图(用于后续的随机游走)。
我们定义在某一层k中两个顶点的边权为: w k ( u , v ) = e − f k ( u , v ) , k = 0 , ⋯ , k ∗ w_k(u,v)=e^{-f_k(u,v)},k=0,\cdots ,k^* wk(u,v)=e−fk(u,v),k=0,⋯,k∗
这样定义的边权都是小于1的,当且仅当距离为0的是时候,边权为1。
通过有向边将属于不同层次的同一顶点连接起来,具体来说,对每个顶点,都会和其对应的上层顶点还有下层顶点相连。边权定义为:
w ( u k , u k + 1 ) = log ( Γ k ( u ) + e ) , k = 0 , ⋯ , k ∗ − 1 w(u_k,u_{k+1})=\log(\Gamma_k(u)+e),k=0,\cdots, k^*-1 w(uk,uk+1)=log(Γk(u)+e),k=0,⋯,k∗−1
w ( u k , u k − 1 ) = 1 w(u_k,u_{k-1})=1 w(uk,uk−1)=1
其中 Γ k ( u ) \Gamma_k(u) Γk(u)是第 k k k层与 u u u相连的边的边权大于平均边权的边的数量。
Γ k ( u ) = ∑ v ∈ V 1 ( w k ( u , v ) > w ‾ k ) \Gamma_k(u)=\sum_{v\in V}1\quad(w_k(u,v)>\overline{w}_k) Γk(u)=∑v∈V1(wk(u,v)>wk), w ‾ k \overline{w}_k wk 就是第 k k k层所有边权的平均值。
4)采样获取顶点序列
使用有偏随机游走在构造出的图 中进行顶点序列采样。 每次采样时,首先决定是在当前层游走,还是切换到上下层的层游走。
1.本层游走
若决定在当前层游走,设当前处于第
k
k
k层,则从顶点
u
u
u到顶点
v
v
v的概率为:
p
k
(
u
,
v
)
=
e
−
f
k
(
u
,
v
)
Z
k
(
u
)
p_k(u,v)=\frac{e^{-f_k(u,v)}}{Z_k(u)}
pk(u,v)=Zk(u)e−fk(u,v)
其中
Z
K
(
u
)
=
∑
v
∈
V
,
v
≠
u
e
−
f
k
(
u
,
v
)
Z_K(u)=\sum_{v\in V,v\not= u}e^{-f_k(u,v)}
ZK(u)=∑v∈V,v=ue−fk(u,v) 是第
k
k
k层中关于顶点
u
u
u的归一化因子。
通过在图 M M M中进行随机游走,每次采样的顶点更倾向于选择与当前顶点结构相似的顶点。因此,采样生成的上下文顶点很可能是结构相似的顶点,这与顶点在图中的位置无关。
2.上下游切换
若决定切换不同的层,则以如下的概率选择 k + 1 k+1 k+1层或 k − 1 k-1 k−1层,
p k ( u k , u k + 1 ) = w ( u k , u k + 1 ) w ( u k , u k + 1 ) + w ( u k , u k − 1 ) p_k(u_k,u_{k+1})=\frac{w(u_k,u_{k+1})}{w(u_k,u_{k+1})+w(u_k,u_{k-1})} pk(uk,uk+1)=w(uk,uk+1)+w(uk,uk−1)w(uk,uk+1)
p k ( u k , u k − 1 ) = 1 − p k ( u k , u k + 1 ) p_k(u_k,u_{k-1})=1-p_k(u_k,u_{k+1}) pk(uk,uk−1)=1−pk(uk,uk+1)
5)使用skip-gram生成embedding
Struc2vec适用于节点分类中,其结构标识比邻居标识更重要时,采用Struc2vec效果好。
Graph Embedding——(1)DeepWalk理论
Graph Embedding——(2)LINE理论
Graph Embedding——(3)Node2vec理论
Graph Embedding——(5)SDNE理论
Graph Embedding常见类型的理论详解