Node Embedding
lecture2中介绍的是一些传统的feature engineering,这节课所介绍的是更加高效、task-independent的node embedding,类似于word2vec。lecture中主要介绍了两种比较流行的方法:DeepWalk和Node2Vec
Encoder-Decoder Framework
Node Embedding遵循的还是一种Encoder-Decoder的模式。Encoder负责将原来的node映射到embedding space,decoder负责将node embedding映射到similarity score,而我们的目标是最小化这个score与原来node之间的similarity(待定义)来优化encoder中的参数。因此,Node Embedding中的Encoder-Decoder架构主要有四个部分:
- Encoder maps from nodes to embedding space
- Define a node similarity (i.e., a similarity function to measure similarity of nodes in the original network)
- Decoder maps from embedding space to similarity score
- Optimize the parameter to minimize: ∣ s i m i l a r i t y ( u , v ) − D E C ( z u , z v ) ∣ |similarity(u,v)\ -\ DEC(z_u, z_v)| ∣similarity(u,v) − DEC(zu,zv)∣
DeepWalk
一种embedding的方法是DeepWalk,DeepWalk的主要方法Random Walk。在Encoder-Decoder模式中我们提到我们需要定义original network中结点之间的similarity,而Random Walk就是一种度量结点之间相似度的方法。
Random Walk
随机游走的定义是:给定图 G G G,从某个结点 u u u出发,我们在每一步随机地选择邻居节点并移动,于是我们就能得到一个结点序列,我们就称这个序列叫做一个random walk。
我们认为在同一个random walk上的结点相似度是比较高的。random walk有两个优点:
- expressivity:随机游走通过随机选取neighbor来移动,能够比较好的捕获局部和更高阶的neighborhood信息,能够使得embedding的表达能力比较强。
- efficiency:我们不需要考虑图中任意两个结点,只需要考虑在random walk中同时出现的pair即可,极大的节省了计算的消耗。
Objective Function
DeepWalk目标函数的设计与SkipGram有相似之处。SkipGram是通过中心词来预测周围词,优化的目标的极大似然函数。而在DeepWalk中,我们令
p
R
(
v
∣
u
)
p_{R}(v|u)
pR(v∣u)表示从结点
u
u
u出发采用随机游走策略
R
R
R,
v
v
v和
u
u
u同时出现在
R
R
R上的概率。简言之,就是用当前结点
u
u
u来预测其邻居
N
R
(
u
)
N_R(u)
NR(u)。我们希望的是对于相似的两个结点
u
、
v
u、v
u、v,
p
(
v
∣
u
)
p(v|u)
p(v∣u)应该尽可能大,并且认为
N
R
(
u
)
N_R(u)
NR(u)中的结点相互之间是独立的(独立性假设),那么对于整张图的目标函数就是:
m
a
x
i
m
i
z
e
∑
u
∈
V
p
(
N
R
(
u
)
∣
u
)
=
∑
u
∈
V
∏
v
∈
N
(
u
)
p
(
v
∣
u
)
maximize\ \ \ \ \ \ \ \ \sum_{u \in V}p(N_R(u)|u)\ =\ \sum_{u \in V} \prod_{v \in N(u)} p(v|u)
maximize u∈V∑p(NR(u)∣u) = u∈V∑v∈N(u)∏p(v∣u)
我们使用极大似然估计,然后取反就得到:
m
i
n
i
m
i
z
e
−
∑
u
∈
V
∑
v
∈
N
(
u
)
l
o
g
(
p
(
v
∣
u
)
)
minimize\ \ \ \ \ \ \ \ -\sum_{u \in V}\sum_{v \in N(u)} log(p(v|u))
minimize −u∈V∑v∈N(u)∑log(p(v∣u))
下面来看如何计算
p
(
v
∣
u
)
p(v|u)
p(v∣u)。我们令
z
u
z_u
zu表示结点
u
u
u的embedding,用
z
u
⋅
z
v
z_u \cdot z_v
zu⋅zv来计算embedding space中两个结点
u
u
u和
v
v
v的相似程度(余弦相似度)。我们说在同一个random walk中出现的两个结点可以被认为是相似程度比较大的,因此
p
(
v
∣
u
)
p(v|u)
p(v∣u)也可以被看作是原图中
u
、
v
u、v
u、v相似的概率,我们在Encoder-Decoder模式中提到我们的目标是最小化原图中相似度与embedding space中相似度之间的差距,于是
p
(
v
∣
u
)
p(v|u)
p(v∣u)就可以用softmax来计算:
p
(
v
∣
u
)
=
e
x
p
(
z
u
⋅
z
v
)
∑
v
′
∈
N
(
u
)
e
x
p
(
z
u
⋅
z
v
′
)
p(v|u)\ =\ \frac{exp(z_u \cdot z_v)}{\sum_{v' \in N(u)}{exp(z_u \cdot z_{v'})}}
p(v∣u) = ∑v′∈N(u)exp(zu⋅zv′)exp(zu⋅zv)
那么目标函数就可以改写为:
m
i
n
i
m
i
z
e
−
∑
u
∈
V
∑
v
∈
N
(
u
)
l
o
g
(
e
x
p
(
z
u
⋅
z
v
)
∑
v
′
∈
N
(
u
)
e
x
p
(
z
u
⋅
z
v
′
)
)
minimize\ \ \ \ \ \ \ \ -\sum_{u \in V}\sum_{v \in N(u)} log(\frac{exp(z_u \cdot z_v)}{\sum_{v' \in N(u)}{exp(z_u \cdot z_{v'})}})
minimize −u∈V∑v∈N(u)∑log(∑v′∈N(u)exp(zu⋅zv′)exp(zu⋅zv))
也就是:
m
i
n
i
m
i
z
e
−
∑
u
∈
V
∑
v
∈
N
(
u
)
z
u
⋅
z
v
−
l
o
g
(
∑
v
′
∈
N
(
u
)
e
x
p
(
z
u
⋅
z
v
′
)
)
minimize\ \ \ \ \ \ \ \ -\sum_{u \in V}\sum_{v \in N(u)} z_u \cdot z_v\ -\ log(\sum_{v' \in N(u)}{exp(z_u \cdot z_{v'})})
minimize −u∈V∑v∈N(u)∑zu⋅zv − log(v′∈N(u)∑exp(zu⋅zv′))
这是一个凸函数,因此我们可以采用梯度下降来进行优化
Negative Sampling
上面的式子有一个问题,就是后面的log归一化项计算成本比较高,复杂度是
O
(
∣
V
∣
)
O(|V|)
O(∣V∣)的,因此需要进一步优化这个目标函数。那么这里遇到的问题和解决方案就都和SkipGram相同了,我们采取的策略是负采样。选取
k
k
k个负例,将softmax变成sigmoid,就可以把
l
o
g
p
(
v
∣
u
)
log\ p(v|u)
log p(v∣u)改写为:
l
o
g
p
(
v
∣
u
)
≈
l
o
g
(
σ
(
z
u
⋅
z
v
)
)
−
∑
i
=
1
k
l
o
g
(
σ
(
z
u
⋅
z
v
i
)
)
log\ p(v|u)\ \approx \ log(\sigma({z_u\cdot z_v}))\ -\ \sum_{i=1}^{k}log(\sigma{(z_u \cdot z_{v_i})})
log p(v∣u) ≈ log(σ(zu⋅zv)) − i=1∑klog(σ(zu⋅zvi))
这样一来我们计算的复杂度就可以从
O
(
∣
V
∣
3
)
O(|V|^3)
O(∣V∣3)降到
O
(
k
∣
V
∣
2
)
O(k|V|^2)
O(k∣V∣2)
DeepWalk Procedure
下面来总结一下DeepWalk的整体流程:
- 对于图 G G G中的每个结点 u u u,跑一个fixed-length、unbiased的random walk
- 根据random walk统计每个结点 u u u的neighborhood N ( u ) N(u) N(u)
- 优化似然函数: − ∑ u ∈ V ∑ v ∈ N ( u ) l o g p ( v ∣ u ) -\sum_{u \in V}\sum_{v \in N(u)} {log\ p(v|u)} −∑u∈V∑v∈N(u)log p(v∣u)
Node2vec
DeepWalk采用的是fixed-length、unbiased的random walk,而node2vec在DeepWalk上做了改进,采用的是flexible、biased的random walk,以此来获得更好的neighborhood特征。
2-nd Order Biased Random Walk
对于图中任意结点
u
u
u,我们跑一个长度为
l
l
l的random walk,令
c
i
c_i
ci表示该random walk中第
i
i
i个结点,于是
p
(
c
i
+
1
=
x
∣
c
i
=
v
)
=
{
π
v
x
Z
(
v
,
x
)
∈
E
0
o
t
h
e
r
w
i
s
e
p(c_{i+1}=x|c_{i}=v)\ =\ \begin{cases} \frac{\pi_{vx}}{Z} \ \ \ \ \ (v,x) \in E \\ \ \ 0 \ \ \ \ \ \ \ otherwise \end{cases}
p(ci+1=x∣ci=v) = {Zπvx (v,x)∈E 0 otherwise
这里
π
v
x
\pi_{vx}
πvx表示没有归一化的概率。如果是无偏的,那么
π
v
x
=
w
v
x
=
1
\pi_{vx}\ =\ w_{vx}\ =\ 1
πvx = wvx = 1,而node2vec是有偏的random walk,因此我们定义2-nd order biased random walk with 2 parameters
p
,
q
p, q
p,q,令
π
v
x
=
α
p
q
(
t
,
x
)
⋅
w
v
x
\pi_{vx}\ =\ \alpha_{pq}(t,x) \cdot w_{vx}
πvx = αpq(t,x)⋅wvx,这里的
α
p
q
\alpha_{pq}
αpq就是权重,计算公式为:
α
p
q
(
t
,
x
)
=
{
1
/
p
d
t
x
=
0
1
d
t
x
=
1
1
/
q
d
t
x
=
2
\alpha_{pq}(t,x)\ =\ \begin{cases} 1/p \ \ \ \ \ \ d_{tx}=0 \\ 1 \ \ \ \ \ \ \ \ \ \ d_{tx}=1 \\ 1/q \ \ \ \ \ \ d_{tx}=2 \end{cases}
αpq(t,x) = ⎩⎪⎨⎪⎧1/p dtx=01 dtx=11/q dtx=2
其中
d
t
x
d_{tx}
dtx表示结点
t
t
t和结点
x
x
x之间的最短路长度。我们发现突然又多了一个结点
t
t
t,其实这个结点
t
t
t是与
v
v
v相连的,可以看作是random walk中第
i
−
1
i-1
i−1个结点,不难看出我们每次是考虑random walk中连续的三个结点,这也就是为什么我们叫做second order(2-nd Markovian Chain)。下图说明了这里的有偏random walk的权重是怎么定义的
Return Parameter
我们称 p p p为return parameter。从上面的公式也能明白, d t x = 0 d_{tx}=0 dtx=0也就是我们从结点 v v v走回了结点 t t t。当 p p p比较大时,我们走回结点 t t t的概率比较小,当 p p p比较小时,我们有更大的概率走回 t t t。
In-Out Parameter
我们称 q q q为in-out parameter,in和out分别对应着 q > 1 q \gt 1 q>1和 q < 1 q \lt 1 q<1的情况。当 q > 1 q \gt 1 q>1, 1 / q < 1 1/q\ \lt\ 1 1/q < 1,我们自然会更倾向于走 d t x = 1 d_{tx}=1 dtx=1的结点,也就是上图中的 x 1 x_1 x1,这类结点的共性就是它们都是直接与结点 t t t相连的结点,我们可以通过BFS来获得;当 q < 1 q \lt 1 q<1, 1 / q > 1 1/q \gt 1 1/q>1,我们会更倾向于走 d t x = 2 d_{tx}=2 dtx=2的结点,也就是上图中的 x 2 , x 3 x_2,x_3 x2,x3,这类结点的共性就是它们都是进一步远离结点 t t t,我们可以通过DFS来获得。
到这里就清楚了,我们的biased其实就是通过灵活的在BFS和DFS之间切换来实现的,BFS可以帮助我们捕获local信息,DFS可以帮助我们捕获global信息。如果想要BFS like,那就采用lower p,higher q;如果想要DFS like,那就采用higher p,lower q。