论文|Node2vec算法原理代码实战和在微信朋友圈的应用

Posted Thinkgamer_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文|Node2vec算法原理代码实战和在微信朋友圈的应用相关的知识,希望对你有一定的参考价值。

1 概述

Node2vec是2016年斯坦福教授 Jure Leskovec、Aditya Grover提出的论文,论文的下载链接为:https://arxiv.org/pdf/1607.00653.pdf。

其本质上是对Deepwalk的延伸,也是属于图神经网络种随机游走模型一类。不了解Deepwalk的可以看上一篇文章:论文|DeepWalk的算法原理、代码实现和应用说明

Node2vec在DeepWalk的基础上提出了更加合理的图特征学习方法,提出了用于网络中可伸缩特征学习的半监督算法,使用SGD优化一个自定义的基于图的目标函数,该方法可以最大化的在D维特征空间保留节点的网络领域信息;在随机游走的基础上设计了一种二阶随机游走的过程,相当于对DeepWalk算法的一种扩展,它保留了邻居节点的图特征。

2 算法原理

2.1 学习框架

论文中将网络中的特征学习问题看作是一个极大似然优化问题,设 G = ( V , E ) G=(V,E) G=(V,E)为给定的网络, f : V ⇒ R d f: V \\Rightarrow \\mathbb{R}^d f:VRd 为节点到特征表征的映射函数,我们的目标是学习一个后续节点的预测任务,这里的 d d d 表示的是节点的表征向量维度, f f f 是一个 ∣ V ∣ ∗ d |V| * d Vd 的矩阵,同时为每个源节点 u ∈ V u \\in V uV,定义 N s ( u ) ⊂ V N_s(u) \\subset V Ns(u)V 的网络邻居节点的社区抽样策略。

节点的表征学习目标函数为最大化节点 u u u 的网络观测邻域 N s ( u ) N_s(u) Ns(u)
m a x   f ∑ u ∈ V   l o g   P r ( N s ( u ) ∣ f ( u ) ) max \\, f \\sum u \\in V \\, log \\, Pr(N_s(u)|f(u)) maxfuVlogPr(Ns(u)f(u))
但是基于上面的目标函数进行优化,是比较困难的,因此作者做了两点假设:

  • 条件独立性假设:即假设结点间相互独立,简单来说就是,对于某一个源结点,其采用到的邻居结点是独立的,采用其中一个邻居结点不会对其他邻居结点造成影响
    Pr ⁡ ( N S ( u ) ∣ f ( u ) ) = ∏ n i ∈ N S ( u ) Pr ⁡ ( n i ∣ f ( 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) Pr(NS(u)f(u))=niNS(u)Pr(nif(u))

  • 特征空间对称假设:源结点和邻居结点的特征空间有一个对称性影响。简单来说就是,一个源结点和其某一个邻居结点有关系,那么对于这个邻居结点来说,这个源结点也是其邻居结点,影响是相互的
    Pr ⁡ ( n i ∣ f ( u ) ) = exp ⁡ ( f ( n i ) ⋅ f ( u ) ) ∑ v ∈ V exp ⁡ ( 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))} Pr(nif(u))=vVexp(f(v)f(u))exp(f(ni)f(u))

根据以上两个假设,最终目标函数 f f f 可以优化为以下形式:
max ⁡ f ∑ u ∈ V [ − log ⁡ Z u + ∑ n i ∈ N S ( u ) f ( n i ) ⋅ 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] maxfuVlogZu+niNS(u)f(ni)f(u)
由于归一化因子 Z u = ∑ v ∈ V exp ⁡ ( f ( u ) ⋅ f ( v ) ) Z_{u}=\\sum_{v \\in V} \\exp (f(u) \\cdot f(v)) Zu=vVexp(f(u)f(v)),对于大型网络来说,计算成本很高,所以采用负采样技术进行优化,在定义特征函数 f f f 模型参数上,采用随机梯度上升法对公式最终的目标函数进行优化。

2.2 搜索策略

可以将采样源节点邻域问题视为一种网络局部搜索问题,所熟知的无非就是广度优先遍历(BFS)和深度优先遍历(DFS),广度优先更容易采样邻居节点,从而获得每个节点邻居的微观视图,这更容易表示结构的相似性,比如限制一个 k = 3 k=3 k=3 邻居域,节点 u u u 的BFS就会对 s 1 , s 2 , s 3 s1,s2,s3 s1,s2,s3 采样,广度优先遍历采样邻居节点往往重复对此采样,这有利于减少偏差。对深度优先遍历来说,它尽可能深的遍历网络,采样节点更准确的反映了邻居节点的宏观情况,这更容易表示内容相似性,即验证同质性假设,而 u u u 使用DFS就会对 s 4 , s 5 , s 6 s4,s5,s6 s4,s5,s6 进行采样。

node2vec的dfs和bfs搜索策略

2.3 Node2vec

a)随机游走策略

作者根据BFS和DFS的思想设计了一种灵活的带有偏重的随机游走策略,使BFS和DFS能够平滑地融入此策略中。

给定一个源节点 u u u,要进行步长为 l l l 的随机游走, c i c_i ci 表示游走序列中第 i i i 个节点 c 0 = u c_0=u c0=u,节点 c i c_i ci 由以下分布产生:
p ( c i = x ∣ c i − 1 = v ) = { π v x Z , i f ( v , x ) ∈ E 0 , o t h e r w i s e p(c_i = x|c_{i-1}=v) = \\left\\{\\begin{matrix} \\frac {\\pi_{vx}} {Z} , if(v,x) \\in E\\\\ 0, otherwise \\end{matrix}\\right. p(ci=xci1=v)={Zπvx,if(v,x)E0,otherwise
其中:

  • π v x \\pi_{vx} πvx 表示从节点 v v v 到 节点 x x x 的转移概率
  • Z Z Z 为归一化常量

定义由参数 p p p 和参数 q q q 引导的二阶随机游走如下:

如图假设随机游走序列由节点 t t t 经过了边 ( t , v ) (t,v) (t,v),现在要决定节点 v v v 的下一步游走方向,所以需要评估出边 ( v , x ) (v,x) (v,x) 上的转移概率 π v x \\pi_{vx} π<

以上是关于论文|Node2vec算法原理代码实战和在微信朋友圈的应用的主要内容,如果未能解决你的问题,请参考以下文章

论文|Node2vec算法原理代码实战和在微信朋友圈的应用

论文|SDNE的算法原理代码实现和在阿里凑单场景中的应用说明

论文|SDNE的算法原理代码实现和在阿里凑单场景中的应用说明

论文|SDNE的算法原理代码实现和在阿里凑单场景中的应用说明

论文|SDNE的算法原理代码实现和在阿里凑单场景中的应用说明

精读论文node2vec