Graph Embedding与Word Embedding一样,目的是用低维、稠密、实值的向量表示网络中的节点。目前Graph Embedding在推荐系统、搜索排序、广告等领域非常流行,并且也取得了非常不错的实践效果。
图Graph
表示一种==二维==的关系,而序列Sequence
表示一种==一维==的关系。因此,要将图转换为Graph Embedding,一般需要先通过一些算法把图变为序列;然后通过一些模型或算法把这些序列转换为Embedding。
一. 图表示学习意义
需要使用图形嵌入有以下几个原因:
- 机器学习图形是有限的,图由边和节点组成。这些网络关系只能使用数学、统计和机器学习的特定子集,而向量空间有更丰富的方法工具集
- 嵌入是压缩的表示。邻接矩阵描述图中节点之间的连接,它是一个
维度的矩阵,其中
是图中节点的个数,使用邻接矩阵作为大型图的特征空间几乎是不可能的
- 向量运算比图形上的可比运算更简单、更快
二. 图表示学习常用方法
2.1 DeepWalk
DeepWalk方法是首先以
随机游走(Random Walk)
的方式在网络中进行节点采样,生成序列,然后使用Skip-Gram模型将序列转换为Embedding的过程(仿照Word2vec)
算法步骤如下:
- 首先使用Random Walk的方式进行节点采样,其是一种可重复访问已访问节点的深度优先遍历算法。然后给定当前访问起始节点,从其邻居中随机选择一个节点作为下一个访问节点
- 重复此过程,直到访问序列长度满足预设条件
- 获取足够数量的节点访问序列后,使用Skip-Gram模型进行向量学习,最终获得每个节点的Embedding
2.1.1 随机游走(random walk)
对于无向图,
表示顶点
和顶点
之间边的权值(如果不存在边则为0)。使用随机游走构建长度为
的序列
,从顶点
游走到顶点
的概率为
其中,为所有以
为顶点的边的权值之和,即:
显然,顶点和顶点
之间边的权值越大,越有可能从顶点
游走到顶点
。random walk可以看作是一个可回头的深度优先搜索。有向图理论上可以进行随机游走,但是容易游走到出度为0的顶点,一般情况下,deep walk用于无向图比较多
2.1.2 word2vec(skip-gram)
使用随机游走得到句子
序列后,根据word2vec算法(skip-gram模型)得到目标函数:
其中,为顶点的向量表示,最开始为随机初始化,随着目标函数的不断优化,逐渐收敛,可以使用
hierarchical softmax
和negative sampling
实现
2.2 Line
LINE
算法适用于任意类型的图,包括有向图、无向图、有权图和无权图。使用LINE算法学习到的embeddings可以保留顶点的局部结构和全局结构(local and global network structures)。其核心思想是使用一阶相似度first-order proximity
表征==local structure==,使用二阶相似度second-order proximity
表征==global structure==
2.2.1 相关定义
-
first-order proximity:表征顶点与顶点之间的局部相似度,如果顶点
和
之间存在边,则一阶相似度为边的权值,否则一阶相似度为0;
-
second-order proximity:表征顶点
的邻域和
的邻域的相似程度(即两个顶点有多少共同的邻居节点)。定义
表示顶点
与其它顶点的一阶相似度,则顶点
和
的二阶相似度可以用
和
的相似度衡量
2.2.2 LINE with First-order Proximity
LINE with first-order proximity
只适用于无向图,公式(4)用来衡量顶点和
的向量表示之间的一阶相似度。
其中,和
分别对应顶点
和
的向量表示,顶点
和
在原始图中的一阶相似度使用
empirical probability
定义,如公式(5)所示:
为了使得学习到的embeddings能够保留顶点在原始图中的一阶相似度,最直接的做法是,最小化和
两个分布之间的差异
使用KL-divergence
来衡量分布间的差异(),
LINE with first-order proximity
的目标函数如式:
2.2.3 LINE with Second-order Proximity
LINE with second-order proximity
既可以使用于无向图,也可以适用于有向图。以有向图为例,每个顶点都有2个向量表示:
- 顶点
自身的embedding
- 顶点
作为其它顶点的context时的embedding
。
对于有向边(i,j),给定顶点,顶点
作为
的上下文(context),顶点
相对于顶点
的一阶相似度为
在原始图中,empirical probability
为:
其中,表示顶点
的out neighbor(与
出边相连的顶点)。为了使得学习到的embeddings能够保留顶点在原始图中的二阶相似度,最小化
和
两个分布之间的差异:
如果想要学习到的embedding既保留一阶相似度,也保留二阶相似度,最简单的做法是,分别使用LINE with first-order proximity和LINE with second-order proximity训练模型,将得到的embedding拼接
2.2.4 Optimization via Edge Sampling
在使用梯度下降算法优化目标函数(9)时,存在一个问题,如果边被采样,
如下:
显然边的权值影响梯度的计算,这会导致模型的learning rate难以确定,如果根据权重大的边确定学习率,那么权重小的边对应的梯度就很小,反之,如果根据权重小的边确定学习率,那么权重大的边对应的梯度就很大。为了解决这一问题,可以对原始图中的边进行采样,每条边被采样的概率正比于该边的权值。令,在范围
内生成一个随机数,选择随机数所在区间对应的边,作为采样边,可以使用
alias table method
将采样的复杂度从降至
2.3 Node2vec
Node2ve算法通过表征2种顶点间的关系,得到顶点的低维向量表示
- Homophily equivalence
- Structural equivalence

