这儿涉及到一个概念anonymous walks,即匿名游走,具体的论文是ICML2018的同名论文:Anonymous Walk Embeddings, ICML 2018 https://arxiv.org/pdf/1805.11921.pdf。
首先对于随机游走(random walk)而言,它是node的序列,而序列是根据一定的随机游走策略获得的。对于一个random walk序列而言,其state往往是节点的全局index(或者叫做global name)或者 label,但这样的state往往是unavailable的,因此匿名游走就是随机游走的一个匿名版本,即使global name不可获取,依旧可以提供一种灵活的方式来重建网络,形式化表示为:
w
=
(
v
1
,
v
2
,
.
.
.
,
v
k
)
a
=
(
f
(
v
1
)
,
f
(
v
2
)
,
.
.
.
,
f
(
v
k
)
f
(
v
i
)
=
m
i
n
p
j
∈
p
o
s
(
w
,
w
i
)
p
o
s
(
w
,
w
i
)
w = (v_1, v_2, ..., v_k) \\ a = (f(v_1), f(v_2), ..., f(v_k) \\ f(v_i) = \underset{p_j\in pos(w,w_i)}{min}pos(w,w_i)
w=(v1,v2,...,vk)a=(f(v1),f(v2),...,f(vk)f(vi)=pj∈pos(w,wi)minpos(w,wi)
我们称
w
↦
a
w \mapsto a
w↦a为从random walk
w
w
w往anonymous walk
a
a
a的映射。
看着挺复杂,其实一句话概括就是匿名游走的节点如果在先前出现过,则将此时的index设置为它第一次出现时的index,习惯性从1开始计数,每当遇到一个新的没有遇到过的节点,则自增state(index),即state的最大值等于这一条walk中存在的unique的节点数目。
即匿名游走是对节点的身份无感知的,具体在论文中也解释了这样一种游走方式的合理性以及应用场景。一个网络的全局拓扑结构往往是有意隐藏的,举例来说,社交网络会限制外人获取到你的朋友关系,万维网新创建的链接也往往此时不为搜索引擎所感知,然而,对于单个节点而言(称之为observer),它可以以它自己为起点,展开随机游走来对网络进行探索,然后把这个过程传递给他的邻居节点,并且记录下在一条随机游走序列中所观察到的状态states。对于一个观察者而言,节点的global names是不为自己所知道的,因此一种方式就是匿名地记录状态,用遇到的节点用第一次出现的index来描述。这样的方式不仅简明扼要,而且对于一些对隐私安全有限制的场景也是非常常用的,因为它不允许你记录nodes的完整描述。
与此同时,在先前的工作:Reconstructing markov pro- cesses from independent and anonymous experiments. 也已经证明,对于一个节点 u u u而言,它处在网络 G G G当中,如果已知它的长度为 l l l的anonymous walk的分布 D l D_l Dl,那么是足够重建一个球形的拓扑结构 B ( u , r ) B(u,r) B(u,r),其中心是 u u u,半径是 r r r。即能够得到节点 u u u的 r r r hop的拓扑结构。对于学习表征的任务而言,图的拓扑结构是已知的,因此可以很准确地计算匿名游走的分布 D l D_l Dl,因为两个不同的子图,不可能有相同的分布 D l D_l Dl,因此如果把匿名游走的分布,由单个节点泛化到整个网络的话,就能得到整个网络的feature representation。
从上面对匿名游走的定义可以知道,对于任意一个给定的graph而言,它的路径为
l
l
l的匿名游走的pattern数目,是与路径长度
l
l
l呈指数的关系的,如上图。举例来说,对于长度为3的匿名随机游走,它的数目为5。即
w
1
=
111
,
w
2
=
112
,
w
3
=
121
,
w
4
=
122
,
w
5
=
123
w_1 = 111, w_2 = 112, w_3 = 121, w_4 = 122, w_5 = 123
w1=111,w2=112,w3=121,w4=122,w5=123,整个数目的上界为n!,比如说长度为3的随机游走,第一个位置只能取0,第二个位置可以取1,可以取2,第三个位置可以取1,2,3,但是由于index的自增性质,因此不可能出现1,1,3(只能是1,1,2),因此会比n!少。但为什么是指数增长,还没有想通。
对于上面这个例子还有一个比较困惑的地方,按理不应该存在1,1,1这样的情况,因为随机游走难道还能自己走向自己吗?同理1,1,2以及1,2,2也不能理解。后面我领悟到了,这算的是有向图,即可以存在自己指向自己的情况。
长度为
l
l
l的匿名随机游走,可以产生
η
\eta
η 种类型的pattern,对于一个节点
u
u
u而言,我们可以统计出每种pattern出现的概率或者频数(类似于前两张所提到的graphlet, DGV),然后作为表征节点
u
u
u的一个向量
A
l
u
=
(
a
1
u
,
a
2
u
,
.
.
.
,
a
η
u
)
A_l^u = (a_1^u, a_2^u,..., a_{\eta}^u)
Alu=(a1u,a2u,...,aηu)。至于这个概率
p
(
a
i
u
)
p(a_i^u)
p(aiu)的计算方式可以是第i种pattern出现的频数/总共所有pattern出现的频次数目,或者对于加权图,可以引入边的weights来计算。那么泛化到整个网络而言,网络的特征就可以用
p
a
i
=
1
N
∑
u
∈
G
∑
p
(
w
)
w
∈
W
l
u
∈
G
,
w
↦
a
i
p_{a_i} = \frac{1}{N} \underset{u\in G}{\sum} \underset{w \in W_l^u\in G, w \mapsto a_i}{\sum p(w)}
pai=N1u∈G∑w∈Wlu∈G,w↦ai∑p(w)
其中
N
N
N是网络的节点数目,
p
(
a
i
)
p(a_i)
p(ai)是对应pattern i的分量。即得到与之前WL或者Graphlet kernel等类似的kernel的特征来表征这个图。
那么随机而来的一个问题,就和之前Graphlet kernel一样,计算量极大。真整个anonymous walk embedding的算法时间复杂度为
o
(
n
l
(
d
i
n
m
a
x
(
v
)
.
d
o
u
t
m
a
x
)
)
l
/
2
o(nl(d_{in}^{max}(v).d_{out}^{max}))^{l / 2}
o(nl(dinmax(v).doutmax))l/2。
这儿涉及到一个定理,(Tubig, 2012)
k
l
2
<
=
(
∑
u
∈
G
d
i
n
l
)
(
∑
u
∈
G
d
o
u
t
l
)
k_l^2 <=( \underset{u \in G}{\sum} d_{in}^{l})( \underset{u \in G}{\sum} d_{out}^{l})
kl2<=(u∈G∑dinl)(u∈G∑doutl)
因此随机游走的数目最多为
n
.
(
d
i
n
m
a
x
(
v
)
.
d
o
u
t
m
a
x
(
v
)
)
l
/
2
n.(d_{in}^{max}(v).d_{out}^{max}(v))^{l/2}
n.(dinmax(v).doutmax(v))l/2,其中
d
i
n
/
o
u
t
m
a
x
d_{in/out}^{max}
din/outmax是graph里面的最大入度和出度。还需要o(l)的时间复杂度来进行random walk到anonymous walk的映射。
因此,这儿也采用了采样的方式,即不完全计算所有的匿名游走路径,而是通过采样一定数目的路径来近似真实的分布,即随机抽取m条随机游走路径,为了保证采样的分布和真实的分布以一定的置信度近似,因此m往往取得足够的大。具体而言,如果让
A
l
=
(
a
1
,
a
2
,
.
.
.
,
a
η
)
A_l = (a_1, a_2, ..., a_{\eta})
Al=(a1,a2,...,aη)为路径为
l
l
l得匿名游走的集合,因此两个离散分布的差,可以形式化用L1距离表示为
∥
P
−
Q
∥
1
=
∑
a
i
∈
A
∣
P
(
a
i
)
−
Q
(
a
i
)
∣
\lVert P - Q \rVert_1 = \underset{a_i \in A}{\sum} \lvert P(a_i) - Q(a_i) \rvert
∥P−Q∥1=ai∈A∑∣P(ai)−Q(ai)∣
对于grpah
G
G
G 我们让
D
l
D_l
Dl为
A
l
A_l
Al的真实分布,然后我们让
X
m
=
(
X
1
,
X
2
,
.
.
.
,
X
m
)
X^m = (X_1, X_2, ..., X_m)
Xm=(X1,X2,...,Xm)为从真实分布独立同分布地采样的m个样本,那么采样的分布表示为
D
m
D^m
Dm,其表示为:
D
m
(
i
)
=
1
m
∑
[
X
j
=
a
i
]
X
j
∈
X
m
D^m(i) = \frac{1}{m} \underset {X_j \in X^m}{\sum [ X_j = a_i ]}
Dm(i)=m1Xj∈Xm∑[Xj=ai]
其中
[
x
]
=
1
[x] = 1
[x]=1 if x is true and 0 otherwise. 虽然看起来复杂,其实就是一个统计
a
i
a_i
ai出现的频率当作此时
i
i
i位置的分布分量。
然后对于任意的
ϵ
>
0
\epsilon > 0
ϵ>0 and
δ
∈
[
0
,
1
]
\delta \in [0,1]
δ∈[0,1], 采样的数目
m
m
m必满足
P
{
∥
D
m
−
D
l
∥
1
>
=
ϵ
}
<
=
δ
P\{\lVert D^m - D_l \rVert _1 >= \epsilon \}<= \delta
P{∥Dm−Dl∥1>=ϵ}<=δ,推导得到:
m
=
⌈
2
ϵ
2
(
l
o
g
(
2
η
−
2
)
)
−
l
o
g
(
δ
)
⌉
m = \lceil \frac{2}{\epsilon ^2}(log(2^\eta - 2)) - log (\delta) \rceil
m=⌈ϵ22(log(2η−2))−log(δ)⌉
举例来说,如果长度为
l
l
l,那么pattern数目
η
=
877
\eta = 877
η=877,如果我们取
ϵ
=
0.5
\epsilon = 0.5
ϵ=0.5 以及
δ
=
0.05
\delta = 0.05
δ=0.05,那么得到的
m
=
4888
m = 4888
m=4888,如果
ϵ
=
0.1
\epsilon = 0.1
ϵ=0.1 以及
δ
=
0.01
\delta = 0.01
δ=0.01,那么采样的数目就会增加到122500. 即采样的数目m与
ϵ
\epsilon
ϵ呈反比,与
δ
\delta
δ也呈现反比。具体上面的证明,可以看一下引用的论文,这儿一个直观的理解就是,如果采样数目m越大,那么越接近真实的分布,即真实分布与采样分布之间的差会更小,因此可以让上面的约束更加严格,即
ϵ
\epsilon
ϵ和
δ
\delta
δ都取更小的值。如果保持
ϵ
\epsilon
ϵ不变,那么当增大
δ
\delta
δ的值时,意味着对条件放松,那么我们少采样一些样本,即m减少也是可以的满足约束。
上面的方法类似于graph kernel的方式,即一种feature-based model,下面介绍的是一种data-driven model,即直接来学习这样一种graph以及anonymous walk的embedding。
这儿又是借鉴了NlP的思想,将一条anonymouse walk当作一个单词word,而将整个graph当作一篇document,而从相同节点随机采样得到的一系列anonymous walks视作co-occurring words的集合。因此,对于每一个节点
u
u
u,我们可以采样
T
T
T给random walks,然后把它们映射为anonymous random walks, 然后得到整个graph的各个节点的arw集合,即可以视作得到了一系列在document里面的句子的集合。因此对于一个匿名游走的矩阵
W
W
W,它的维度为
η
×
d
a
\eta \times d_a
η×da,其中
d
a
d_a
da是anonymous random walk特征的维度,然后我们训练这样一个模型,它的输入的co-occurring context anonymous walk以及整个graph的表征,我们要预测一个目标anonymous walk。
即损失函数如上,其中
Δ
\Delta
Δ是窗口的大小,即对于目标词而言,它上下文词的数量。
最大似然估计表示如上,其中概率的计算用到了softmax,其中分子的计算,即用窗口
Δ
\Delta
Δ个anonymous random walk的向量的平均值 然后与整个graph的向量
z
G
z_G
zG进行拼接,然后优化的参数为
U
∈
R
d
a
+
d
g
U \in R^{d_a + d_g}
U∈Rda+dg 以及
b
∈
R
b \in R
b∈R,经过这个线性层,可以得到未归一化的概率得分,同理因为完全的softmax分母的计算量极大,因此也用到了negative sampling的技术。而整个graph的向量,在不同(context, target)的pair中都在共享。
因此这个模型重复如下的操作,实现训练:
【1】对于采样得到的co-occured anonymous walks,模型根据上述公式计算损失
【2】通过梯度反向传播,模型更新context walks在W中的表征,以及整个graph的表征
当然在后续的章节,也会介绍这种层次化的embedding方式,即根据不同的聚集簇来获取整个graph的表征。