为什么要有Graph embedding
在图上要表示一个节点,可以使用one-hot来表示,而使用这种方法有两个缺点:
- 如果节点数量比较多,那么n维的one-hot会非常稀疏;
- 使用one-hot丢失了节点在图上的连接信息。
DeepWalk

为了使用无监督的方式训练每一个节点的embedding,我们会联想到word-embedding的方式,而word-embedding需要语料来训练每一个词的embedding,但是在图上没有一个有序的语料,所以在图上就产生了随机游走的方式来获得序列,利用Word2vec得到每个节点的embedding。

上图中,使用skipGram,在给定v4v_4v4的情况下v2,v3,v5,v6v_2,v_3,v_5,v_6v2,v3,v5,v6同时出现的概率是多少,window size表示向前或者向后看多少个节点。

因为Graph embedding是通过无监督的方式训练的,那么如何评价表示出来的节点的好坏?答案就是需要一个分类器,将学习到的embedding投入分类器中进行分类,判断是否在正确的类别。
使用deep walk进行实战:

效果还是比较可观的。
LINE:Lage-scale Information Network Embedding
如果在大规模的图上做embedding,LINE会达到比较好的效果。
LINE中有两个中心思想:
- 一阶相似性:局部的结构信息。
- 二阶相似性:节点的邻居。共享邻居的节点可能是相似的。
作者提出LINE如果在节点度比较低的情况下,效果不是很好,因为节点度比较低时,所连接的邻居信息就会比较少,所以二阶相似性不会很好。
同时DeepWalk在无向图上,LINE可以在有向图中使用。

上图表示一阶相似性步骤:
- 随机初始化每一个节点的embedding
- 利用embedding求出vi,vjv_i,v_jvi,vj的联合概率分布p1(vi,vj)=11+exp(−uiT⋅uj)p_1(v_i,v_j)=\frac{1}{1+exp(-u_i^T · u_j)}p1(vi,vj)=1+exp(−uiT⋅uj)1,v代表节点,u代表节点的embedding,式子的意思是两节点越相似,內积越大,sigmoid映射后的值越大,也就是这两节点相连的权重越大,也就是这两个节点间出现的概率越大
- 利用权重,求出vi,vjv_i,v_jvi,vj的经验概率分布p^1=wij其余边的权重\hat p_1=\frac{w_{ij}}{其余边的权重}p^1=其余边的权重wij
- 计算联合概率分布和经验概率分布的距离,距离越小说明学习出的embedding越好,求两个分布的距离一般使用KL Divergence 来计算,
DKL(p∣∣q)=∑i=1np(xi)log(p(xi)q(xi))=∑wijWlog((wijW)/p1(vi,vj))=∑wijW[log(wijW)−log(p1(vi,vj))]=∑wijWlog(wijW)−∑wijWlog(p1(vi,vj)) D_{KL}(p||q)=\sum_{i=1}^n{p(x_i)\log(\frac{p(x_i)}{q(x_i)})}\\ =\sum{\frac{w_{ij}}{W}\log((\frac{w_{ij}}{W})/p_1(v_i,v_j))} \\ =\sum{\frac{w_{ij}}{W}\left[\log(\frac{w_{ij}}{W})-\log(p_1(v_i,v_j))\right]} \\ =\sum{\frac{w_{ij}}{W}}\log(\frac{w_{ij}}{W})-\sum{\frac{w_{ij}}{W}}\log(p_1(v_i,v_j)) DKL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))=∑Wwijlog((Wwij)/p1(vi,vj))=∑Wwij[log(Wwij)−log(p1(vi,vj))]=∑Wwijlog(Wwij)−∑Wwijlog(p1(vi,vj))
∑wijWlog(wijW)\sum{\frac{w_{ij}}{W}}\log(\frac{w_{ij}}{W})∑Wwijlog(Wwij)是常数项,WWW表示图的权重之和,也是常数项,所以最终化简:
DKL(p∣∣q)=−∑(i,j)∈Ewijlogp1(vi,vj) D_{KL}(p||q)=-\sum_{(i,j) \in E}w_{ij}\log p_1(v_i,v_j) DKL(p∣∣q)=−(i,j)∈E∑wijlogp1(vi,vj) - 经过化简得到损失函数O1=−∑(i,j)∈EWijlogpi(vi,vj)O_1=- \sum_{(i,j) \in E}W_{ij} \log p_i(v_i,v_j)O1=−∑(i,j)∈EWijlogpi(vi,vj),将损失函数进行梯度下降,就学到了每一个节点的embedding表示。
二阶相似性步骤,通过使用条件概率和经验概率来获得。
- 二阶相似性中每个节点有两个向量表示,分别是uˉ\bar{u}uˉ和uˉ′\bar{u}^\primeuˉ′,v代表节点,u代表节点的embedding,其中uˉ\bar{u}uˉ表示节点本身的向量,uˉ′\bar{u}^\primeuˉ′表示该节点作为其他邻居时的表示向量。
- 条件概率
p2(vj∣vi)=exp(uj′ˉT⋅uiˉ)∑k=1∣V∣exp(uk′ˉT⋅uiˉ)p_2(v_j|v_i)=\frac{exp(\bar{u_j^\prime}^T \cdot \bar{u_i})}{\sum_{k=1}^{\left|V \right|}exp(\bar{u_k^\prime}^T \cdot \bar{u_i})}p2(vj∣vi)=∑k=1∣V∣exp(uk′ˉT⋅uiˉ)exp(uj′ˉT⋅uiˉ)
节点表示学习前如果两个节点比较相似,那么embedding后的这两个节点表示向量也要很相似。 - 经验概率p^2=wij其余边的权重\hat p_2=\frac{w_{ij}}{其余边的权重}p^2=其余边的权重wij
- 计算KL Divergence
DKL(p∣∣q)=−∑(i,j)∈Ewijlogp2(vi,vj) D_{KL}(p||q)=-\sum_{(i,j) \in E}w_{ij}\log p_2(v_i,v_j) DKL(p∣∣q)=−(i,j)∈E∑wijlogp2(vi,vj) - 这样就得到每个节点的uˉ\bar{u}uˉ和uˉ′\bar{u}^\primeuˉ′,我们应该选择哪一个embedding作为二阶相似性呢?论文中将uˉ\bar{u}uˉ作为节点的二阶相似性。
- 训练完一阶和二阶相似性之后,将这两个结果concat拼接到一起就是最终的节点embedding。
得到一阶和二阶的embedding训练完成之后,将他们的embedding直接 contat一个最终的embedding。
图嵌入(Graphembedding)旨在通过无监督学习捕捉图的结构信息,解决one-hot编码稀疏性和丢失连接信息的问题。DeepWalk通过随机游走模拟语料,利用Word2vec获取节点的embedding。LINE则在大规模图上表现出色,通过一阶和二阶相似性学习节点表示。一阶相似性关注局部结构,二阶相似性考虑共享邻居的节点。最终,通过最小化Kullback-Leibler散度来优化损失函数,得到节点的embedding。node2vec和Struc2vec等进一步发展了这一领域。
4198

被折叠的 条评论
为什么被折叠?



