关于‘graph embedding’中‘deepwalk’和‘node2vec‘的理解(简单版本)
本文适用于对‘deepwalk’和‘node2vec’最简单的理解,复杂的算法运算本文没有提及,本文主要帮助刚上手的朋友们能更好的看懂讲算法的文章而创作,作者把讲其中算法的视频放在了文章底部(我认为讲得很清晰),供读者参考!!
(一):为什么要做‘graph ebedding’
(1):如果用‘one-hot’等进行编码时,如果节点数量比较多,编码的向量长度会比较大,而运用’graph embeddng‘的形式的话,会简化节点的向量长度。
(2):运用‘graph embedding’保留了节点在图上的信息,而传统的编码没有这种效果。
(二):‘deepwalk’和‘node2vec’的简单介绍:
(1) :deepwalk
首先要说明的是deepwalk是由两方面构成:
一:随机游走(random walk)
二:Word2vec
deepwalk是这两种算法的结合的图数据结构挖掘算法,能够将图中的节点表示为一个包含潜在信息的向量.如图:
上图指的是输入图信号
上图为输出的图嵌入
deepwalk流程:
一:随机游走:
如图所示:
我们选定一个节点(如图中的‘root’点),对该节点进行多次的随机游走(这是一个什么概念呢?就是比如root点到w1点后,与w1点相连的除root点外还有两个点,deepwalk会随机选择一个点进行游历,以此类推),如图中绿色路线就是一条随机游走的节点序列。
二:word2vec:
如图所示:
我们在随机游走中得到了一个序列,然后可以通过word2vec的方式进行节点训练,选择一个节点(如图中的v4节点),来计算周围v2,v3,v5,v6(计算周围几个的概率是有一个参数设置叫window_size的参数,此处设置的值为2,如果设为1的话,则是计算v3,v5的概率)同时出现的概率,每一个节点都要进过这样的过程,这样就可以获得每个节点embedding的表示。
ps:上述的deepwalk的流程只是其中的一次循环,真正的过程是这样的:先是在随机游走中选一个节点(随机游走图中的每个节点都需要被选中,比如w1,w2节点也需要作为‘root’节点)跑n次,每次得到的节点序列都要经历word2vec进行编译。(简单来说就是进行了一个双重循环)
(2):node2vec
首先我们介绍几个概念::
1:BFS:广度优先搜索
2:DFS:深度优先搜索
简单来说BFS是先探索周围,而DFS则是朝着远离初设节点方向探索,举个简单的例子,就比如一个人住在上海,他出去玩优先探索的是上海周边(BFS),如果他出去玩是优先选择去北京,广州远离上海的方向探索这种就是DFS。
如图:
如果说deepwalk是一种随机游走的话,node2vec则是有策略的随机游走,如下图:
当t节点游走到v节点之后,之后v节点游走到下个节点就有点不再是随机的,到每个节点是有一定概率的,而这种概率在图中左下角的'π_vx'表示:
w_vx表示v节点到下一个x节点的边权重,α_pq(t,x)则表示节点t(root节点)到x节点的距离(如t到x1距离为1,则α_pq=1)的值,而p,q是自己设置的参数,p,q的大小会影响到你的算法是DFS还是BFS,下面会具体阐述。而图中的右下角为v到各个节点的概率。
如果q的值小则会偏向于探索能力强,探索深(v节点会倾向于往x2,x3处走),而刚好符合DFS探索深度的概念。
如果p值小则会优先进行周围的探索(v节点会倾向于往x1处走),符合BFS的概念。
(三):参考资料:
一:deepwalk和node2vec的算法视频: