目录
图游走类算法
图游走算法可以理解为一个人在图上行走,最后能得到一条走过的路径
目标
图游走类算法的目标,就是学习出图中每一个节点的低维表示,称为 Node Embeddings。
在得到这些 embeddings 之后,就可以利用这些低维表示来进行接下来的下游任务,比如节点分类之类的等等。
为什么可以用这个低维表示来做下游任务呢?
因为可以利用一些方法,使得每个节点的 embeddings 可以学习到节点跟它的邻居的关系,更好的表示图结构和图特征的信息。
基本思路
- 通过在图进行某种方式的游走,得到多个序列,利用这些序列进行图表示学习。
- 通过图表示学习,利用节点之间的关系,学习到节点的低维表示(Node Embedding),
- 之后利用这些Embeddings做下游任务。
节点可以看做 NLP 中的词,而节点序列进而就可以联想到句子。接下来就要引入 NLP 领域中的一个算法——Word2vec
Word2vec
图游走类模型最开始参考的就是 NLP 领域中的 Word2vec 模型
算法思想
假设,如果只给出苹果这一个词,而没有其他的信息,那么,这个词的词义其实是模糊的。
因为苹果可能指的是水果,又或者是手机
但如果给出有关于苹果的很多个句子:
通过多个句子的上下文,其实可以大概了解到,上面所展示的苹果这个词的语义,是一种水果、一种食物。
通过这个例子,可以得出这样的一个结论,即词的语义由其上下文决定。
Word2vec 其实就是利用了这样的一个思想。
整体架构
Word2vec 模型,可以简单的理解为 Skip Gram + 负采样
Skip Gram——根据中心词预测上下文
在Word2vec 中,提出了两种模型结构用于学习词向量,分别是 CBOW 和 Skip Gram。
由于图游走类算法用的多是 skip-gram 模型,因此这里只介绍 skip-gram 模型。
Skip Gram的目的很简单,就是根据中心词,预测对应中心词的上下文词。
这样做不仅仅能够利用了词共现关系,同时也体现了 Word2vec的本质,即词的语义由其上下文来决定。
以下面这张图片的句子为例,假设 neighbors 为中心词,同时我们设置了window size为3. 这个窗口大小表示左右两边的上下文词数,因此 neighbors 的 context 为 uniformly from the,以及 of the last。
Skip gram 的模型结构很简单,输入层就是中心词的 one hot 表示,经过中间一个投影层后,在输出层预测对应的context word,因此最后一层就是一个softmax分类层。
需要补充的一点是,使用 Skipgram语言模型的本质并不是为了说多么准确的预测 context words,而是为了得到模型的副产物,也就是词向量。
通常在训练结束后,隐层的权重 W 会作为词向量矩阵。
Negative Sampling——负采样
假设,给定中心词 orange,预测其上下文词中的 juice:
Softmax 层在 Skipgram 模型中是用来计算词表的概率的。
为了能够预测出 juice,不仅要预测它的概率,还要预测整个词表中所有单词的概率。但这样做的计算量是非常大的,因此,这里使用负采样的方法进行优化。
负采样的思想很简单。将中心词和对应的上下文词作为正样本,比如这里的 (orange, juice)。同时,选取一定数量的负样本,比如3个。
确定要正样本和负样本之后,就不再需要计算所有词的概率,而只需要对这几个样本进行分类,如果 Y=1,意味着是正样本,Y=0,意味着是负样本。从而减少了计算量。
也就是把 softmax 层修改为了多个 sigmoid 函数,从而大大减少了计算量和参与权重更新的参数数目。
应用到图嵌入领域
我们有一句古话,近朱者赤,近墨者黑。
也就是说,周遭的环境对于我们来说会有一定的影响,因此也可以表现为,图中的节点会受到其邻居的影响。
当然,这种情况也不仅仅只存在社交网络这个范围内,在很多其他的图,比如推荐系统等等,节点都会受到邻居的影响。
这也是为什么可以将Word2vec这个方法迁移到图嵌入领域的原因
DeepWalk
游走模型的鼻祖是DeepWalk模型,它也是第一个将 NLP 领域的思想运用到图嵌入领域的模型。
整体架构
与 Word2vec 的不同,其实就是多了一个采样节点序列的随机游走部分。因此这两者实现起来其实是非常类似的。
另外,大部分的图游走类算法,都是在随机游走这一块做比较多的创新和改动,而在后续的训练方法上则和 Word2vec 基本保持一致。
Random Walk
具体过程
从图中的某个节点出发,游走的每一步都从与当前节点相连的边中随机选择一条,沿着选定的边移动到下一个顶点,不断重复这个过程,直到得到的序列无法继续往下走或者到达指定最大长度。
在走了多趟之后,便可以得到多个游走序列,此时就可以类比 NLP 中的句子了。
随机游走的本质,其实就是可以“回头”的深度优先搜索
将随机游走表示成公式的话,可以得到下面的这个式子。
DeepWalk选取随机游走序列中下一个节点的方式是均匀随机分布的,因此对于与当前节点有边相连的节点,都有相同的概率被选择。
在 DeepWalk 中,会针对图中的每个节点采样多条序列,得到这些节点序列之后,就可以直接套用 Word2vec 模型了。