Graph Represent Learning,也叫Graph Embedding,是将网络中的一个个节点表示成一个个向量。
总的来说,图嵌入技术大致可以分为两种:节点嵌入和图嵌入。当需要对节点进行分类,节点相似度预测,节点分布可视化时一般采用节点的嵌入;当需要在图级别(graph-level)上进行预测或者整个图结构越策,需要将整个图表示为一个向量进行嵌入表示
为什么要进行图嵌入?
- 图嵌入能够压缩数据, 我们一般用邻接矩阵描述图中节点之间的连接。 连接矩阵的维度是 ∣ V ∣ × ∣ V ∣ |V| \times |V| ∣V∣×∣V∣,其中 ∣ V ∣ |V| ∣V∣是图中节点的个数。矩阵中的每一列和每一行都代表一个节点。矩阵中的非零值表示两个节点已连接。将邻接矩阵用用大型图的特征空间几乎是不可能的。一个具有 1 M 1M 1M节点和 1 M × 1 M 1M\times 1M 1M×1M的邻接矩阵的图该怎么表示和计算呢?所以嵌入可以看做是一种压缩技术,能够起到降维的作用。
- 向量计算比直接在图上操作更加的简单、快捷。
回顾机器学习任务的基本流程:
第一步的特征工程即需要把每条样本表示为向量,即特征向量。不论输入是非数值类型(图片、语音、文字、逻辑表示等),或者本身就是数值类型,我们都需要将输入数字化为特征向量。
而且,因为特征工程决定着算法上限。所以我们不仅要转为特征向量,而且希望转成的特征向量也足够好。
因此,基于自动编码器(Auto-encoder)和词嵌入(Word-Embedding)的启发,我们期望转换后的特征向量(或者叫Embedding),能够自带节点信息(例如在特征空间上,相似的节点会离得特别近),这将非常有利于机器学习的任务。
怎样将图中的每一个Node表示成一个Vector呢?
假设有一图 G G G:
- V V V是节点集合
- A A A是图的邻接矩阵
- 节点自身的features 和网络包含的其余信息我们都没使用到
主要有三步:
- 定义一个可以将Graph变为Vector的编码器encoder
- 定义一种node similarity function(用于测量Graph中两个Node之间的相似度)
- 调参,使得我们encoder最优,目的是使原始空间Graph中两个Node的相似度等于embedding space中两个向量的相似度:
s i m i l a r i t y ( u , v ) ≈ z v T z u similarity(u, v) \approx z_v^T z_u similarity(u,v)≈zvTzu
怎样定义Node Similarity?
当两个节点满足以下特征的时候,我们是不是可以认为这两个节点就更相似呢?
- 这两个节点之间有边
- 这有共同的邻居
- 这两个节点在网络中担任相同的角色(have similar structural Roles)
- …?
我们可以按照以下方式,选择怎样定义节点相似度:
- Adjacency-based similarity
- Multi-hop similarity
- Random walk approaches
图嵌入也需要满足一定的要求属性选择:
确保嵌入能够很好地描述图的属性,即需要表示图拓扑,节点连接和节点邻域。这样后期的预测或可视化才能获得较好的表现。
- 嵌入的维度: 实际嵌入时很难找到表示的最佳维数,维度越大能够保留的信息越多,但是通常有更高的时间和空间复杂度。较低的维度虽然时间、空间复杂度低,但无疑会损失很多图中原有的信息。
- 可扩展性: 大多数真实网络都很大,包含了大量节点和边。嵌入方法应具有可扩展性,能够处理大型图。定义一个可扩展的模型具有挑战性,尤其是当该模型旨在保持网络的全局属性时。网络的大小不应降低嵌入过程的速度,一个好的嵌入方法不仅在小图上高效嵌入,同时也需要在大图上能够高效地嵌入。
2 节点嵌入的方法
- DeepWalk
- node2vector
- TransE
2.1 Deep Walk
DeepWalk通过随机游走(truncated random walk)学习出一个网络的表示,在网络标注顶点很少的情况也能得到比较好的效果。
随机游走起始于选定的节点,然后从当前节点移至随机邻居,并执行一定的步数,该方法大致可分为三个步骤:
- 采样:通过随机游走对图上的节点进行采样,在给定的时间内得到一个节点构成的序列,论文研究表明从每个节点执行32到64次随机遍历就足够表示节点的结构关系;
- 训练skip-gram:随机游走得到的节点序列与word2vec方法中的句子相当。文本中skip-gram的输入是一个句子,在这里输入为随机游走采样得到的序列,进一步通过最大化预测相邻节点的概率进行预测周围节点进行训练和学习。
- 通常预测大约20个邻居节点-左侧10个节点,右侧10个节点。
DeepWalk 通过随机游走去可以获图中节点的局部上下文信息,因此学到的表示向量反映的是该点在图中的局部结构,两个点在图中共有的邻近点(或者高阶邻近点)越多,则对应的两个向量之间的距离就越短。
但是,DeepWalk方法随机执行随机游走,这意味着嵌入不能很好地保留节点的局部关系,Node2vec方法可以解决此问题。
随机游走有哪些优点?
- Expressivity: Flexible stochastic definition of node similarity
that incorporates both local and higher-order neighborhood
information
包含了局部和高阶的邻域信息 - Efficiency: Do not need to consider all node pairs when training; only need to consider pairs that co-occur on random walk
训练时不需要考虑所有节点对;只需要考虑在随机游走中共同发生的对
怎样寻找一个节点的邻居?
N
R
(
u
)
N_R(u)
NR(u),给定一个规则R,在此规则下寻找节点u的邻居。
参考
作者:soplars 链接:https://zhuanlan.zhihu.com/p/85677181
作者:Mark 链接:https://zhuanlan.zhihu.com/p/87572912