Hamilton W L, Ying R, Leskovec J. Representation learning on graphs: Methods and applications[J]. arXiv preprint arXiv:1709.05584, 2017.
该论文是斯坦福大学的Jure组的博士生出的关于图表示学习的综述,系统的介绍了图表示学习领域目前的发展现状。
图表示学习 | |
---|---|
目标 | 将网络信息转化为低维稠密的实数向量,并用于已有的机器学习算法的输入;用低维连续特征表示原有的高维离散特征 |
为什么需要 | (1)数据高度稀疏(one-hot 编码/ 邻接矩阵)并且 N × N N \times N N×N 高维度 (2)节点之间的相似性难以度量 |
应用场景 | 节点分类、链接预测、社区发现、推荐系统 |
传统方法 | 采用人工选取的图的总结特征,如节点度数。缺点:人工选取的特征普适性差,并且耗时 |
表示的含义 | (1)节点的全局位置(相邻节点具有相似的表示) (2)节点的角色 |
基于高阶关系的表示学习:把网络顶点关系的相似性从一阶扩展到高阶。对各阶关系采用不一样的目标函数,然后将各阶关系获取的分布式表示进行拼接,进而获得顶点表示。
Node embedding(most common)
Edge embedding
Sub-graph embedding
Whole-graph embedding
embedding global position | 细分类型 | 代表工作 |
---|---|---|
Shallow embedding | Laplacian eigenmaps: | GF 、HOPE |
Random walk based | DeepWalk、node2vec,LINE | |
Deep Learning based | auto-encoder | SDNE、DNGR |
GCN / neighborhood aggregation | GCN,GraphSAGE |
embedding structural roles | 细分类型 | 代表工作 |
---|---|---|
随机游走 | struc2vec,RolX | |
谱图理论 | GraphWave |
Transductive learning vs Inductive learning
Transductive learning: unlabelled data is the testing data
Inductive learning: unlabelled data is not the testing data
在训练过程中,已知testing data(unlabelled data)是transductive learing
在训练过程中,并不知道testing data ,训练好模型后去解决未知的testing data 是inductive learing
简单来说,transductive和inductive的区别在于我们想要预测的样本,是不是我们在训练的时候已经见(用)过的。
大多数embedding方法属于shallow embedding方法即浅层模型 (e.g. node2vec, DeepWalk, Laplcacian Eigenmaps),将节点映射到embedding向量的计算过程类似于查找
E N C ( v i ) = Z v i {\rm ENC}(\mathbf{v}_i)=\mathbf{Zv}_i ENC(vi)=Zvi
v i ∈ R ∣ V ∣ × 1 \mathbf{v}_i \in \R^{|V|\times 1} vi∈R∣V∣×1 是一个one-hot向量,表示 Z Z Z中节点 v i v_i vi 对应的列, Z ∈ R d × ∣ V ∣ \mathbf{Z} \in \R^{d \times|V|} Z∈Rd×∣V∣ 是一个包含所有节点embedding向量的矩阵。shallow embedding方法直接训练矩阵 Z Z Z 。其decoder是计算节点pair-wise相似性。
Encoder-Decoder框架下现有的shallow embedding方法的缺点:
矩阵分解是传统的节点向量化方法,其思想就是对网络的邻接矩阵进行降维,给每个节点生成一个低维表示。
相似性度量:deterministic node similarity measure 确定性
Laplacian Eigenmaps
D E C ( z i , z j ) = ∣ ∣ z i − z j ∣ ∣ 2 2 {\rm DEC} (\mathbf{z}_i, \mathbf{z}_j) = || \mathbf{z}_i - \mathbf{z}_j||_{2}^{2} DEC(zi,zj)=∣∣zi−zj∣∣22
L = ∑ ( v i , v j ) ∈ D D E C ( z i , z j ) ⋅ s G ( v i , v j ) \mathcal {L} = \sum_{(v_i,v_j) \in \mathcal D } {{\rm DEC} (\mathbf{z}_i, \mathbf{z}_j) } \cdot s_{\mathcal G}(v_i,v_j) L=∑(vi,vj)∈DDEC(zi,zj)⋅sG(vi,vj)
Inner-product methods
D E C ( z i , z j ) = z i T z j {\rm DEC} (\mathbf{z}_i, \mathbf{z}_j) = \mathbf{z}_i ^ \mathrm{ T } \mathbf{z}_j DEC(zi,zj)=ziTzj
L ≈ ∥ Z T Z − S ∥ 2 2 \mathcal L \approx \| \mathbf{Z} ^\mathrm{T} \mathbf{Z} - \mathbf{S} \|_2^2 L≈∥ZTZ−S∥22 该方法的目标是对于每个节点学习embedding,使得embedding向量之间的内积近似于某种确定的相似性度量
目标:优化节点embedding使得倾向于在较短的随机游走中同时出现的节点,具有相似embedding
相似性度量:flexible, stochastic measure of node similarity 随机性
DeepWalk & node2vec
DeepWalk 是最早提出的基于 Word2vec 的节点向量化模型。其主要思路,就是利用构造节点在网络上的随机游走路径,来模仿文本生成的过程,提供一个节点序列,再套用 Word2Vec 对每个节点进行嵌入表示。因为知道了节点 V 的前 k 个节点和后 k 个节点,就能很好地将网络邻居结构存入向量中。其目标就是最大化
Node2vec 是对 DeepWalk 的一种更广义的抽象,它引入了 biased-random walks,用来刻画每次随机游走是偏深度探索(DFS)还是广度探索(BFS),分别侧重社区结构和节点角色的信息。由于 node2vec 有 p 和 q 两个超参数,所以它是一个比较灵活的模型框架。后面也会讲到,它在节点分类问题中有着不俗的表现。
LINE
LINE(Large-scale Information Network Embeddings) 直观上看其实并没有用随机游走。但是[2]将其归类到随机游走的范畴,原因是它和 DeepWalk 的框架类似地应用了概率损失函数。即通过最小化节点 i , j i,j i,j相连的经验概率 p ^ ( i , j ) \hat{p}(i,j) p^(i,j) 与向量化后两个节点相似性 p ( v i , v j ) p(v_i,v_j) p(vi,vj)的距离,并且同时考虑了一阶和二阶相似度(优化两个损失函数),这和随机游走的底层动机是相似的。在实际计算过程中,作者引入了一系列预处理和优化方法(比如负采样),来加快学习性能。
与shallow embedding的区别:使用深度神经网络,将图结构直接结合到encoder的算法中。具体地,使用自编码器,用来压缩节点邻居的信息。
缺点:
Shallow Embedding | Neighborhood Autoencoder | |
---|---|---|
直接将邻居信息作为输入 | ||
输入 | 相似度 s i s_i si | 节点id |
SDNE
SDNE(Structural Deep Network Embeddings) 将节点的相似性向量 s i s_i si直接作为模型的输入,通过 Auto-encoder 对这个向量进行降维压缩,得到其向量化后的结果 z i z_i zi。其损失函数定义为:
L = ∑ v i ∈ V ∥ D E C ( z i ) − s i ∥ 2 2 \mathcal L=\sum_{v_i \in V}\|{\rm DEC}(z_i)-s_i\|_2^2 L=vi∈V∑∥DEC(zi)−si∥22
不需要利用整张图的邻居方法:
优点:
结合label信息来学习embedding,在节点分类中得到广泛应用。使用交叉熵作为损失函数,代替decoder
上面介绍的都是基于简单的无向图,而真实世界有更复杂的图,如异构节点,边类型。
以上所有方法的优化目标是使相邻节点具有相似表示,而在许多任务中更关注挖掘节点的结构角色(structural role)
struc2vec
从原始图 G \mathcal G G生成辅助图 G k ′ , k = { 1 , 2... } \mathcal G_k^{'} , k =\{1,2...\} Gk′,k={1,2...} , G k ′ \mathcal G_k^{'} Gk′表示节点的k步到达的近邻的结构相似性。使用 R k ( v i ) R_k(v_i) Rk(vi)表示从节点 v i v_i vi 出发k步到达的节点的度的序列,边的权重 w k ( v i , v j ) w_k(v_i,v_j) wk(vi,vj)在辅助图中递归定义为:
w k ( v i , v j ) = w k − 1 ( v i , v j ) + d ( R k ( v i ) , R k ( v j ) ) w_k(v_i,v_j)=w_{k-1}(v_i,v_j)+d(R_k(v_i),R_k(v_j)) wk(vi,vj)=wk−1(vi,vj)+d(Rk(vi),Rk(vj))
d ( R k ( v i ) , R k ( v j ) ) d(R_k(v_i),R_k(v_j)) d(Rk(vi),Rk(vj)) 表示度序列之间的距离。在计算完辅助图中的统计后,struc2vec在这些辅助图上跑biased random walks,将随机游走值作为输入到node2vec优化算法
GraphWave
使用谱图理论
可视化 | 因为节点映射到实数向量,可以利用t-SNE/PCA生成二维的图可视化 |
聚类/社团发现 | 因为节点映射到实数向量,可以利用聚类算法,不仅可以发现社团,还可捕捉不同节点的角色 |
节点分类/半监督 | |
链接预测 |
将节点和编码为低维的向量表示,可以是完整的图 ( S ⊂ V ) (\mathcal S \subset \mathcal V) (S⊂V)或者子图 ( S = V ) (\mathcal S = \mathcal V) (S=V)
在子图上进行表示学习与graph kernel的设计密切相关。
基本思路:将子图等价为节点嵌入的集合,再利用聚合模块将对应子图的节点嵌入聚合
不同的方法之间的区别是聚合的方式不同。
Sum-based approaches
对子图中的节点嵌入进行求和
Graph-coarsening approaches
对图进行粗粒度化,对粗粒度化层的图进行节点聚类
不同于聚合邻居信息,GNN将图作为节点之间消息传递的工具
主要用于子图分类,如分子图。
还用于图像分类(图像转换为图表示),逻辑推理等
目前图表示学习领域仍缺少一个一致的理论框架,准确地描述图表示学习的目标。
当前大多数工作隐含的目标是生成在特定的任务上表现较好的表示,如分类、链接预测、可视化。
目前network embedding方法的问题
大多数方法的测评假设了节点的属性,embedding和的边等都可以存在主存中,但是实际大图中无法做到,以分布式的形式存储。
研究可以decode复杂的motif的decoding算法
时序相关的动态网络
需要改进embedding方法使其能有效地在大量子图中进行推理。目前的方法,我们在学习之前需要预先定义目标子图。
提高可解释性