DeepWalk: Online Learning of Social Representations (Algorithm)

会议:KDD '14
作者:Bryan Perozzi,Rami Al-Rfou,Steven Skiena


目录

    • 1.科学问题
    • 2.方法
    • 3.表现
    • 4.算法中细节

1.科学问题

现实生活中,我们活跃在各个网络中,学术网络,社交网络,购物网络,这些网络或者同质或者异质,或者开环或者闭环。有你我他就可以构建一个网络,网络也逐渐呈现高维稀疏的特征,使用传统方法存在诸多局限性。学者提出图网络发分析引入深度学习,学习节点特征,从而进行下游任务。
具体而言,图嵌入就是将图中的节点以低维稠密向量的形式进行表达,要求在原始图中相似的节点其在低维表达空间也接近,得到的表达向量可以用来进行下游任务,如节点分类,链接预测,可视化等。

2.方法

DeepWalk算法主要分为两个步骤:
一是随机游走采样节点序列构建节点共现关系;
二是使用自然语言词嵌入方法W2V学习节点特征。
那么,什么是词嵌入呢?
不了解的朋友可以参考这篇文章,对嵌入的介绍很清楚。
链接: https://lumingdong.cn/application-practice-of-embedding-in-recommendation-system.html#Word2Vec%E7%9A%84%E5%8E%9F%E7%90%86.
简单来说,词嵌入就是将单词嵌入一个低维空间中,传统的做法首先是对单词进行one-hot数值化的编码,但是这存在不足,编码会存在维数灾难而且不能表示单词原有的信息。于是我们构建神经网络搭建模型学习单词的数值化表征。
节点嵌入使用的模型是W2V里面的skip-gram模型。
输入:中心词
输出:每个单词作为周边词出现的概率
极大似然目标函数简化如下:

Alt
隐层到输出层实际是一个多分类任务,即每个单词与中心词的相似性,选用softmax激活函数进行归一化。
在这里插入图片描述
(w,c)表示根据语料库生成的训练样本词对,c表示中心词附近的周边词。我们以实际出现在中心词附近的周边词为期望输出,从而对模型进行训练,训练得到的权重矩阵就是学习得到的向量表示。W2V选择靠近输入端的权重矩阵作为词嵌入向量。
从幂律分布理论出发,文章证明了类比的合理性,节点嵌入将节点类比单词,节点序列类比句子,所以节点嵌入也只是比词嵌入多一步,即第一步,构建节点共现关系。

3.表现

学习到的节点表征如何,我们需要通过有标签的数据进行验证,论文从方法和参数两个部分进行了实验。
第一部分是方法的比较:
DeepWalk: Online Learning of Social Representations (Algorithm)_第1张图片
DeepWalk: Online Learning of Social Representations (Algorithm)_第2张图片
DeepWalk: Online Learning of Social Representations (Algorithm)_第3张图片
文章选用DeepWalk算法与传统算法在三个数据集上进行实验,从使用数据比例和结果稳健性揭示了图嵌入算法的优势。

第二部分是对参数敏感性的实验:
DeepWalk: Online Learning of Social Representations (Algorithm)_第4张图片
文章固定window_size=10,walk_length=40,改变采样次数、训练样本比、映射维度参数设置进行实验,结果表明这些参数设置在不同的网络上表现出相近的规律,同时这些参数在一定范围内增加可以提高边际表现。我们在实际使用时需要考虑计算资源也需要考虑实际问题的需求,可以先用这些表现不错的参数设置进行实验或者作为比较基准。

作为2014年图嵌入第一篇文章,个人认为它的贡献主要在于将自然语言处理的word embedding思想引入复杂网络中。后续算法以DeepWalk为基础,适用于复杂网络的不同情境分析。
以上属个人论文笔记,可能存在错误的地方,欢迎批评指正和交流!

4.算法中细节

关于随机游走:DeepWalk是深度优先,随机选择。
关于Skip-gram减少计算量:很多高频词是没有意义的,只会增加训练工作量,所以可以根据出现概率删除高频词;另一方面每次根据一对训练样本更新所有权重的计算量太大,可以使用负采样减少训练的权重,即只选择output和少数词来更新对应的权重,negative word的选择正比于单词出现的概率。
参考:https://zhuanlan.zhihu.com/p/27234078

你可能感兴趣的:(图网络学习,DeepWalk,Graph,Embedding,节点嵌入)