DeepWalk笔记及思想细节

参考资料:

1. DeepWalk论文原文https://dl.acm.org/citation.cfm?doid=2623330.2623732

2. 论文Slides及第一作者在KDD上的口头报告视频:http://videolectures.net/kdd2014_perozzi_deep_walk/

DeepWalk主要思想

        将在一个网络上随机游走的路径(由节点组成)等同于一句自然语言。通过一定策略游走的所有路径组合在一起当做是语料库。然后就可以使用自言语言处理技术来进行网络表示学习,而DeepWalk这篇文章就用了word2vec技术。

        首先,为什么DeepWalk能用word2vec或者能用自然语言处理技术来进行网络表示学习?

DeepWalk笔记及思想细节_第1张图片

        上图是作者分别针对随机游走路径上的节点和自然语言里的词频的一个分析:即都存在统一的幂率特性。那么,什么叫做幂率特性呢?在自然语言里面,可以理解为只有少量的单词出现频率非常高,而绝大部分的单词出现的频率较低。还可以理解为,在日常交流中,常用的词汇很少,而绝大部分的词汇并不常用,由此,这也符合自然语言的特点。从上图中可以看出随机游走路径显然符合自然语言的特点,因此本文使用word2vec是可行的。

语言建模及SkipGram

        下图中的第一行是对自然语言建模。word2vec提到了两种模型CBOW和SkipGram,但是这里作者为什么选用SkipGram?作者的解释是:如果随机游走步数较大,那么下图第二行第三行变得不易计算,故采用SkipGram。但是看好多资料都说其实CBOW和SkipGram差不多,甚至CBOW比SkipGram要好点。

DeepWalk笔记及思想细节_第2张图片

Hierarchical Softmax

为什么使用Hierarchical Softmax?

        是因为在计算{\rm Pr}(u_k|\Phi(v_j))的时候,需要遍历整个语料库去统计u_kv_j同时出现的概率,而语料库往往非常大,导致计算复杂度太高,因此转而使用二叉树去优化,这里使用的是Huffman树。这里把每个节点在随机游走路径中出现的次数当做权值,然后就是完全的Huffman建树过程。

        根节点是输入节点,非叶子节点是隐层权重(每个非叶子节点与叶子节点的维度一致),所有的隐层权重及叶子节就是我们需要更新的参数。

        那么,如果输入是v_j,则{\rm Pr}(u_k|\Phi(v_j))就是最大化从v_ju_k所有路径相乘的概率。二叉树上的每一次分支选择都是一个二分类问题,且采用逻辑斯蒂回归损失函数。

你可能感兴趣的:(论文笔记)