网络表示学习总结

总结一下网络表示学习 (network embedding/network representation learning) 的东西。

网络表示学习即是将节点表示为向量。
为什么表示为向量,目前看来有以下几点原因:

  1. 向量是一种分布式表示,比 one-hot 表示什么的更易于使用,如可以方便地作为 feature 喂给 classifier 等。而这其实也是因为分布式表示含有很多隐含信息,不像 one-hot 向量,丁是丁卯是卯。同时,分布式表示可以比 one-hot 表示短得多。
  2. 网络 (graph) 是一种不够结构化的数据结构。想要在网络中获取有用的信息,哪怕只关注一个节点,也必然要关注网络中与之相关的一群节点,算法复杂度指数上升,解决问题的复杂性也是指数上升。这种级联的问题使得在网络上的研究很麻烦,千头万绪,剪不断理还乱的感觉。而把每个节点表示为一个独立的向量就很方便了。
  3. 网络不规则。网络中的节点有的度很大,有的度很小,每个节点的邻居个数不一样,在网络上直接处理会很麻烦。转化为向量后,向量长度都一样,就规则了。
  4. 网络很大时处理起来时间和空间复杂度都太高,邻接矩阵和 laplacian 矩阵都是 \(N^2\) 大小,而处理成 embedding 向量后,长度就很短了,给下游任务使用时复杂度就小得多。

接下来的问题是怎么将节点表示成向量。
这里首先要确定的是要从哪个角度来确定节点间的相似性。目前我接触到的主要是以下两个角度:

  1. Homogeneity/proximity,这个主要是社区 (community) 角度,即相邻的节点更可能在社区属性上相似。在某篇论文上看到一个解释说,从这个角度看,网络是平滑的,感觉很形象很直觉。
  2. Structural similarity,这个主要是结构或功能角度,即周围结构相似的节点更可能在功能上相似。

当然,社区很多时候也会和功能相关,功能相似的节点也很可能相邻,所以这两个角度会有一些相似或重叠的地方。
但如果两个结构相似的节点相距很远时,这两个角度就几乎是正交的了。

首先说第一个角度,第一个角度的基本假设是『相邻节点相似』,这可以称为是 first-order proximity。而另一方面,基于这个假设,与同一个节点相似的节点之间也更可能相似,那么两个节点之间共同邻居越多,它们也就更可能相似,这可以称为 second-order proximity,这时,两个节点之间相距为 2。当然,距离再远些还可以有 high-order proximity。

那么如何捕捉 (capture) 这些 proximity 呢?
最早 DeepWalk 是以节点作为单词,以随机游走序列作为句子,得到句子序列之后喂给 word2vec 从而得到节点 embedding。word2vec 会将窗口内的节点作为上下文,所以 DeepWalk 捕捉的是 \(k\) (window size) 阶proximity?
之后出现了 LINE,LINE 一方面针对大型网络进行了优化,另一方面,给出了 objective function,这就使得对于网络表示学习的改进更加容易。因为要在基于 random walk 的方法上继续改进,一般只能在网络结构 (如 HARP?) 或 random walk 的生成模式 (如 node2vec) 上做手脚,这样改进或扩展起来就很不方便。而在 LINE 给出了 objective function 后,只要针对自己预想的改进,调整目标函数就好了。因此,后面看到的很多网络表示学习的论文都是基于 LINE 做的改进,如加入社区结构、加入影响力模型等等。
之后,又出现了基于矩阵分解的网络表示学习方法,如 GraRep,但这类方法速度比较慢。
除此之外,还有基于深度学习的方法,如 SDNE,本质上可以看作使用自编码器对邻接矩阵降维?

本质上,这些方法都可以看作用向量表示来模拟网络中的概率分布,不同的是这个概率分布是从哪个角度计算的,以及是怎么计算的。如 LINE 中定义的网络中的概率分布就比较简单直接,基本是边权重除以中心节点的度,然后以 sigmoid 或 softmax 来用向量表示表达这个概率,接下来就是用 KL-divergence 来最小化两个分布的距离就可以了。对于基于 random walk 的方法,这个网络中的概率分布就隐含在 random walk 中而没有明确定义。

TODO:
结构相似性角度
graph kernel
link prediction

猜你喜欢

转载自www.cnblogs.com/maxuewei2/p/10506038.html