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是一个可以通过经验进行调整的超参数
- 为了有效的训练,对于每个图,首先训练目标—上下文对,并更新相应的子图的嵌入。随后,我们只更新负样本的嵌入,而不是整个词库