GraphCL: Contrastive Self-Supervised Learning of Graph Representations

https://arxiv.org/pdf/2007.08025

https://github.com/Shen-Lab/GraphCL

GraphCL: Contrastive Self-Supervised Learning of Graph Representations,2020,NIPS

总结:论文很短,作者提出对比学习框架GraphCL也简单易懂,但是实验结果很不错。作者借鉴类似GraphSAGE里面子图构造方法,首先为每个节点采样L-hop子图,然后对子图添加随机扰动得到不同的view,然后在两个view中进行node-node对比,通过最大化正样本与锚点之间距离、最小化负样本与锚点间的距离来学习节点表示。GraphCL算是图对比学习里的开山之作,后面很多文章都是基于这个方法的进一步拓展和深入。

1.简介

1.1 摘要

We propose Graph Contrastive Learning (GraphCL), a general framework for learning node representations in a self supervised manner. GraphCL learns node embeddings by maximizing the similarity between the representations of two randomly perturbed versions of the intrinsic features and link structure of the same node’s local subgraph. We use graph neural networks to produce two representations of the same node and leverage a contrastive learning loss to maximize agreement between them. In both transductive and inductive learning setups, we demonstrate that our approach significantly outperforms the state-of-the-art in unsupervised learning on a number of node classification benchmarks.

我们提出了图对比学习GraphCL——一种通用的自监督节点表示学习框架。GraphCL通过最大化同一节点局部子图的链路结构和两个内在特征随即扰动版本的表示之间的相似性来学习节点嵌入。我们使用GNNs生成相同节点的两个表示,然后利用对比损失最大化这两个表示之间的一致性。在多种节点分类标准数据集中,无论是transductive还是inductive设定,我们都证明了我们的方法优于当前最优无监督学习模型。

1.2 本文工作

背景: 越来越多领域用图结构作为数据表示形式。但是由于图的复杂性,很少有方法对它进行探索。最近几年,图表示学习作为一种图分析手段得到了研究人员的广泛关注。现有的大部分图表示学习方法都是致力于将通用的神经网络拓展到图数据上,即都属于GNNs和Deep Geometric Learning范畴。这些方法都过度依赖人工标记的有标签数据集,即所谓的有监督形式。虽然有人受NLP中一些方法的启发,提出了DeepWalk、node2vec等无监督方法。但是这些无监督方法都存在同质性假设。其他一些基于自编码器的方法,比如VGAE等,也采用了同质性假设。这些方法虽然在学习强大节点表示方面取得了成功,但是一来同质性假设使这些方法偏向于强调节点的直接邻近性而不是拓扑信息。18年提出的DGI模型,虽然和之前的无监督方法不一样,但是通过最大化输入图的的全局和局部之间的互信息来学习节点表示,需要学习整图的全局表示,代价过大。

动机: 如前文所说,很多情况下人工标记图数据代价过高或不可行,而现有的很多无监督方法过度强调图的同质性,存在很大局限。最近提出的基于互信息的DGI虽然没有这个问题,但是需要计算整图表示,代价过高。作者希望基于对比学习,提出一种更优秀的无监督图表示学习框架。

本文工作: 作者提出了一种通用的图对比学习框架,通过对输入图施加扰动得到不同的view,然后在两个view间进行node-node级对比。(这应该是最早提出这种对比框架的文章,开创性意义比较大。)

2. 方法

