们都知道在数据结构中,图是一种基础且常用的结构。现实世界中许多场景可以抽象为一种图结构,如社交网络,交通网络,电商网站中用户与物品的关系等。
目前提到图算法一般指:
网络表示学习(Network Representation Learning,NRL)或图表示学习,也称为图嵌入法(Graph Embedding Method,GEM):目的是希望能够将网络中的节点用比较低维的向量去表达,同时在这个向量空间中,网络结构的一些性质仍能够保持。在原始图中相似(不同的方法对相似的定义不同)的节点其在低维表达空间也接近。得到的表达向量可以用来进行下游任务,如节点分类,链接预测,可视化或重构原始图等。
论文:DeepWalk: Online Learning of Social Representations
论文作者:B. Perozzi, R. Al-Rfou, and S. Skiena
论文来源:KDD, 2014
论文链接:https://arxiv.org/abs/1403.6652
github链接:https://github.com/phanein/deepwalk
此文是第一个将NLP中的思想用在网络嵌入(Network Embedding,NE)上的。
文中提出DeepWalk,一种用于学习网络中顶点的潜在表示的新方法。这些潜在表示将社会关系编码到连续的向量空间中,编码到向量空间后的社会关系,很容易应用到统计模型中。 DeepWalk将语言建模和无监督特征学习(或深度学习)的最新进展,从单词序列推广到图中。
DeepWalk将随机游走得到的节点序列当做句子,从截断的随机游走序列中得到网络的局部信息,再通过局部信息来学习节点的潜在表示。为了展示DeepWalk得到的节点的潜在表示,文中对几个社交网络(BlogCatalog,Flickr和YouTube)进行了多标签分类任务。研究结果显示,DeepWalk能够对网络进行全局的观察,特别是在存在缺失信息的情况下。当已标记数据很少时,DeepWalk的表示得到的F1分数比对比方法高出10%。在一些实验中,当训练数据少于60%时,DeepWalk的表现能够胜过所有对比算法。
DeepWalk也是可扩展的。DeepWalk是可以建立有用的增量结果的在线学习算法,并且是平行的。这些特性使其适用于广泛的实际应用,如网络分类和异常检测。
文章简介部分介绍了网络嵌入是什么,以社交网络为例,网络嵌入就是将网络中的点用一个低维的向量表示,并且这些向量要能反应原先网络的某些特性,比如如果在原网络中两个点的结构类似,那么这两个点表示成的向量也应该类似。
普通的邻接矩阵在存储的关系很多时,纬度将变得很高,而进行矩阵分解是一个相当费时复杂的过程,因此通过矩阵分解的方法进行网络的表示学习,目前并没有应用到大规模数据集的方案。
在NLP任务中,word2vec是一种常用的word embedding方法,word2vec通过语料库中的句子序列来描述词与词的共现关系,进而学习到词语的向量表示。
本文通过将已经成熟的自然语言处理模型word2vec应用到网络的表示上,做到了无需进行矩阵分解即可表示出网络中的节点的关系。文中提出了一种网络嵌入的方法叫DeepWalk,它的输入是一张图或者网络,输出为网络中顶点的向量表示。DeepWalk通过一串截断随机游走(truncated random walk) 类比于word2vec中对单词的上下文,作为word2vec算法的输入,进而把节点表示成向量,从而学习出一个网络的社会表示(social representation),在网络标注顶点很少的情况也能得到比较好的效果。输出的结果能够被多种分类算法作为输入应用。并且该方法还具有可扩展的优点,能够适应网络的变化。
三点主要贡献:
将社交网络的成员分类问题考虑为一个或多个类别。
在传统的机器学习分类设置中,目标是学习一个假设 H H H,它将 X X X的元素映射到标签集 Y Y Y。在文中的例子中,可以利用G的结构中嵌入的例子的依赖性的重要信息,来完成突出的表现。
文中提到,在学习一个网络表示的时候需要注意的几个性质:
提到网络嵌入,可能会让人联想到NLP中的word2vec,也就是词嵌入(word embedding)。前者是将网络中的节点用向量表示,后者是将单词用向量表示。因为大多数机器学习的方法的输入往往都是一个向量,算法也都基于对向量的处理,从而将不能直接处理的东西转化成向量表示,这样就能利用机器学习的方法对其分析,这是一种很自然的思想。
本文处理网络节点的表示(node representation)就是利用了词嵌入(词向量)的的思想。词嵌入的基本处理元素是单词,对应网络网络节点的表示的处理元素是网络节点;词嵌入是对构成一个句子中单词序列进行分析,那么网络节点的表示中节点构成的序列就是随机游走。
所谓随机游走(random walk),就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。从某个特定的端点开始,游走的每一步都从与当前节点相连的边中随机选择一条,沿着选定的边移动到下一个顶点,不断重复这个过程。截断随机游走(truncated random walk)实际上就是长度固定的随机游走。
使用随机游走有两个好处:
自然语言已经被证明是复合幂次定律,只需要证明图的数据也符合幂次定律就可以对图的表示应用对自然语言表示的方法。下图比较了对图进行短随机游走中向量出现的频率与单词在文本信息中出现的频率。发现对图的短随机行走也是大致满足幂次定律的。
语言模型主要是学词序列。词序列为: W 1 n = ( w 0 , w 1 , ⋯   , w n ) W_1^n = (w_0,w_1,\cdots ,w_n) W1n=(w0,w1,⋯,wn)。
我们要用前 n − 1 n−1 n−1个单词来预测第 n n n个单词,也就是最大化 P r ( w n ∣ w 0 , w 1 , ⋯   , w n − 1 ) Pr(w_n | w_0,w_1,\cdots, w_{n-1}) Pr(wn∣w0,w1,⋯,wn−1), 最常见的方法当然是n-gram, 现在新兴的是word2vec。
针对社会网络上的随机游走序列,我们自然会想到,要用前 n − 1 n−1 n−1个节点来预测第 n n n个节点的出现 P r ( v n ∣ v 0 , v 1 , ⋯   , v n − 1 ) Pr(v_n | v_0,v_1,\cdots, v_{n-1}) Pr(vn∣v0,v1,⋯,vn−1)。但是论文的目的是要学习一个隐表示,所以引入了一个映射函数 Φ : v ∈ V ↦ R ∣ V ∣ × d \Phi : v\in V \mapsto \mathbb{R}^{|V|\times d} Φ:v∈V↦R∣V∣×d。于是,问题变成估计
P r ( v n ∣ Φ ( v 0 ) , Φ ( v 1 ) , ⋯   , Φ ( v n − 1 ) ) Pr(v_n | \Phi(v_0), \Phi(v_1),\cdots, \Phi(v_{n-1})) Pr(vn∣Φ(v0),Φ(v1),⋯,Φ(vn−1))
但是如果随机游走的长度变大,会降低该条件概率估计的效率。自然语言处理领域中,针对这个问题给出了几个解决方案:
于是问题变成了最优化如下式子
min Φ − l o g P r ( { w i − w , ⋯   , v i − 1 , v i + 1 , ⋯   , v i + w } ∣ Φ ( v i ) ) \min \limits_{\Phi} -log Pr (\{w_{i-w},\cdots, v_{i-1},v_{i+1} , \cdots, v_{i+w} \} | \Phi(v_i) ) Φmin−logPr({ wi−w,⋯,vi−1,vi+1,⋯,vi+w}∣Φ(vi))
由于顺序被忽略了, 所以比较适合图学习, 因而有了这篇论文。
该算法由两个主要组件组成:一个随机游走生成器和一个更新程序。
随机游走:对图G,均匀地随机采样一个节点 v i v_i vi,并作为random walk的根节点 W v i W_{v_i} Wvi,然后一直向周围邻居采样,直到达到最大路径长度 t t t。
随机游动的长度没有限制,但是在实验中设置最大步长是固定的。
算法如下:
SkipGram参数更新的细节如下:
SkipGram算法是语言模型中,最大化窗口 w w w中出现的词的概率的方法(梯度下降),如上图所示。
外层循环是对这个序列中的每个词进行操作,内层循环是对每个词的窗口大小为 w w w的词序列进行操作。具体操作是用一个似然函数 J ( Φ ) J(\Phi) J(Φ)表示 Φ \Phi Φ,然后求导,用梯度下降的方法更新( α \alpha α应该是学习率)。
模型参数集是 { Φ , T } \{\Phi,T \} { Φ,T},使用随机梯度下降算法SGD(一次训练一个样本)进行优化(算法2中的第4行)这些参数。使用反向传播计算所有参数关于代价函数的偏导数。SGD的学习率开始训练时初始化为2.5%,然后随着训练过程中看到的顶点数量的增加线性减少。
图2显示了社交网络中的随机游走的顶点和语言模型中的词的频率分布都符合幂律分布。
这导致罕见的顶点的长尾效应,因此,更新 Φ \Phi Φ将是稀疏的。这允许在多worker的情况下使用异步版本的随机梯度下降(ASGD)。考虑到文中的更新是稀疏的,并且没有获得一个锁来访问模型共享参数,ASGD将获得一个最优的收敛速度[36]。当使用多线程在一台机器上运行实验时,已经证明该技术具有很高的可扩展性,可以用于非常大规模的机器学习[8]。图4显示了并行化DeepWalk的效果。它显示了处理BlogCatalog和Flickr网络的速度是一致的,因为文中将worker的数量增加到了8个(图4a)。它还表明,与连续运行DeepWalk相比,预测性能没有损失(图4b)。
这种方法的一个有趣的变体是流方法,它可以在不了解整个图的情况下实现。在这种变体中,图中的small walks直接传递给表示学习代码,并直接更新模型。首先,使用衰减的学习率将不再可能。相反,可以初始化学习速率 α \alpha α为小的常数值。这将花费更长的时间来学习,但在某些应用程序中可能是值得的。其次,不能再构建参数树了。如果 V V V的基数已知(或可以有界),就可以为该最大值构建层次结构的Softmax树。当顶点第一次被看到时,可以将它们分配给剩余的叶子之一。如果有能力预先估计顶点频率,还可以使用霍夫曼编码来减少频繁元素访问时间。
代码和数据集在第一作者的网站上可用。
数据集分别为
和下面的baseline进行对比
粗体显示了每一列的最高性能
参数说明
实验说明
图5显示了增加 γ \gamma γ的影响,random walks的数量从每个顶点开始。
不同维度(图5b1、图5b3)和训练数据量(图5b2、图5b4)的结果非常一致。最初,增加 γ \gamma γ结果有很大影响,但这种影响很快减慢 ( γ > 10 ) (\gamma> 10) (γ>10)。这些结果表明,只有在少量的random walks之后能够学习有意义的顶点的潜在表示。
总的来说这篇论文算是network embedding的开山之作,它将NLP中词向量的思想借鉴过来做网络的节点表示,提供了一种新的思路,后面会有好几篇论文使用的也是这种思路,都是利用随机游走的特征构建概率模型,用词向量中Negative Sampling的思想解决相应问题。
Deepwalk是一个非常简单但很有创意的方法,它将基于图的经典方法随机游走和自然语言处理中的skip-gram模型结合,得到了一个简单好用的网络表达学习方法。这也是第一篇将深度学习应用在大规模网络上,因此这个方法具有很强的可拓展性。Deepwalk作为网络表达学习中一个开创性工作,从一个简单的角度切入,用现有的成熟的方法,在一个全新的且尚未成为主流的问题中得到一个行之有效的解,不仅对网络表达这个问题带来极大的发展,同时也为我们做研究提供了一个很好的思路。一个优秀的方法是要建立在前人工作的基础上而不是凭空产生,并且当前最热门的问题并不一定是最值得研究的,冷门的问题也有其潜在的研究价值。
DeepWalk利用截断随机游走的局部信息作为输入,学习了一种能编码网络结构信息的表示方法。对各种不同图的实验证明了这种方法在挑战多标签分类任务的有效性。
作为一种在线学习算法,DeepWalk也是可扩展的。结果表明,可以为太大而无法运行谱方法的图创建有意义的表示。在如此大的图上,这种方法明显优于其他设计用于稀疏操作的方法。文中还展示了这种方法是可并行的,允许works同时更新模型的不同部分。
作者在该领域的未来工作将集中于进一步研究这种对偶性,利用文中的结果改进语言建模,并加强该方法的理论合理性。
DeepWalk: Online Learning of Social Representations作者ppt分享