论文地址:GCC:Graph Contrastive Coding for Graph Neural Network Pre-Training
GCC:子图个体判别对比学习
Abstract
图神经网络在很多下游任务表现良好且适用于真实世界问题,但先前的工作主要为某个数据集,设计精致的模型来解决领域问题,对于跳出领域的问题没有转移性,所以作者提出了GCC图对比编码,预训练任务为子图个体判别。在三个图学习任务和10个图数据集上做了实验,效果具有竞争力或者比task-specific的方法更好,这表示预训练微调这种方法还有很大潜力
Introduction
本文旨在设计一种在GNN上的自监督预训练模型,然后再不同的图任务或不同的图上进行微调,使用到了对比学习技术,采用子图个体判别为代理任务
对于一个顶点从其多跳网络中采样出子图作为实例个体,目的是区别从一个顶点采样出来的子图与其他顶点采样出来的子图
Graph Contrastive Coding (GCC)
The GNN Pre-Training Problem
GNN预训练的问题就是学习将结点映射到低维特征向量表示,有以下两个特征:
- 结构相似性:将局部拓扑结构相似的结点映射到相近的空间
- 可迁移性:能兼容训练过程中没见过的结点
GCC Pre-Training
从查字典的角度来讲,给一个编码器过的查询q,一个编码过的字典K+1的值串{k_0, …, k_K},对比学习查找q在字典中匹配的单个键(用k+表示),采用InfoNCE
三个问题:
- 怎么定义图里面的子图实例
- 怎么定义相似的实例对
- 什么才是正确的图编码器
Q1: Design (subgraph) instances in graphs
单个结点作为实例是不行的,因为训练前是纯粹的结构表示,没有额外的特征或属性输入
图3左两个就是2-ego子图,GCC将每个r-ego网络视为它自己的一个不同的类,让模型将相似的实例与不同的实例区分开来
Q2: Define (dis)similar instances
CV领域有旋转,裁剪这类增强作为正样本,对r-ego做增强主要以下三步:
- Random walk with restart:
- 从自我顶点v开始在G上随机游走。游走以与边权重成比例的概率迭代地移动到其邻域。此外,在每一步中,游走以一个正的概率返回到起始顶点
- Subgraph induction:重新再来随机游走,得到的样本就视为增强的版本
- Anonymization:以任意顺序将采样图重新标记
重复上述过程就得到正样本对,如果是从不同的r-ego中得到的增强就是负样本对,通过DGL库可以实现
在带重启的随机游走采样中,重启概率控制着自我网络的半径(即r),使用0.8作为重启概率
匿名化步骤旨在保持底层的结构模式,并隐藏精确的顶点索引。这种设计避免了学习子图实例鉴别的一个简单的解决方案,即简单地检查两个子图的顶点索引是否匹配。此外,它有助于在不同的图之间传递学习模型,因为这样的模型与特定的顶点集没有关联
Q3: Define graph encoders
GCC对编码器不敏感,作者使用GIN,但多数GNN的编码器都需要顶点特征,所以用每个采样子图的图结构来初始化顶点特征,使用了广义位置嵌入