作者提出的GraphCL框架非常简单,如上图1所示,包含下列三个组件:

  • 随机扰动: 对每个节点的L-hop子图进行随机扰动,生成两个不同的view。作者本文采用的扰动方式有两种:结构和属性。具体来说按照概率pp随机丢掉子图中的边,对于节点属性采用dropout。

  • GNN编码器: 其功能为:学习每个节点uu,通过扰动后得到的两个L-hop子图的表示

  • 对比损失: 将不同view下同一个节点看做正例对,其余所有节点对看做负例对。对于每个节点uu,定义如下对比损失:

    l(u)=l1,2(u)+l2,1(u)l(u)=l_{1,2}(u)+l_{2,1}(u)

    其中li,j(u)l_{i,j}(u)定义为:

    li,j(u)=logexp(s(hu,i,hu,j)/τ)vB1[vu]exp(s(hu,i,hv,i)/τ)+vBexp(s(hu,i,hv,j)/τ)l_{i, j}(u)=-\log \frac{\exp \left(\mathrm{s}\left(h_{u, i}, h_{u, j}\right) / \tau\right)}{\sum_{v \in \mathcal{B}} \mathbb{1}_{[v \neq u]} \exp \left(\mathrm{s}\left(h_{u, i}, h_{v, i}\right) / \tau\right)+\sum_{v \in \mathcal{B}} \exp \left(\mathrm{s}\left(h_{u, i}, h_{v, j}\right) / \tau\right)}

    其中s(hu,i,hu,j)=hu,ihu,j/hu,ihu,j\mathrm{s}\left(h_{u, i}, h_{u, j}\right)=h_{u, i}^{\top} h_{u, j} /\left\|h_{u, i}\right\|\left\|h_{u, j}\right\|表示余弦相似度。上述公式分子表示正例对节点间相似度,分母左边表示同视角不同节点组成的负例对(即视角内,inter-view),分母右边表示不同视角不同节点组成的负例对(即视角间,intra-view)。

下面介绍下,每一轮采样1个minibatch节点B\mathcal B训练GraphCL的具体步骤:

  1. 对于每个节点uu,用(Xu,Au)(X_u,A_u)表示该节点的L-hop子图;

  2. 按照前文中方法,施加两个随机扰动t1t_1t2t_2

    • (X~u,1,A~u,1)t1(Xu,Au)\left(\widetilde{X}_{u, 1}, \widetilde{A}_{u, 1}\right) \sim t_{1}\left(X_{u}, A_{u}\right)
    • (X~u,2,A~u,2)t2(Xu,Au)\left(\widetilde{X}_{u, 2}, \widetilde{A}_{u, 2}\right) \sim t_{2}\left(X_{u}, A_{u}\right)
  3. 使用图编码器,分别计算两个视角下的节点嵌入:

    • hu,1=f(X~u,1,A~u,1)h_{u, 1}=f\left(\widetilde{X}_{u, 1}, \widetilde{A}_{u, 1}\right)
    • hu,2=f(X~u,2,A~u,2)h_{u, 2}=f\left(\widetilde{X}_{u, 2}, \widetilde{A}_{u, 2}\right)
  4. 利用前文定义的损失函数,更新模型参数:

    L=1BuBl(u)\mathcal{L}=\frac{1}{|\mathcal{B}|} \sum_{u \in \mathcal{B}} l(u)

3. 实验

3.1 实验设置

所有实验中,GraphCL图编码器采用的都是GraphSAGE中的更新规则:

hu(l)(W(l1))MEAN({hu(l1)}{hv(l1),vN(u)})(5)h_{u}^{(l)} \leftarrow\left(W^{(l-1)}\right)^{\top} \cdot M E A N\left(\left\{h_{u}^{(l-1)}\right\} \cup\left\{h_{v}^{(l-1)}, \forall v \in \mathcal{N}(u)\right\}\right)\tag 5

所有GNN聚合操作采用的都是:

H(l)=A^H(l1)W(l1)(6)H^{(l)}=\hat{A} H^{(l-1)} W^{(l-1)}\tag 6

  • Transductive Learning

    对于Citeseer和pumed数据集,采用公式6定义的单层GNN。

    对于Cora数据集,采用双层GNN作为编码器:

    f(X,A)=A^σ(A^XW(0))W(1)f(X, A)=\hat{A} \sigma\left(\hat{A} X W^{(0)}\right) W^{(1)}

  • Inductive Learning

    所有数据集上都适用三层mean-polling编码器:

    H(1)=σ(A^XW1(0)+XW2(0))H(2)=σ(A^H(1)W1(1)+H(1)W2(1))f(X,A)=A^H(2)W1(2)+H(2)W2(2)\begin{array}{c} H^{(1)}=\sigma\left(\hat{A} X W_{1}^{(0)}+X W_{2}^{(0)}\right) \\ H^{(2)}=\sigma\left(\hat{A} H^{(1)} W_{1}^{(1)}+H^{(1)} W_{2}^{(1)}\right) \\ f(X, A)=\hat{A} H^{(2)} W_{1}^{(2)}+H^{(2)} W_{2}^{(2)} \end{array}

3.2 实验结果

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2022 Yin Peng
  • 引擎: Hexo   |  主题:修改自 Ayer
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信