2017.10.29-DeepWalk、node2vec

  本周的学习内容主要是:
  1.学习Node Embedding的算法DeepWalk和node2vec
  2.比较Node Embedding的5个算法,初步选择要实现的算法
  3.通过读论文了解LINE、DeepWalk、node2vec算法的背景。
  因为第三项还没有完成,所以将这项内容放到下周的学习报告中,下面主要介绍前两项内容。

DeepWalk算法

  DeepWalk算法是类比word2vec算法实现的,用到了其中的Skip-Gram算法(word2vec主要有Skip-Gram和CBOW两种模型,从直观上理解,Skip-Gram是给定input word来预测上下文。而CBOW是给定上下文,来预测input word)。
  word2vec算法是实现单词的向量表示的算法,Skip-Gram算法的思想是建立一个神经网络,神经网络的训练集是由单词组成的句子。神经网络的输入是单词,输出是各个单词出现在输入单词的上下文中的概率。通过对训练集对神经网络进行训练,得到神经网络中的一些参数,根据参数可以得到输入的单词的向量表示。
  想要类比word2vec实现node的向量表示,必须要找到在网络中,单词是什么,句子是什么。DeepWalk中提出,将node作为单词;通过随机游走,得到node的序列,将这个序列作为句子。这样就可以使用Skip-Gram算法。
  为了提高Skip-Gram的训练过程的效率,DeepWalk采用分层softmax的方法来训练,即将node分配到二叉树的叶节点上。同时在构造二叉树时,使用霍夫曼编码,将使用频率高的节点放到较短的分支上。这样算法复杂度就从O(|V|)降到了O(log|V|)。

node2vec算法

  node2vec算法与DeepWalk相同,也是类比word2vec模型实现的,用到了模型中的Skip-Gram算法,只是在随机游走的算法与DeepWalk不同。
  在随机游走的算法上,DeepWalk是完全随机的,而node2vec算法给出了一个公式,公式中主要起作用的是p和q两个参数。其中,p是控制访问走过的node,即往回走;q是控制访问还没有走过的node,即向外走。

5个算法的比较

  word2vec是Word Embedding的算法,其他四个算法都是Node Embedding,考虑其他4个算法。
  Node Embedding的目标是,将node表示成向量,同时能够保存原网络的结构,Laplacian Eigenmap、LINE、DeepWalk、node2vec算法的目的也都是如此。但是虽然四个算法都将node表示成了向量,但是四个算法对于如何保证最大程度的保存原网络的结构的定义不同,即目标函数的定义不同,我觉得这也是四个算法的本质不同。
  Laplacian Eigenmap用两个node之间边的权值表示原网络中的两个node的相似度,用向量表示的两个node之间距离表示向量空间中两个node的相似度,为了保存原网络的结构信息,node之间的相似关系应该保持一致,由此定义了目标函数。
  LINE中分别给出了网络中和向量表示中,两个node之间的一阶相似度和二阶相似度,共四个公式的定义。然后综合一阶相似度保持一致和二阶相似度保持一致,定义了目标函数。
  DeepWalk和node2vec算法是先在网络中随机游走,得到node的序列。两个node同时出现在一个序列中的频率越高,两个node的相似度越高。然后构建一个神经网络,神经网络的输入是node,输出是其他node与输入的node同时出现的概率。同时出现的概率越高,两个node的相似度越高。为了保持相似度一致,得到目标函数。
  从目标函数的定义上来看,Laplacian Eigenmap的定义最简单,但是表示网络结构的能力比较差。LINE为了更好的保存网络的结构信息,提出了一阶相似度和二阶相似度的概念,并在目标函数中结合了两者。DeepWalk是提出了一个新的思路,但是对于原网络中node的相似度的定义不能很好的反映网络的结构,node2vec则着重解决了这一问题。
  除了上面提到的区别外,几个算法肯定还有一些细节上的区别,需要仔细了解算法的实现;此外,几个算法应该有不同的针对性,有各自擅长解决的问题,这一点不同将在了解完算法的背景后再作分析。

你可能感兴趣的:(2017.10.29-DeepWalk、node2vec)