Graph Embedding:从DeepWalk到SDNE

Graph Embedding:从DeepWalk到SDNE

图嵌入,即用一个低维,稠密的向量去表示图中的点,该向量表示能反映图中的结构,本质上就是说,两个点其共享的(n阶)邻近点越多,即两个点的上下文越相似,两个对应向量距离越近。而图嵌入的最大好处自然是得到的向量表示可以输入任何的机器学习模型去解决具体面对的问题。同时对比一些传统的方法有对应的优势,比如基于矩阵分解(MF)的方法计算量太大;构造人工特征需要领域知识和较大的工作量。

图嵌入可用于推荐,节点分类,链接预测(link prediction),可视化等场景



DeepWalk

方法很简单,就是以某一特定点为起始点,做随机游走得到点的序列,然后得到的序列视其为句子,用w2v来学习,得到该点的表示向量。

本质上是用随机游走去捕获图中点的局部上下文信息,学到的表示向量反映的是该点在图中的局部结构,两个点在图中共有的邻近点(或者高阶邻近点)越多,则对应的两个向量之间的距离就越短。如上图。


具体详细步骤如下

t为每次随机游走的长度,这样后续构造出来的所有序列都是等长的。

γ为每个点作为随机游走序列起点的次数



LINE (large-scale Information Network Embedding)

LINE算法利用图中已存在的边构造目标函数,该目标函数显式描绘了一阶和二阶的邻近关系。然后通过优化方法去学习点的表达向量,其本质上是一种关于边的平滑,即很多很可能存在的边实际上不存在,需要模型去学习和预测出来。这点类似于推荐,任何推荐的算法本质上是对于user-item关系矩阵的平滑。

LINE能用于有向,无向图,带权重的和不带权重的。

如上图,6,7两个点是相似的,是因为直接相连,而5,6两个点也是相似的,是因为共享了很多邻近点。故本文显式考虑了一阶和二阶邻近关系。


1阶邻近关系的模型

ui是点vi的表达向量,p1(vi,
vj)是对应两点间一阶邻近关系的概率

而这个是一阶邻近关系的真实值,W是归一化常数

学习的过程就是减少两个分布之间距离的过程

距离d是KL-散度,常用来量化描述两个分布间的差别。

还有该模型不能用于有向图。。。


2阶邻近关系的模型

对于每个节点,文章构造了两个对应的向量,一个是节点的表达向量,一个是当节点被当成上下文时的表达向量(下面带一撇的向量)。Vj节点出现在Vi节点的上下文的概率为

对应拟合的真实值为

di为所有边的权重和,即归一化常数。


损失函数为:

本质上,概率p2共有取值V个,为各个节点处在vi上下文上的概率。两个节点的p2越相似,则两个节点的上下文环境越相似,即2阶邻近关系越大。

λ衡量不同节点的权重,文章设为一个点的出度,本质上就是说被视为等权重的不是节点本身,而是边。d仍然是KL-散度。

该模型能用于有向图和无向图

最后就是把学习1阶关系和2阶关系学出的表达向量concat起来。


文章还比较了各个算法的不同效果

可见LINE的效果最好,DeepWalk对不同颜色的点分得也不错,但是图形中部很多点都挤在一块,而这些点都是出度很大的点,文章提了一句说对于这种点的处理DeepWalk会产生很大噪音,但没有详细对此分析。原文到提出,deepwalk利用随机游走去捕获邻近关系,更像是深度优先搜索;而LINE的方式更像是广度优先搜索,相对而言更合理。



Node2Vec

文章指出,图嵌入学出出来的向量,应该能表示两种信息。一种是两个节点如果共享了很多邻近节点,那它们是相似的,如u和s1;第二种是两个节点如果在网络中充当的角色相似,那它们也应该是相似的,如u何s6,这种相似性到不强调直接相连或者共享邻近节点。

本文在DeepWalk的架构上,优化了随机游走的序列抽取策略。该策略有一些超参数,参数的不同选择可以在上面提到的两种相似性中得到不同的侧重和权衡。


BFS倾向于在节点的周边搜索,探索局部的结构形态,所以倾向于学习第一种相似性。DFS倾向于在更大范围去搜索更高阶的邻近点,所以倾向于学习第二种相似性。本文提出的随机游走策略是BFS和DFS的某种糅合。

假设节点从t跳到了v,那现在从v跳到x的概率正比于边权重w和一个调节因子:

其中,dtx是t到x的距离,只有0,1,2三种取值,分别对应x就是t本身,x和t直接相连,x和t不直接相连三种情况。显然,return parameter p控制了跳回到之前节点t的概率,p越小,游走越有局部性,p越大,游走越不会访问到之前的节点,倾向于搜索更大范围;in-out parameter q越大,搜索越有局部性,q越小,越倾向于DFS。

这种随机游走策略和目前的节点v,之前的节点t相关,是二阶马尔科夫


最后,模型里假设ni节点出现在u节点上下文的概率为:

则整体的优化函数为:


文章最后给出的效果可视化图

上下两种方案分别学出了提到的两种相似性



SDNE

本文认为,DeepWalk的缺点是缺乏明确的优化目标,即objective function,而LINE是把网络的局部信息和全局信息分开学习,最后简单地把两个表达向量连接起来,显然不是最优做法,文章利用深度学习去做graph embedding,好处自然是非线性表达能力更强了,然后设计了一个同时描述局部和全局网络信息的目标函数,利用半监督的方式去拟合优化。

图的网络结构信息分成local和global的,就是一阶近邻和二阶近邻的关系。二阶近邻用非监督的autoencoder去得到,还原节点的上下文信息,一阶近邻用监督的方式去得到,对应监督样本就是存在直接相连的节点。


模型的网络结构如下

注:个人理解它Local structure和Global structure大概是示意错了。。。


拟合全局信息的autoencoder:

xi是第i个节点的输入向量表达,xij=1当且仅当vi, vj节点直接相连,故xi描述了哪些节点和vi节点直接相连,即xi表达了vi所处的上下文环境,两个节点如果共享的邻近节点越多,学出来的隐向量距离也越小,则隐向量表达了对应节点的全局信息。

具体损失函数如下,bi是权重参数,为了给直接相连的边加权。如果vi, vj不直接相连,bij=1,否则bij > 1。这类似样本不平衡问题,实际中的图总是比较稀疏的,xi里为0的元素很多,不对为1的元素加权,则学出来的参数很可能都接近于0。


拟合局部信息的监督方法

损失函数如下

vi,vj直接相连则si,j = 1,否则等于0。本质上该损失函数是说,直接相连的节点其隐向量应该更接近,利用了直接相连的节点这种监督样本,去学习网络的局部结构信息。


最后就是两个损失函数权重加和,式子最后一项是L2-norm regularizer



最后附上一个有意思的具体应用,是已经公开了的阿里电商推荐场景下的凑单算法

阿里凑单算法首次公开!基于Graph Embedding的打包购商品挖掘系统解析




REFERENCES

[1] DeepWalk: Online Learning of Social Representations

[2] LINE: Large-scale Information Network Embedding

[3] node2vec: Scalable Feature Learning for Networks

[4] Structural Deep Network Embedding

编辑于 2018-02-09

文章被以下专栏收录