node2vec: Scalable Feature Learning for Networks 阅读笔记

node2vec: Scalable Feature Learning for Networks 阅读笔记

转载请注明出处:All Minable团队的搬砖日常

论文来源:KDD 2016

论文链接:kdd.org/kdd2016/papers/


Abstract

现有的特征学习方法没有能够捕捉到网络连接的多样性模式,所以作者提出了node2vec算法,一个学习网络节点连续空间表示的框架。


Introduction

对于网络的表示学习可以有许多用途,例如节点分类(社区挖掘)和连接预测等。


要学习网络特征,一种学习特征表达的方法是通过定义目标函数然后解决优化问题。但是现有的技术要不就是需要大量训练和运算花费,要不就是效果太差。


一个解决的方向是通过局部的邻居关系来制定目标函数,同时这个目标函数可用随机梯度下降(SGD)来解决。这样就不用训练同时运算快速。


一个灵活的节点表示学习算法需要具备两个条件:

1. 能够将相同网络社区的节点映射到相近的位置

2. 对于扮演相似角色的节点有相似的映射方式


本篇文章的四个主要贡献:

1. 提出node2vec算法,基于邻居留存的特征学习优化算法,使用SGD,计算高效,拓展性强

2. 展示了node2vec符合网络科学的原则

3. 基于邻居留存目标,拓展了node2vec和其他的特征学习方法,从节点到节点对

4. 在真实数据集上测试了node2vec进行多分类和连接预测的性能


Related work

之前的关于特征工程的研究,总的来说存在以下问题:

1. 我们需要先人工定义一些特征出来,然后再进行学习

2. 对于非监督特征学习,之前大多使用的是谱特征进行学习,这样的学习存在计算复杂度高和效果不理想的缺点

3. 对于不同模型下的网络,这些方法往往鲁棒性不够


最近NLP领域的skip-gram算法给了许多网络特征表示研究一些相关的启发:skip-gram大概就是用文本中的一个单词来预测上下文单词,并假设每一个单词都跟它的上下文单词是相似的。


Algorithm

这篇论文主要是以skip-gram的算法为基础的,skip-gram是nlp的一个算法,大概是用某个单词求解上下文概率。基于类似的出发点,本文也提出了一个类似的目标函数:

\[\max\limits_{f} \sum_{u \in V}{\log{Pr(N_S(u)|f(u))}}\]

其中, f 是节点到特征表达的映射函数 V \xrightarrow[]{} R^d , d 为表达空间维度。 N_S(u) \subset V 是节点 u 的网络邻居,通过邻居节点采样方法 S 采到的。


为了简化,作者又增加了条件独立和空间对称假设,所以有了以下公式:

\[ Pr(N_S(u)|f(u)) = \prod_{n_i \in N_S(u)}{Pr(n_i | f(u))} \]

\[Pr(n_i | f(u)) = \frac{\exp((f(n_i) \cdot f(u))}{\sum_{v\in V}{\exp(f(v) \cdot f(u))}}\]


将上面的公式进行简化,可得到:

\[\max\limits_{f} \sum_{u \in V}[{-\log{Z_u} + \sum_{n_i \in N_S(u)}{f(n_i) \cdot f(u)}]}\]

其中, Z_u = \sum_{v \in V}{\exp(f(u) \cdot f(v))} ,至此,最后一个公式就是本次我们要求的目标函数,在实现中,我们使用随机梯度下降法(SGD)来进行求解。


以下是个人的一些理解,不一定正确:


上述公式介绍了一个从制定目标函数到增加一些假设并简化目标函数的过程,对于目标函数的理解,大概就是尽可能找到一个映射函数 f ,使得映射后邻居关系保持的概率越大越好。这个就像是NLP中对于一个词的映射,使得映射后与上下文的关系保持的概率越大越好。


这时就涉及到网络分析与NLP的一个不同,那就是顺序性,语料天然具有顺序性,而网络没有,那么,该如何生成有顺序的节点序列成了一个重要的问题。作者的方法是使用随机游走策略来生成节点序列,这样既有顺序性,又考虑了节点的邻居关系。而本文作者所采用的随机游走是比较有创新的地方。


随机游走

对于随机游走,一般的做法是直接用边的权重来转化成概率,本文作者在权重之前乘上一个系数 \alpha ,从而在一定程度上调节随机游走的走向。假设已知游走路径已从 t \xrightarrow[]{} v ,示意图如下:

那么,在本文的随机游走中,作者定义了 pq 两个参数变量来调节游走,现在游走到节点 v ,首先计算其邻居节点与上一节点 t 的距离 d ,从而得到 \alpha :

\[ \alpha=\left\{ \begin{aligned} \frac{1}{p}&, d = 0 \\ 1& , d = 1 \\ \frac{1}{q}& , d = 2 \end{aligned} \right. \]

通过调节参数 pq ,可以控制随机游走的方向,两个极端的方向就是BFS和DFS,也就是一直在节点 t 旁边绕或者一直往外面走,这样就能做到一个比较灵活的调节。


最后贴一波伪代码:


总结

network embedding是网络分析的一个方向,这几年出的文章也比较多。作者能够结合NLP领域的算法,加以修改并引入到网络分析中,很值得学习,同时提出了自己的随机游走策略,值得一读。

编辑于 2017-10-31

文章被以下专栏收录