[kdd2016] node2vec: Scalable Feature Learning for Networks
node2vec的核心在于得到从每一个节点
u
u
u出发,定长
l
l
l的随机游走序列集合,进而得到每个节点的“新邻居”,然后用word2vec的思想来学习更新每一个节点的表示向量。
目标:
\textbf{目标:}
目标:假定一个随机游走序列
→
t
→
v
→
\rightarrow t\rightarrow v\rightarrow
→t→v→ 刚从
t
t
t到
v
v
v,如何找到
v
v
v的下一步?
对于节点
v
v
v来说,它下一步的概率是基于它的前一个节点
t
t
t和它的下一步节点
x
x
x的关系决定的。其中,
x
x
x也可能是
t
t
t,因为对于无向图来说,
t
t
t也是
v
v
v的邻居。
定义
d
t
x
d_{tx}
dtx,表示
v
v
v的前一个节点
t
t
t和下一个节点
x
x
x之间的最短路径长度,
d
t
x
=
{
0
,
1
,
2
}
d_{tx}=\{0,1,2\}
dtx={0,1,2},即所谓的二阶。如图,
- 当 v v v的下一步就是 t t t,即 d t x = 0 d_{tx}=0 dtx=0, v → x v\rightarrow x v→x的搜索偏差(search biases) α = 1 / p \alpha=1/p α=1/p;
- 当 v v v的下一步 x x x也是 t t t的邻居,即 d t x = 1 d_{tx}=1 dtx=1, v → x v\rightarrow x v→x的搜索偏差 α = 1 \alpha=1 α=1;
- 当 v v v的下一步 x x x不是 t t t的邻居,即 d t x = 2 d_{tx}=2 dtx=2, v → x v\rightarrow x v→x的搜索偏差 α = 1 / q \alpha=1/q α=1/q。
其中, q q q为前进参数(In-Out parameter),若 q > 1 q>1 q>1, 则到达 v v v之后的下一步会更接近 t t t(BFS);反之会远离 t t t (DFS)。 p p p为回溯参数(return parameter),决定有多大的概率会回到上一个节点,若 p > m a x ( q , 1 ) p>max(q,1) p>max(q,1),则会使游走尽可能不回溯;若 p < m i n ( q , 1 ) p<min(q,1) p<min(q,1),则使整个游走最终接近链路的起始节点。
这样就算出了该游走从
t
t
t到达
v
v
v之后,下一步要到达节点
x
x
x的搜索偏差
α
\alpha
α。若每条路径对应的有初始权重
w
v
x
w_{vx}
wvx(没有则默认为1),则对前面得到的每条路径的搜索偏差
α
\alpha
α乘上对应的权重,即
v
→
x
v\rightarrow x
v→x的概率为
π
v
x
=
α
w
v
x
\pi_{vx}=\alpha w_{vx}
πvx=αwvx。接着对节点
v
v
v到达的所有的下一个节点的路径概率
π
v
.
\pi_{v.}
πv.归一化,然后采用Alias采样可以得到下一步到达的节点
x
x
x。(其中,Alias采样只是让采样更快
O
(
1
)
O(1)
O(1),不会对结果造成影响)