什么是图?
图是由节点与边构成的数据结构。
图的表示?
无向图(两个节点之间的边没有方向)
有向图(两个节点之间的边有方向)
如何去表示一张图?
使用邻接矩阵:矩阵中两个节点有边则为1,无边为0
图的性质:度(degree)
无向图的度:节点边的条数
有向图的度:分为出度(该节点指向其它节点的边的条数)、入度(其它节点指向该节点的边的条数)
大图的一部分,子图中所有节点与边以及节点和边的关系都是大图的一部分。
对于一个无向图,如果任意的节点i能够通过一些边到达节点j ,则称之为连通图
有向图的连通性:
强连通图:给定有向图G=(VE),并且给定该图G中的任意两个结点u和v,如果结点u与节点v互相可达,即至少存在一条路径可以由结点u开始,到结点v终止,同时存在至少有一条路径可以由结点v开始,到结点u终止,那么就称该有向图G是强连通图。
若连通图:若至少有一对结点不满足单向连通,但去掉边的方向后从无向图的观点看是连通图,则D称为弱连通图。
连通分量:无向图G的一个极大连通子图称为G的一个连通分量(或连通分支)。
连通图只有一个连通分量,即其自身。
非连通图有多个连通分量。
连接图中两个节点的最短路径。
图中两两结点最短路径的最大值。
N d e g r e e N_{degree} Ndegree : 节点N的度, n n n : 节点总数
对图的邻接矩阵求特征值与特征向量,计算出最大的特征值所对应的特征向量就表示是这个节点的特征向量中心性。
其中 A A A 为邻接矩阵,所求的特征值有五个,其中2.4811943为最高值,对应的特征向量为小红框的内容,乘以-1 对结果不影响,所以特征向量中心性为下面的值,其中1结点与5结点的值最大,表示1结点与5结点的度最大。其中4结点比2、3结点特征向量中心性大的原因是4结点连接的两个节点度大。
不知考虑了自身节点度的情况还考虑了与它相邻节点度的情况。表示了在图中该节点所属的位置情况。
图中其余两两节点如果想要最短路径到达那么经过一个节点的次数就是中介中心性。
在第一个式子中计算曹操的中介中心性时,分子中第一个括号里的内容表示蔡文姬到其余节点最短路径的次数,0:蔡文姬到甄姬最短路径为1,经过曹操节点的次数为0,1:蔡文姬到司马懿与夏侯惇的最短路径为3,经过曹操节点的次数为1,0.5:蔡文姬到典韦的最短路径是2,有两条路,所以为0.5。
一个图G= (V,E)由它的顶点与边之间的关联关系唯一确定,也由它的顶点对之间的邻接关系唯一确定.图的这种关系均可以用矩阵来描述,分别称为G的关联矩阵与邻接矩阵.
一个图的矩阵表示不仅仅是给出了图的一种表示方法,重要的是可通过对这些矩阵的讨论得到有关图的若干性质.此外,在图论的应用中,图的矩阵表示也具有重要的作用.。
形状:numnodes(G)×numnodes(G)
对角线为节点的度,其他为0。
形状:numnodes(G)×numnodes(G)
对角线为0,其他看两节点间是否有关系连接,如果有则为1,没有则为0.
对于一个给定的图G=(V,E),拉普拉斯矩阵定义为L=D-W,D被称为图的度矩阵,W是图的邻接矩阵。度矩阵由邻接矩阵转换,W和D之间的关系如下:
将W每列元素相加,放到对应行的对角线上就是D,那么拉普拉斯矩阵就是 L = D - W。
L 的对角线元素指示节点的度,即 L(j,j) 是节点 j 的度。
拉普拉斯矩阵。L 是对称的稀疏方阵,大小为numnodes(G)×numnodes(G)。对于具有自环的图,未定义图拉普拉斯矩阵。
PageRank谷歌提出的网页排序算法。
边的PageRank值等于这个节点的PageRank值除以指向其它节点边的条数。
节点的PageRank值等于所有指向该节点边的PageRank值之和。
阻尼系数:上个节点的PageRank值有多大的概率不传到下一个节点。
节点的Hub值等于这个节点指向的节点的authority值的和。(出)
节点的authority的值等于指向该节点的节点Hub值的和。(入)
想要表示图中的每一个节点可能会使用n维长度的one-hot编码向量,n为节点个数。
one-hot缺点:
1.如果节点比较多的话,向量长度就比较大。
2. 丢失了节点在图中的信息情况。
网络嵌入就是将网络中的点用一个低维的向量表示,并且这些向量要能反应原先网络的某些特性,比如如果在原网络中两个点的结构类似,那么这两个点表示成的向量也应该类似。
graph embedding(GE) = graph representation embedding(GRE) = network embedding(NE) = network presentation embedding(NPE)
Graph embedding的作用:简化了节点的特征长度,保留了节点在图上的信息。
Graph embedding算法:
【论文笔记】DeepWalk
一种网络嵌入的方法叫DeepWalk,它的输入是一张图或者网络,输出为网络中顶点的向量表示。DeepWalk通过截断随机游走(truncated random walk)学习出一个网络的社会表示(social representation),在网络标注顶点很少的情况也能得到比较好的效果。并且该方法还具有可扩展的优点,能够适应网络的变化。
网络节点的表示(node representation)就是利用了词嵌入(词向量)的的思想。词嵌入的基本处理元素是单词,对应网络网络节点的表示的处理元素是网络节点;词嵌入是对构成一个句子中单词序列进行分析,那么网络节点的表示中节点构成的序列就是随机游走。
所谓随机游走(random walk),就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。从某个特定的端点开始,游走的每一步都从与当前节点相连的边中随机选择一条,沿着选定的边移动到下一个顶点,不断重复这个过程。下图所示绿色部分即为一条随机游走。
关于随机游走的符号解释:以 v i v_i vi 为根节点生成的一条随机游走路径(绿色)为 W v i W_{v_i} Wvi ,其中路径上的点(蓝色)分别标记为 W v i 1 , W v i 2 , W v i 3 . . . W^1_{v_i},W^2_{v_i},W^3_{v_i}... Wvi1,Wvi2,Wvi3... …,截断随机游走(truncated random walk)实际上就是长度固定的随机游走。
使用随机游走有两个好处:
并行化,随机游走是局部的,对于一个大的网络来说,可以同时在不同的顶点开始进行一定长度的随机游走,多个随机游走同时进行,可以减少采样的时间。
适应性,可以适应网络局部的变化。网络的演化通常是局部的点和边的变化,这样的变化只会对部分随机游走路径产生影响,因此在网络的演化过程中不需要每一次都重新计算整个网络的随机游走。
Algorithm
整个DeepWalk算法包含两部分,一部分是随机游走的生成,另一部分是参数的更新。
其中第2步是构建Hierarchical Softmax,第3步对每个节点做γ次随机游走,第4步打乱网络中的节点,第5步以每个节点为根节点生成长度为t的随机游走,第7步根据生成的随机游走使用skip-gram模型利用梯度的方法对参数进行更新。
参数更新的细节如下:
DeepWalk在无向图上,LINE在有向图可以使用。
论文名称:LINE: Large-scale Information Network Embedding
这篇论文同样是做网络嵌入,文章的主要特点是:
将下面两种情况的两个顶点归结为相似顶点:
相关工作中diss了一波传统方法的效果,有一些方法使用的是矩阵分解的思想,对图的特征矩阵(拉普拉斯矩阵、邻接矩阵)做特征分解,然而这些方法需要大量的计算,并且效果也有局限性。文中还提到了上一篇论文DeepWalk,将本文与Deepwalk做了对比。
论文名称:node2vec: Scalable Feature Learning for Networks
node2vec的思想同DeepWalk一样:生成随机游走,对随机游走采样得到(节点,上下文)的组合,然后用处理词向量的方法对这样的组合建模得到网络节点的表示。不过在生成随机游走过程中做了一些创新。
首先介绍了复杂网络面对的几种任务,一种是网络节点的分类,通俗点说就是将网络中的节点进行聚类,我们关心的是哪些节点具有类似的属性,就将其分到同一个类别中。另一种是链接预测,就是预测网络中哪些顶点有潜在的关联。
一种结构特征是很多节点会聚集在一起,内部的连接远比外部的连接多,我们称之为社区。另一种结构特征是网络中两个可能相聚很远的点,在边的连接上有着类似的特征。比如下图, u , s 1 , s 2 , s 3 . s 4 u,s_{1},s_2,s_3.s_4 u,s1,s2,s3.s4 就属于一个社区,而 u , s 6 u,s_6 u,s6 在结构上有着相似的特征。
那么要设计的网络表示学习算法的目标必须满足这两点:
说到随机游走的采样,本文分析了两种图的游走方式,深度优先游走(Depth-first Sampling,DFS)和广度优先游走(Breadth-first Sampling,BFS),之前的图中也画出了两种游走的路径,学过图论或者数据结构的很好理解。游走的路径就是采样后得到的随机游走。
复杂网络处理的任务其实离不开两种特性,前面也提到过:一种是同质性,就是之前所说的社区。一种就是结构相似性,值得注意的是,结构相似的两个点未必相连,可以是相距很远的两个节点。
BFS倾向于在初始节点的周围游走,可以反映出一个节点的邻居的微观特性;而DFS一般会跑的离初始节点越来越远,可以反映出一个节点邻居的宏观特性。
铺垫了这么多终于到本文的工作了,能不能改进DeepWalk中随机游走的方式,使它综合DFS和BFS的特性呢?所以本文引入了两个参数用来控制随机游走产生的方式。
上图中,对于一个随机游走,如果已经采样了 ( t , v ) (t,v) (t,v),也就是说现在停留在节点v上,那么下一个要采样的节点x是哪个?作者定义了一个概率分布,也就是一个节点到它的不同邻居的转移概率:
![在这里
下面来逐行看看论文中提供的算法:
首先看一下算法的参数,图G、表示向量维度d、每个节点生成的游走个数r,游走长度l,上下文的窗口长度k,以及之前提到的p、q参数。
根据p、q和之前的公式计算一个节点到它的邻居的转移概率。
将这个转移概率加到图G中形成G’。
walks用来存储随机游走,先初始化为空。
外循环r次表示每个节点作为初始节点要生成r个随机游走。
然后对图中每个节点。
生成一条随机游走walk。
将walk添加到walks中保存。
然后用SGD的方法对walks进行训练。
第6步中一条walk的生成方式如下:
将初始节点u添加进去。
walk的长度为l,因此还要再循环添加l-1个节点。
当前节点设为walk最后添加的节点。
找出当前节点的所有邻居节点。
根据转移概率采样选择某个邻居s。
将该邻居添加到walk中。
Experiments