图神经网络——node2vec

    科技2022-07-11  81

    论文地址:https://arxiv.org/pdf/1607.00653.pdf发表会议:KDD2016

    文章目录

    1. 引言2. 采样算法2.1. 传统的采样算法2.2. Node2vec中的采样算法2.3. 使用基于random walk采样的好处(时间空间复杂度分析) 3. node2vec算法流程4.实验5. 总结

    1. 引言

    这篇论文可以说是对DeepWalk的扩展。按照LINE中的说法,DeepWalk只捕捉了节点间的二阶相似性,LINE同时捕捉节点间的一阶相似性和二阶相似性。而Node2Vec也是同时捕捉了一阶相似性和二阶相似性,和LINE不同的是,Node2Vec是基于Random Walk实现的。

    首先介绍两个重要的概念:

    一阶相似性:在Node2Vec中也叫做同质性(homophily)。一阶相似性捕捉的是图中实际存在的结构,比如两个节点由一条边相连,则这两个节点应该具有相似的表示。按照Node2Vec中的说法,高度互连且属于相似网络集群或社区的节点表示应该比较相近。一阶相似性往往可以通过对节点的DFS遍历得到。

    二阶相似性:在Node2Vec中也叫做结构对等性(structural equivalence)。在网络中具有相似结构的节点表示应该相近,它并不强调两个节点是否在图中存在连接,即使两个节点离得很远,但由于结构上相似(连接的邻居节点相似),它们的表示也应该相似。所以二阶相似性可以发现不同的社区。二阶相似性可以通过对节点的BFS遍历得到。

    一阶相似性和二阶相似性的区别可由下图看出: (图1): 其中节点 U U U和节点 S 6 S_6 S6就是属于二阶相似性,可由BFS遍历捕获到; U U U S 1 S_1 S1就属于一阶相似性,可由DFS捕获到。

    注:这里的结论可能与我们理解的相反,即,一阶相似性不应该由BFS得到吗?下面介绍Node2Vec时会给出我自己的一些想法。


    Node2Vec首先借鉴了自然语言处理中的skip-gram算法,给定一个节点,最大化周围邻居节点出现的条件概率: (公式1):

    注:这里 N s ( u ) N_s(u) Ns(u)是节点 u u u的邻居节点,在Node2vec中,邻居节点有着不一样的定义,它不一定是有直接边相连的节点,而是根据采样策略确定的。后面会有详细介绍。

    为了方便优化上式,作者做了两个假设:

    条件独立性假设:即各个邻居节点是互相独立的,所以有: 特征空间的对称性:即一个节点和它的邻居节点之间的影响是相互的,于是也可以对邻居节点进行嵌入表示,然后利用点乘的形式刻画条件概率: 有了以上两点假设,就可以把公式(1)改成以下形式: 公式(2): 其中: 这里我们发现,最终导出的目标函数和LINE中二阶相似性公式很像,实际上两者只相差了一个边的权重 w i j w_{ij} wij。和LINE中一样,计算 Z u Z_u Zu是耗时的,所以作者也采用了负采样的方法。

    注:LINE中对二阶相似性建模的公式:


    写到这里可以发现,以上思想和DeepWalk是非常相似的,都是给定一个节点,最大化邻居节点(一次采样路径上的节点)出现的条件概率,只不过由于计算方式的不同,Node2vec捕捉了二阶相似性,DeepWalk捕捉了一阶相似性?(这里存疑)。DeepWalk到这里核心算法其实已经结束了,它接下来都在介绍如何利用Hierarchical Softmax来优化条件概率的计算。而Node2vec到这里才刚刚开始,它和DeepWalk的最大不同就是如何采样节点,即采样邻居节点 N s ( u ) N_s(u) Ns(u)

    2. 采样算法

    2.1. 传统的采样算法

    传统的采样方法主要分为以下两部分:

    基于BFS,基于广度优先遍历的采样。那么通常 N s ( u ) N_s(u) Ns(u)为节点 u u u的直接邻居,即与 u u u直接相连的节点。比如在图1中,我们设置采样大小 K = 3 K=3 K=3,那么 N s ( u ) N_s(u) Ns(u) s 1 s_1 s1 s 2 s_2 s2 s 3 s_3 s3。基于DFS,基于深度优先遍历的采样。那么采样的节点会离源节点越来越远。比如在图1中,我们设置采样大小 K = 3 K=3 K=3,那么 N s ( u ) N_s(u) Ns(u) s 4 s_4 s4 s 5 s_5 s5 s 6 s_6 s6

    实际上,这两种比较极端的采样方法DFS和BFS对应于前面所说的一阶相似性和二阶相似性,也叫同质性和结构对等性。node2vec就是想通过设计一种采样算法,来融合一阶相似性和二阶相似性。

    2.2. Node2vec中的采样算法

    node2vec中的采样算法是基于random walk的。给定源节点 u u u,采样长度 l l l,假设当前在第 c i − 1 c_{i-1} ci1个采样节点,那么下一个采样节点为 x x x的概率为: 其中 π v x \pi_{vx} πvx为从节点 v v v到节点 x x x的转移概率。 Z Z Z为归一化的常数。

    传统的random walk采样算法是完全随机的,这样就很难刻意让采样过程自动寻找一阶和二阶相似性。为此,作者提出了二阶随机游走(2nd order random walk)。 以上图为例,当前在节点 v v v,并且上一步在节点 t t t,那么对于下一步的转移概率 π v x \pi_{vx} πvx,作者定义 π v x = α p q ( t , x ) ⋅ w v x \pi_{vx}=\alpha_{pq}(t,x)·w_{vx} πvx=αpq(t,x)wvx,其中: 这里 d t x d_{tx} dtx表示了下一步的动作类型, d t x = 0 d_{tx}=0 dtx=0表示返回上一步访问过的节点即 t t t d t x = 1 d_{tx}=1 dtx=1表示访问上一步节点 t t t的下一个邻居节点比如 x 1 x_1 x1,即对节点 t t t进行BFS遍历访问; d t x = 2 d_{tx}=2 dtx=2表示访问更远的节点,即从 v v v出发继续DFS遍历访问。

    而二阶随机游走只需两个参数 p p p q q q就可以完成。 其中 p p p指“返回参数”,它控制着返回已经访问过的节点的概率,如果 p p p比较大( > m a x ( q , 1 ) >max(q,1) >max(q,1)),那么不太可能会再次访问上一个访问过的节点;如果 p p p比较小( < m i n ( q , 1 ) <min(q,1) <min(q,1)),那么很有可能再次访问上一个访问的节点。 q q q指“in-out参数”,它控制着下一步采样是在当前节点周围还是去探索更远的节点,换句话说,是按照BFS采样还是DFS。如果 q > 1 q>1 q>1,则采样倾向于在对 t t t进行BFS采样,可以捕捉图的局部信息;如果 q < 1 q<1 q<1,则采样倾向于对 t t t进行DFS采样,可以捕捉图的全局信息。

    2.3. 使用基于random walk采样的好处(时间空间复杂度分析)

    空间复杂度:因为需要保存每个节点的二阶邻居,所以空间复杂度为 O ( α 2 ∣ V ∣ ) O(\alpha^2|V|) O(α2V),其中 α \alpha α为每个节点的平均度(degree)。 时间复杂度:假设对于长度为 l l l的一次random walk,每个节点需采样的邻居节点数为 k k k,则能为 l − k l-k lk个节点找到他们的邻居节点,那么这一次random walk使用的节点总数就为 k ( l − k ) k(l-k) k(lk)。以图1为例, l = 6 l=6 l=6 k = 3 k=3 k=3时,一次random walk采样到的节点序列为 { u , s 4 , s 5 , s 6 , s 8 , s 9 } \{u,s_4,s_5,s_6,s_8,s_9\} {u,s4,s5,s6,s8,s9},那么产生的邻居节点 N s ( ⋅ ) N_s(·) Ns()为, N s ( u ) = { s 4 , s 5 , s 6 } N_s(u)=\{s_4,s_5,s_6\} Ns(u)={s4,s5,s6} N s ( s 4 ) = { s 5 , s 6 , s 8 } N_s(s_4)=\{s_5,s_6,s_8\} Ns(s4)={s5,s6,s8} N s ( 5 ) = { s 6 , s 8 , s 9 } N_s(5)=\{s_6,s_8,s_9\} Ns(5)={s6,s8,s9},即能为6-3=3个节点找到它们的邻居节点,一次random walk使用的节点总数为3*(6-3)=9。同时一次random walk的时间复杂度为 l l l,那么实际每采样一个节点的平均时间复杂度为 O ( l k ( l − k ) ) O(\frac{l}{k(l-k)}) O(k(lk)l)。由于样本重用(sample reuse),即不同节点的邻居节点有重合,大大降低了时间复杂度。如果没有样本重用,长度为 l l l的一次采样只会采样并利用 l l l个节点。虽然样本重用可能会造成偏差,但是时间复杂度确实提高不少。

    3. node2vec算法流程

    特征学习算法(输入为图 G = ( V , E , W ) G=(V,E,W) G=(V,E,W),节点维度 d d d,每个节点的walk数 r r r(并行),步长 l l l,上下文长度(邻居个数) k k k,返回参数 p p p,in-out参数 q q q)

    首先计算各条边的转移概率 π \pi π将转移概率做为权重后的新图 G ′ = ( V , E , π ) G^{'}=(V,E,\pi) G=(V,E,π)初始化采样路径集合 w a l k s walks walks为空每个节点同时运行 r r r个walk  对于图中每个节点 u u u    利用算法 n o d e 2 v e c W a l k ( G ′ , u , l ) node2vecWalk(G^{'},u,l) node2vecWalk(G,u,l)采样产生一条从节点 u u u开始的路径 w a l k walk walk    将产生的路径加入路径集合 w a l k s walks walks利用随机梯度下降学习节点的表示 f f f返回 f f f

    node2vecWalk算法(输入为图 G ′ = ( V , E , π ) G^{'}=(V,E,\pi) G=(V,E,π),开始节点 u u u,步长 l l l)

    初始化采样序列 w a l k walk walk为节点 [ u ] [u] [u]从1到 l l l开始循环(共采样 l l l个节点)  取出 w a l k walk walk中的当前节点 c u r r curr curr  从图 G ′ G^{'} G中得到 c u r r curr curr的邻居节点集合 V c u r r V_{curr} Vcurr  根据转移概率 π \pi π V c u r r V_{curr} Vcurr中采样一个节点 s s s  将 s s s加入 w a l k walk walk返回 w a l k walk walk

    注:node2vecWalk算法的第5步采用了alias采样算法,可以再O(1)时间内完成。

    4.实验

    作者首先利用小说《悲惨世界》的人物共现关系验证了node2vec方法的有效性。如下图所示: 其中,位于上面的一副图是设置 p = 1 , q = 0.5 p=1,q=0.5 p=1q=0.5时节点的表示。相同颜色的节点表示相似。上面的一副图设置侧重于DFS,所以它能捕捉到节点的同质性,即相同社区的节点聚集在一起,颜色相同。我的理解是:偏重DFS时,两个社区可能只有几条边相连,而社区内部相连的边会很多,那么偏重DFS采样时,两个社区的节点同时被采样到的概率会很小,所以两个社区之间节点的相似性就会变小,同时社区之内节点的相似性就会变大。(根据公式(2))。所以偏重DFS会发现不同的社区聚集,即同质性。

    下面的一幅图是设置 p = 1 , q = 2 p=1,q=2 p=1q=2时节点的表示。它侧重于BFS,所以能发现节点的结构等同性,比如位于边缘的节点都是同一颜色,位于中间的节点是同一颜色。我的理解是:偏重BFS时,即使两个社区只有少数边连接,但是采样是根据邻居节点来的,所以不同社区的节点也会进行相似逼近,因为有可能位于两个社区的两个节点是邻居。所以偏重BFS会刻画出图的结构信息,比如位于边缘的节点表示相似,位于中间的节点表示相似,这就是结构等同性。

    最后作者在节点多标签分类和链接预测任务上进行了实验,验证了node2vec的优越性。

    5. 总结

    node2vec可以说是deepwalk的扩展,通过两个参数 p p p q q q来控制bfs和dfs两种方式的随机游走,而deepwalk是一种不加制约,漫无目的的游走,不能显式建模节点之间的结构信息。

    Processed: 0.013, SQL: 8