文章目录
网络表示学习(Network Representation Learning,NRL)、Graph Embedding
们都知道在数据结构中,图是一种基础且常用的结构。现实世界中许多场景可以抽象为一种图结构,如社交网络,交通网络,电商网站中用户与物品的关系等。
目前提到图算法一般指:
- 经典数据结构与算法层面的:最小生成树(Prim,Kruskal,…),最短路(Dijkstra,Floyed,…),拓扑排序,关键路径等
- 概率图模型,涉及图的表示,推断和学习,详细可以参考Koller的书或者公开课
- 图神经网络,主要包括Graph Embedding(基于随机游走)和Graph CNN(基于邻居汇聚)两部分。
网络表示学习(Network Representation Learning,NRL)或图表示学习,也称为图嵌入法(Graph Embedding Method,GEM):目的是希望能够将网络中的节点用比较低维的向量去表达,同时在这个向量空间中,网络结构的一些性质仍能够保持。在原始图中相似(不同的方法对相似的定义不同)的节点其在低维表达空间也接近。得到的表达向量可以用来进行下游任务,如节点分类,链接预测,可视化或重构原始图等。
DeepWalk:Online Learning of Social Representations
论文: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是可以建立有用的增量结果的在线学习算法,并且是平行的。这些特性使其适用于广泛的实际应用,如网络分类和异常检测。
1. Introduction
文章简介部分介绍了网络嵌入是什么,以社交网络为例,网络嵌入就是将网络中的点用一个低维的向量表示,并且这些向量要能反应原先网络的某些特性,比如如果在原网络中两个点的结构类似,那么这两个点表示成的向量也应该类似。
普通的邻接矩阵在存储的关系很多时,纬度将变得很高,而进行矩阵分解是一个相当费时复杂的过程,因此通过矩阵分解的方法进行网络的表示学习,目前并没有应用到大规模数据集的方案。
在NLP任务中,word2vec是一种常用的word embedding方法,word2vec通过语料库中的句子序列来描述词与词的共现关系,进而学习到词语的向量表示。
本文通过将已经成熟的自然语言处理模型word2vec应用到网络的表示上,做到了无需进行矩阵分解即可表示出网络中的节点的关系。文中提出了一种网络嵌入的方法叫DeepWalk,它的输入是一张图或者网络,输出为网络中顶点的向量表示。DeepWalk通过一串截断随机游走(truncated random walk) 类比于word2vec中对单词的上下文,作为word2vec算法的输入,进而把节点表示成向量,从而学习出一个网络的社会表示(social representation),在网络标注顶点很少的情况也能得到比较好的效果。输出的结果能够被多种分类算法作为输入应用。并且该方法还具有可扩展的优点,能够适应网络的变化。
- DeepWalk的思想类似word2vec,使用图中节点与节点的共现关系来学习节点的向量表示。那么关键的问题就是如何来描述节点与节点的共现关系,DeepWalk给出的方法是使用随机游走(RandomWalk)的方式在图中进行节点采样。
- RandomWalk是一种可重复访问已访问节点的深度优先遍历算法。给定当前访问起始节点,从其邻居中随机采样节点作为下一个访问节点,重复此过程,直到访问序列长度满足预设条件。
三点主要贡献:
- 作者使用深度学习作为工具去分析图,建立了一个适合复杂模型的Robust Representations。DeepWalk根据short random walks来学习结构化表示
- 作者在考虑稀疏问题上,在多标签分类任务上有很大进步,在MicroF1上有着5%-10%的提升。在一些例子上,即使提取40%的训练数据依然能获得很好的效果
- 作者通过采用并行的方法构建web-scale graphs(例如youtube)的representations表明了算法的可扩展性。
2. Problem Definition
将社交网络的成员分类问题考虑为一个或多个类别。
- 设 G = ( V , E ) G = (V, E) G=(V,E),其中 V V V是网络的成员, E E E是其边, E ⊆ ( V × V ) E ⊆ (V×V) E⊆(V×V)
- 给定部分标记的社交网络 G [ L ] = ( V , E , X , Y ) G[L] = (V, E, X, Y) G[L]=(V,E,X,Y),属性 X ∈ R ∣ V ∣ × S X ∈ R^{|V|×S} X∈R∣V∣×S,其中 S S S是每个属性向量的特征空间的大小
- Y ∈ R ∣ V ∣ × ∣ Y ∣ Y ∈ R^{|V|×|Y|} Y∈R∣V∣×∣Y∣, Y Y Y是标签集。
在传统的机器学习分类设置中,目标是学习一个假设 H H H,它将 X X X的元素映射到标签集 Y Y Y。在文中的例子中,可以利用G的结构中嵌入的例子的依赖性的重要信息,来完成突出的表现。
- 输入:一个图的点集和边集
- 输出:对于(其中X是特征,Y标签集合),一般的机器学习问题,需要学习一个从X映射到Y的hypothesis。而本文的任务就是学习得到X的低维表示。
3. Learning social representations
文中提到,在学习一个网络表示的时候需要注意的几个性质:
- 适应性,网络表示必须能适应网络的变化。网络是一个动态的图,不断地会有新的节点和边添加进来,网络表示需要适应网络的正常演化。
- 属于同一个社区的节点有着类似的表示。网络中往往会出现一些特征相似的点构成的团状结构,这些节点表示成向量后必须相似。
- 低维。代表每个顶点的向量维数不能过高,过高会有过拟合的风险,对网络中有缺失数据的情况处理能力较差。
- 连续性。低维的向量应该是连续的。
提到网络嵌入,可能会让人联想到NLP中的word2vec,也就是词嵌入(word embedding)。前者是将网络中的节点用向量表示,后者是将单词用向量表示。因为大多数机器学习的方法的输入往往都是一个向量,算法也都基于对向量的处理,从而将不能直接处理的东西转化成向量表示,这样就能利用机器学习的方法对其分析,这是一种很自然的思想。
本文处理网络节点的表示(node representation)就是利用了词嵌入(词向量)的的思想。词嵌入的基本处理元素是单词,对应网络网络节点的表示的处理元素是网络节点;词嵌入是对构成一个句子中单词序列进行分析,那么网络节点的表示中节点构成的序列就是随机游走。
3.1 Random Walks
所谓随机游走(random walk),就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。从某个特定的端点开始,游走的每一步都从与当前节点相连的边中随机选择一条,沿着选定的边移动到下一个顶点,不断重复这个过程。截断随机游走(truncated random walk)实际上就是长度固定的随机游走。
使用随机游走有两个好处:
- 并行化,随机游走是局部的,对于一个大的网络来说,可以同时在不同的顶点开始进行一定长度的随机游走,多个随机游走同时进行,可以减少采样的时间。
- 适应性,可以适应网络局部的变化。网络的演化通常是局部的点和边的变化,这样的变化只会对部分随机游走路径产生影响,因此在网络的演化过程中不需要每一次都重新计算整个网络的随机游走。
3.2 Connection: Power laws( 连接:幂律 )
自然语言已经被证明是复合幂次定律,只需要证明图的数据也符合幂次定律就可以对图的表示应用对自然语言表示的方法。下图比较了对图进行短随机游走中向量出现的频率与单词在文本信息中出现的频率。发现对图的短随机行走也是大致满足幂次定律的。
3.3 Language Modeling (语言模型)
语言模型主要是学词序列。词序列为:
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))
由于顺序被忽略了, 所以比较适合图学习, 因而有了这篇论文。
4. Method
4.1 DeepWalk
该算法由两个主要组件组成:一个随机游走生成器和一个更新程序。
随机游走:对图G,均匀地随机采样一个节点
v
i
v_i
vi,并作为random walk的根节点
W
v
i
W_{v_i}
Wvi,然后一直向周围邻居采样,直到达到最大路径长度
t
t
t。
随机游动的长度没有限制,但是在实验中设置最大步长是固定的。
算法如下:
- 输出:一个顶点表示矩阵 Φ \Phi Φ,大小为 ∣ V ∣ × d |V| × d ∣V∣×d
- 第2步是构建Hierarchical Softmax
- 第3步对每个节点做 γ γ γ次随机游走
- 第4步打乱网络中的节点
- 第5步以每个节点为根节点生成长度为 t t t的随机游走
- 第7步根据生成的随机游走使用skip-gram模型利用梯度的方法对参数进行更新
SkipGram参数更新的细节如下:
SkipGram算法是语言模型中,最大化窗口
w
w
w中出现的词的概率的方法(梯度下降),如上图所示。
外层循环是对这个序列中的每个词进行操作,内层循环是对每个词的窗口大小为
w
w
w的词序列进行操作。具体操作是用一个似然函数
J
(
Φ
)
J(\Phi)
J(Φ)表示
Φ
\Phi
Φ,然后求导,用梯度下降的方法更新(
α
\alpha
α应该是学习率)。
4.2 Hierarchical Softmax
4.3 Optimization
模型参数集是 { Φ , T } \{\Phi,T \} {Φ,T},使用随机梯度下降算法SGD(一次训练一个样本)进行优化(算法2中的第4行)这些参数。使用反向传播计算所有参数关于代价函数的偏导数。SGD的学习率开始训练时初始化为2.5%,然后随着训练过程中看到的顶点数量的增加线性减少。
4.4 Parallelizability 并行性
图2显示了社交网络中的随机游走的顶点和语言模型中的词的频率分布都符合幂律分布。
这导致罕见的顶点的长尾效应,因此,更新
Φ
\Phi
Φ将是稀疏的。这允许在多worker的情况下使用异步版本的随机梯度下降(ASGD)。考虑到文中的更新是稀疏的,并且没有获得一个锁来访问模型共享参数,ASGD将获得一个最优的收敛速度[36]。当使用多线程在一台机器上运行实验时,已经证明该技术具有很高的可扩展性,可以用于非常大规模的机器学习[8]。图4显示了并行化DeepWalk的效果。它显示了处理BlogCatalog和Flickr网络的速度是一致的,因为文中将worker的数量增加到了8个(图4a)。它还表明,与连续运行DeepWalk相比,预测性能没有损失(图4b)。
4.5 Algorithm Variants
Streaming
这种方法的一个有趣的变体是流方法,它可以在不了解整个图的情况下实现。在这种变体中,图中的small walks直接传递给表示学习代码,并直接更新模型。首先,使用衰减的学习率将不再可能。相反,可以初始化学习速率 α \alpha α为小的常数值。这将花费更长的时间来学习,但在某些应用程序中可能是值得的。其次,不能再构建参数树了。如果 V V V的基数已知(或可以有界),就可以为该最大值构建层次结构的Softmax树。当顶点第一次被看到时,可以将它们分配给剩余的叶子之一。如果有能力预先估计顶点频率,还可以使用霍夫曼编码来减少频繁元素访问时间。
Non-random walks
5. Experimental Design
代码和数据集在第一作者的网站上可用。
5.1 DataSets
数据集分别为
- BlogCatalog [39]:blogger作者之间的社交关系网络。labels代表了bolg的主题分类。
- Flickr [39]:一个图片分享网站,用户之间进行联系的网络。labels代表了用户的兴趣分组,例如“lack and white
photos” - YouTube [40]:视频分享网站,用户之间构成一个网络。labels代表了喜欢相同视频的用户的分组。
5.2 Baseline Methods
和下面的baseline进行对比
- SpectralClustering
- Modularity
- EdgeCluster
- wvRN
- Majority
6. Experiments
6.1 Multi-Label Classification
粗体显示了每一列的最高性能
6.2 Parameter Sensitivity
Effect of Dimensionality
参数说明
- 文中使用固定的window size 和walk length: w = 10 , t = 40 w=10,t=40 w=10,t=40
- d d d:维度
- γ \gamma γ:每个顶点开始的walk数量
- T R T_R TR:学习率
实验说明
- 图5a1和5a3测试了改变维度和学习率的效果。Flickr和BlogCatalog的性能相当一致,表明模型的最佳维数取决于训练实例的数量。(大约1%的Flickr和10%的BlogCatalog中有多标签的样本)
- 图5a2和5a3研究了改变每个顶点的维数和游走次数的影响。维度之间的相对性能在不同的γ值情况下是相对稳定的。
Effect of sampling frequency
图5显示了增加 γ \gamma γ的影响,random walks的数量从每个顶点开始。
不同维度(图5b1、图5b3)和训练数据量(图5b2、图5b4)的结果非常一致。最初,增加 γ \gamma γ结果有很大影响,但这种影响很快减慢 ( γ > 10 ) (\gamma> 10) (γ>10)。这些结果表明,只有在少量的random walks之后能够学习有意义的顶点的潜在表示。
8. Conclusions
总的来说这篇论文算是network embedding的开山之作,它将NLP中词向量的思想借鉴过来做网络的节点表示,提供了一种新的思路,后面会有好几篇论文使用的也是这种思路,都是利用随机游走的特征构建概率模型,用词向量中Negative Sampling的思想解决相应问题。
Deepwalk是一个非常简单但很有创意的方法,它将基于图的经典方法随机游走和自然语言处理中的skip-gram模型结合,得到了一个简单好用的网络表达学习方法。这也是第一篇将深度学习应用在大规模网络上,因此这个方法具有很强的可拓展性。Deepwalk作为网络表达学习中一个开创性工作,从一个简单的角度切入,用现有的成熟的方法,在一个全新的且尚未成为主流的问题中得到一个行之有效的解,不仅对网络表达这个问题带来极大的发展,同时也为我们做研究提供了一个很好的思路。一个优秀的方法是要建立在前人工作的基础上而不是凭空产生,并且当前最热门的问题并不一定是最值得研究的,冷门的问题也有其潜在的研究价值。
DeepWalk利用截断随机游走的局部信息作为输入,学习了一种能编码网络结构信息的表示方法。对各种不同图的实验证明了这种方法在挑战多标签分类任务的有效性。
作为一种在线学习算法,DeepWalk也是可扩展的。结果表明,可以为太大而无法运行谱方法的图创建有意义的表示。在如此大的图上,这种方法明显优于其他设计用于稀疏操作的方法。文中还展示了这种方法是可并行的,允许works同时更新模型的不同部分。
作者在该领域的未来工作将集中于进一步研究这种对偶性,利用文中的结果改进语言建模,并加强该方法的理论合理性。