homophily equivalence
表明直接相连的顶点或是在同一community中的顶点,其embeddings应该比较靠近,如图所示,顶点、
、
、
和
之间直接相连且属于同一community,因此,这些顶点的embedding在特征空间中比较靠近;
structural equivalence
表面在图中具有相似结构特征的顶点(顶点间不必直接相连,可以离得很远),其embeddings应该比较靠近,例如,顶点和
都是各自所在community的中心,具有形似的结构特征,因此,顶点
和
的embedding在特征空间中比较靠近。Node2vec算法设计了一种灵活的邻域采样策略,允许在BFS和DFS之间平滑插值
2.3.1 特征学习框架
Node2vec算法希望,在给定顶点的条件下,其领域内的顶点出现的概率最大。即优化目标函数公式(13):
对于每一个源顶点,
为根据采样策略
得到的邻域,为了简化目标函数,论文提出了2个假设:
- 条件独立性
- 特征空间对称性
假设1表示当源顶点的特征表示
给定时,
和
无关(
)。因此,
可写为公式(14):
假设2说明源顶点和其邻域内任一顶点,相互之间的影响是相同的。最自然的想法就是将写为公式(15):
因此,Node2vec算法就需要解决两个问题:
- 给定一个源顶点
,使用什么样的采样策略
得到其邻域
;
- 如何优化目标函数。
对于第二个问题,可以参考基于negative sampling的skip-gram模型
进行求解,关键是确定采样策略
2.3.2 邻域采样策略
Node2vec算法提出了有偏的随机游走,通过引入2个超参数和
来平衡BFS和DFS,从顶点
有做到顶点
的转移概率为公式(16):
其中,表示游走过程中的当前顶点,
和
分别为
前一时刻的顶点和下一时刻将要游走到的顶点,
,
为边(v,x)的权值,
定义如下:
其中,表示顶点
和
相同,
表示顶点
和
之间存在之间相连的边,
表示顶点
和
不存在直接相连的边,如图所示,在一个无权图中(可以看作是所有边的权值为1),在一次游走过程中,刚从顶点
游走到
,在下一时刻,可以游走到4个不同的顶点,
、
、
和
,转移概率分别为
、
、
和

