为什么要有Graph embedding
在图上要表示一个节点,可以使用one-hot来表示,而使用这种方法有两个缺点:
- 如果节点数量比较多,那么n维的one-hot会非常稀疏;
- 使用one-hot丢失了节点在图上的连接信息。
DeepWalk
为了使用无监督的方式训练每一个节点的embedding,我们会联想到word-embedding的方式,而word-embedding需要语料来训练每一个词的embedding,但是在图上没有一个有序的语料,所以在图上就产生了随机游走的方式来获得序列,利用Word2vec得到每个节点的embedding。
上图中,使用skipGram,在给定
v
4
v_4
v4的情况下
v
2
,
v
3
,
v
5
,
v
6
v_2,v_3,v_5,v_6
v2,v3,v5,v6同时出现的概率是多少,window size表示向前或者向后看多少个节点。
因为Graph embedding是通过无监督的方式训练的,那么如何评价表示出来的节点的好坏?答案就是需要一个分类器,将学习到的embedding投入分类器中进行分类,判断是否在正确的类别。
使用deep walk进行实战:
效果还是比较可观的。
LINE:Lage-scale Information Network Embedding
如果在大规模的图上做embedding,LINE会达到比较好的效果。
LINE中有两个中心思想:
- 一阶相似性:局部的结构信息。
- 二阶相似性:节点的邻居。共享邻居的节点可能是相似的。
作者提出LINE如果在节点度比较低的情况下,效果不是很好,因为节点度比较低时,所连接的邻居信息就会比较少,所以二阶相似性不会很好。
同时DeepWalk在无向图上,LINE可以在有向图中使用。
上图表示一阶相似性步骤:
- 随机初始化每一个节点的embedding
- 利用embedding求出 v i , v j v_i,v_j vi,vj的联合概率分布 p 1 ( v i , v j ) = 1 1 + e x p ( − u i T ⋅ u j ) 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映射后的值越大,也就是这两节点相连的权重越大,也就是这两个节点间出现的概率越大
- 利用权重,求出 v i , v j v_i,v_j vi,vj的经验概率分布 p ^ 1 = w i j 其 余 边 的 权 重 \hat p_1=\frac{w_{ij}}{其余边的权重} p^1=其余边的权重wij
- 计算联合概率分布和经验概率分布的距离,距离越小说明学习出的embedding越好,求两个分布的距离一般使用KL Divergence 来计算,
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) log ( p ( x i ) q ( x i ) ) = ∑ w i j W log ( ( w i j W ) / p 1 ( v i , v j ) ) = ∑ w i j W [ log ( w i j W ) − log ( p 1 ( v i , v j ) ) ] = ∑ w i j W log ( w i j W ) − ∑ w i j W log ( p 1 ( v i , v j ) ) 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))
∑ w i j W log ( w i j W ) \sum{\frac{w_{ij}}{W}}\log(\frac{w_{ij}}{W}) ∑Wwijlog(Wwij)是常数项, W W W表示图的权重之和,也是常数项,所以最终化简:
D K L ( p ∣ ∣ q ) = − ∑ ( i , j ) ∈ E w i j log p 1 ( v i , v j ) 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) - 经过化简得到损失函数 O 1 = − ∑ ( i , j ) ∈ E W i j log p i ( v i , v j ) 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}^\prime uˉ′,v代表节点,u代表节点的embedding,其中 u ˉ \bar{u} uˉ表示节点本身的向量, u ˉ ′ \bar{u}^\prime uˉ′表示该节点作为其他邻居时的表示向量。
- 条件概率
p 2 ( v j ∣ v i ) = e x p ( u j ′ ˉ T ⋅ u i ˉ ) ∑ k = 1 ∣ V ∣ e x p ( u k ′ ˉ T ⋅ u i ˉ ) 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 = w i j 其 余 边 的 权 重 \hat p_2=\frac{w_{ij}}{其余边的权重} p^2=其余边的权重wij
- 计算KL Divergence
D K L ( p ∣ ∣ q ) = − ∑ ( i , j ) ∈ E w i j log p 2 ( v i , v j ) 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}^\prime uˉ′,我们应该选择哪一个embedding作为二阶相似性呢?论文中将 u ˉ \bar{u} uˉ作为节点的二阶相似性。
- 训练完一阶和二阶相似性之后,将这两个结果concat拼接到一起就是最终的节点embedding。
得到一阶和二阶的embedding训练完成之后,将他们的embedding直接 contat一个最终的embedding。