论文标题 | node2vec:Scalable Feature Learning for Networks
论文来源 | KDD 2016
论文链接 | node2vec: Scalable Feature Learning for Networks
源码链接 | https://github.com/aditya-grover/node2vec

TL; DR

前面介绍过基于 DFS 邻域的 DeepWalk 和基于 BFS 邻域的 LINE。node2vec 是一种综合考虑 DFS 邻域和 BFS 邻域的 graph embedding 方法。简单来说,可以看作是 deepwalk 的一种扩展,是结合了 DFS 和 BFS 随机游走的 deepwalk。

Model/Algorithm

优化目标

f(u)f(u) 是将顶点uu 映射为 embedding 向量的映射函数,对于图中每个顶点uu,定义NS(u)N_S(u) 为通过采样策略SS 采样出的顶点uu 的近邻顶点集合。

node2vec 优化的目标是给定每个顶点条件下,令其近邻顶点(如何定义近邻顶点很重要)出现的概率最大。公式如下所示:

maxfuVlogPr(NS(u)f(u))\max _{f} \sum_{u \in V} \log \operatorname{Pr}\left(N_{S}(u) | f(u)\right)

为了将上述最优化问题可解,文章提出两个假设:

  • 条件独立性假设:假设给定源顶点下,其近邻顶点出现的概率与近邻集合中其余顶点无关。

Pr(NS(u)f(u))=niNS(u)Pr(nif(u))\operatorname{Pr}\left(N_{S}(u) | f(u)\right)=\prod_{n_{i} \in N_{S}(u)} \operatorname{Pr}\left(n_{i} | f(u)\right)

  • 特征空间对称性假设:指一个顶点作为源顶点和作为近邻顶点的时候共享同一套 embedding 向量。(对比 LINE 中的 2 阶相似度,一个顶点作为源点和近邻点的时候是拥有不同的 embedding 向量的) 在这个假设下,上述条件概率公式可表示为

Pr(nif(u))=exp(f(ni)f(u))vVexp(f(v)f(u))\operatorname{Pr}\left(n_{i} | f(u)\right)=\frac{\exp \left(f\left(n_{i}\right) \cdot f(u)\right)}{\sum_{v \in V} \exp (f(v) \cdot f(u))}

根据以上两个假设条件,最终的目标函数表示为

maxfuV[logZu+niNS(u)f(ni)f(u)]\max _{f} \sum_{u \in V}\left[-\log Z_{u}+\sum_{n_{i} \in N_{S}(u)} f\left(n_{i}\right) \cdot f(u)\right]

由于归一化因子Zu=vVexp(f(u)f(v))Z_{u}=\sum_{v \in V} \exp (f(u) \cdot f(v)) 的计算代价高,所以采用负采样技术优化。

顶点序列采样策略

node2vec 依然采用随机游走的方式获取顶点的近邻序列,不同的是 node2vec 采用的是一种有偏的随机游走。

给定当前顶点vv ,访问下一个顶点xx 的概率为

P(ci=xci1=v)={πvxz if (v,x)E0 otherwise P\left(c_{i}=x | c_{i-1}=v\right)=\left\{\begin{array}{ll}{\frac{\pi_{v x}}{z}} & {\text { if }(v, x) \in E} \\ {0} & {\text { otherwise }}\end{array}\right.

其中πvx\pi_{vx} 是顶点vv 和顶点xx 之间的未归一化转移概率,ZZ 是归一化常数。

计算转移概率πvx\pi_{v x}最简单的想法就是基于wvxw_{vx},但是这种想法没有考虑到网络的结构特性来研究不同类型的网络邻居节点。基于 BFS 和 DFS 的游走策略适用于不同的 structural equivalence and homophily。

因此,node2vec 引入两个超参数ppqq 来控制随机游走的策略,同时考虑到了 BFS 和 DFS 游走策略。假设当前随机游走经过边(t,v)(t,v) 到达顶点vv。 设πvx=αpq(t,x)wvx\pi_{v x}=\alpha_{p q}(t, x) \cdot w_{v x}wvxw_{vx} 是顶点vvxx 之间的边权,

αpq(t,x)={1p if dtx=01 if dtx=11q if dtx=2\alpha_{p q}(t, x)=\left\{\begin{array}{ll}{\frac{1}{p}} & {\text { if } d_{t x}=0} \\ {1} & {\text { if } d_{t x}=1} \\ {\frac{1}{q}} & {\text { if } d_{t x}=2}\end{array}\right.

dtxd_{tx} 为顶点tt 和顶点xx 之间的最短路径距离。

下面讨论超参数ppqq 对游走策略的影响:

  • Return parameterpp
    参数pp 控制重复访问刚刚访问过的顶点的概率。 注意到pp 仅作用于dtx=0d_{tx}=0 的情况,而dtx=0d_{tx}=0 表示顶点xx 就是访问当前顶点vv 之前刚刚访问过的顶点。 那么若pp 较高,则访问刚刚访问过的顶点的概率会变低,反之变高。

  • In-out papameterqq
    qq 控制着游走是向外还是向内,若q>1q>1 ,随机游走倾向于访问和tt 接近的顶点(偏向 BFS)。若q<1q<1 ,倾向于访问远离tt 的顶点(偏向 DFS)。

下面的图描述的是当从tt 访问到vv 时,决定下一个访问顶点时每个顶点对应的α\alpha​ 。

学习算法

采样完顶点序列后,剩下的步骤就和 deepwalk 一样了,用 word2vec 去学习顶点的 embedding 向量。 值得注意的是 node2vecWalk 中不再是随机抽取邻接点,而是按概率抽取,node2vec 采用了 Alias 算法进行顶点采样。

整体算法流程如下所示:

Experiments

网络的“同质性”(homophily)指的是距离相近节点的 embedding 应该尽量近似;
“结构性”(structural equivalence)指的是结构上相似的节点的 embedding 应该尽量接近;
可视化网络的同质性和结构对等性:

在不同图数据集上结果如下所示:

Thoughts

到底是宽度优先搜索(BFS)更能体现“结构性”,还是深度优先搜索(DFS)更能体现“结构性”呢?
问题参考

联系作者