参数和控制游走探索和离开起始节点附近的速度
,
越小,随机游走采样的顶点越可能靠近起始顶点;而
越小,随机游走采样的顶点越可能远离起始顶点
2.4 SDNE
2.4.1 SDNE模型架构
SDNE模型(Structural Deep Network Embedding)的结构图如下:

模型主要包括两个部分:无监督和有监督部分
- 无监督部分是一个深度自编码器用来学习二阶相似度
- 监督部分是一个拉普拉斯特征映射捕获一阶相似度
2.4.2 二阶相似度(无监督)
如上图所示,这是一个自编码器,没有标签数据,是一种无监督学习
模型的输入,是节点
的邻接矩阵,因此结构相似的顶点可以学习到相似的embedding向量,不断优化代价函数来捕捉全局结构特征,即二阶相似度
输出是,是重构后的邻接矩阵。其目标是:
所以,二阶相似度损失函数定义为:
由于网络的稀疏性,邻接矩阵中的0元素远多于非0元素,使用邻接矩阵作为输入的话要处理很多0,这样就做了太多无用功了。为了解决这个问题,对损失函数做了改进如下:
其中是哈马达积,表示对应元素相乘。邻接矩阵中的0对应
, 非0元素的
,这样的目的是对于有边连接的节点增加惩罚,可以理解为对有边连接的节点赋予更高权重
在模型中,从到
是编码器,从
到
是解码器,
是节点
的Embedding向量,编码器的公式为:
其中,为第
层的参数矩阵,
为第
层的偏置项
2.4.3 一阶相似度(有监督)
前导知识——拉普拉斯映射(Laplacian Eigenmap),其目的是降维,目标函数如下:
是节点
的Embedding向量,若顶点
和
之间存在边,那他们的Embedding的结果
应该也很接近,所以,借助拉普拉斯的思想,其一阶相似度为:
最小化,可以使得一条边的两个节点在嵌入空间中的表示相对接近,为了防止过拟合,加入正则化,SDNE的loss为:
其中,正则化的计算公式如下:
为控制1阶损失的参数,
为控制正则化项的参数
2.5 Graph2vec
Graph2Vec原理上和DeepWalk差不多,也是尝试借用word2vec来训练,只是这次为了嵌入整张图,所以尝试利用子图来训练。类似文档嵌入doc2vec,通过最大化作为输入的文档,来预测随机单词的可能性,Graph2vec预测图中子图的概率
- 采样子图。为了提高效率,采样只选当前节点周围的邻接节点,构成子图
- skip-gram,最大化输入图子图的概率
,
为度,
为子图
2.5.1 算法详解
算法由两个主要组件组成:
- 对给定图中每个节点周围生成根子图
- 学习给定图嵌入
- 第
轮次学习数据集
中所有图的
维嵌入
- 首先随机初始化数据集中所有图的嵌入
- 随后继续提取每个图中的每个节点周围的根子图
- 并迭代地学习(即细化)相应图在一些轮次的嵌入
提取根子图:
- 输入根节点
,原图
,以及预期子图的度
,输出预期子图
,递归出口
,不要子图,只输出节点
的标签
- 对于
,根据宽度优先得到
的邻居,对每个邻居再得到其对应的
子图,记录进
得到
的
子图后与排序后的
拼接得到最终结果
负采样Skip-gram:
- 考虑词库
SGvocab
巨大,通过负采样计算这个后验概率
- 在每个训练周期,给定一个图
与其上下文的一组根子图,
,选择一组固定数量的随机选择的子图作为负样本
这样保证
是词库的子集,保证
和
- 负样本是一组k个子图,每个子图都不存在于需要学习嵌入的图
中,而是存在于子图的词库中,负样本的数量k是一个可以通过经验进行调整的超参数
- 为了有效的训练,对于每个图
,首先训练目标—上下文对
,并更新相应的子图的嵌入。随后,我们只更新负样本
的嵌入,而不是整个词库
网友评论