论文标题 | graph2vec: Learning Distributed Representations of Graphs
论文来源 | KDD/MLG 2017
论文链接 | https://arxiv.org/pdf/1707.05005.pdf
源码链接 | https://github.com/MLDroid/graph2vec_tf

TL;DR

目前图表示学习方法主要是学习图中节点或者子图的隐含向量,但现实中很多任务例如图分类或者聚类都需要将整个图编码成固定长度的向量;此外,以前基于图核的方法由于使用自定义特征因此通用性较差。本文中提出的一种无监督学习的图编码框架 graph2vec 可以编码任意大小的图,可以应用在downstream 的图分类或者聚类任务中;

Problem Statement

给定图集合G={G1,G2,}\mathbf{G} = \{G_1, G_2, \cdots \} 和向量编码维度δ\delta,目标是学习到每个图GiG_iδ\delta 维表示向量;

给定一个图G=(N,E,λ)G=(N, E, \lambda) 和子图sg=(Nsg,Esg,λsg)sg = (N_{sg}, E_{sg}, \lambda_{sg}),其中λ\lambda 表示λ:N\lambda : N \rightarrow \ell 节点对应的标签,sgsgGG 的子图如果存在单射函数μ:NsgN\mu : N_{sg} \rightarrow N ,满足(n1,n2)Esg(n_1, n_2) \in E_{sg} 如果(μ(n1),μ(n2))E(\mu(n_1), \mu(n_2)) \in E。论文中用到的是 rooted subgraph : 节点nn 且深度为dd 的子图为节点nn d-hop 之内所有的节点和边。

Model / Algorithm

文章的主要思路是受 doc2vec 启发的,因此首先简单介绍下 doc2vec 的思路,再介绍 graph2vec

doc2vec

给定文档D={d1,d2,...,dN}D=\{d_1, d_2, ..., d_N\} 及其对应文档diDd_i \in D 采样的单词c(di)={w1,w2,...,wli}c(d_i) = \{w_1, w_2, ..., w_{li}\},doc2vec 优化的目标似然函数为

j=1lilogPr(wjdi)\sum_{j=1}^{l_{i}} \log \operatorname{Pr}\left(w_{j} \mid d_{i}\right)

其中Pr(wjdi)\operatorname{Pr}\left(w_{j} \mid d_{i}\right) 定义为

exp(dwj)wVexp(dw)\frac{\exp \left(\vec{d} \cdot \vec{w}_{j}\right)}{\sum_{w \in \mathcal{V}} \exp (\vec{d} \cdot \vec{w})}

然后训练过程中使用了负采样方法优化。

graph2vec

按照 doc2vec 的思路用到图结构上,论文中提出的模型采样思路为:

以 graph 代替 document,以 rooted subgraph 代替 work,整体的算法流程如下:

算法主要包括两部分:生成 rooted subgraphs,图编码训练过程;下面简单说明下 rooted graph 生成过程。

Extracting Rooted Subgraphs
生成 rooted subgraph 的主要过程为 WL relabeliing process,详情可参考文章 Weisfeiler-lehman graph kernels,主要思路是把当前节点nn 及其dhopd-hop 映射到一个子图节点集合中国;下面👇 直接看看论文中的生成 subgraph 算法流程:

负采样和优化

由于训练过程中整个子图词汇表规模较大,因此论文中采用负采样的方法提高效率,即在训练图G1G_1 时,选择不属于GiG_i 子图集的kk 个子图样本cSGvocab ,k<<SGvocab  , cc={}c^{\prime} \subset S G_{\text {vocab }}, k<<\left|S G_{\text {vocab }}\right| \text { , } c \cap c^{\prime}=\{\}

最后使用 SGD 优化器来训练模型参数。

Experiments

对于图分类和聚类任务算法的实验结果如下所示;

联系作者