Stanford Jure大神的又一大作
作者: 雪的味道 (清华大学网研院)
编辑: Houye
Abstract
本文主要提出了一个自监督学习的方法,用来做gnn的与训练,这个策略成功的关键是在单个节点和整个图的层次上预先训练一个到代表性的GNN,以便GNN能够同时学习有用的局部和全局表示。作者发现传统的预训练策略,无论是在graph级别还是节点级别,都无法有效的提升下游任务的表现,甚至可能起到反效果。而作者的策略能有效的避免这个反效果,并且在分子属性预测和蛋白质功能预测上,提高了9.4%的AUC。
Introduction
特定任务的标签是非常稀缺的。真实世界中,图数据通常包含与原始数据分布不一致的样本点,意思就是图数据中,训练集与测试集的数据分布很可能不一致。这是真实世界的图数据的一个普遍现象。以往的一些研究表明(Xu et al., 2017; Ching et al., 2018; Wang et al., 2019),一个成功的迁移学习不仅仅是增加与下游任务来自同一领域的标注好的预训练数据集的数量。相反,它需要大量的领域专业知识来仔细选择与感兴趣的下游任务相关的样本和目标标签。否则,可能带来反效果,被称之为negative transfer.
本文工作的两个核心贡献:1.作者首次系统的探索了大规模GNN预训练。为此,作者建立了两个新的预训练数据集,并且分享出来:一个有2M graph的化学数据集和一个有395K graph的生物数据集。同时表明,大尺度的特定领域数据集的预训练研究是至关重要的,现有的下游任务数据集太小,无法以统计上可靠的方式进行模型评估。2.提出了一种有效的GNN预训练策略,并证明了该策略对于hard transfer-learning的有效性以及分布外的泛化能力。
值得注意的是,一个看似强大的预训练策略(即,对于图级预测任务,使用最先进的图神经网络架构的图级多任务监督预训练)只会带来边际性能增益。(marginal performance,查了下这个词的意思,综合可以理解成效果不好,增加的有限)。而且,有可能带来反效果(negative transfer)
本文的高效预训练策略,主要思想是用易于得到的节点级别的信息,去让GNN捕获节点与边以及图级别的特定领域的知识。这有助于GNN学习到全局和局部级别的有效表示,并且至关重要的是,能够迁移到不同的下游任务的图级(通过节点表示的集成)表示。本文的策略与朴素的策略相比,最大的不同是朴素的策略要么只用在节点级别的表示,要么只捕获图级别的表示。
本文的预训练策略与表现最好的GNN结构GIN一起使用,在基准数据集上取得了SOTA的结果表现,并且避免了负迁移。另外,作者发现GIN在预训练的收益要比其他模型如GCN,GraphSAGE和GAT等等要高,并且预训练的GNN在微调阶段训练收敛速度高了一个量级
Strategies for Pre-Training GNN
预训练策略的核心是同时在独立的节点级别与全图级别去预训练GNN。下面接着介绍本文的节点级别预训练与图级别预训练,最后介绍整个预训练策略
Node-Level Pre-Training
对于节点级别的预训练,本文的方法是用那些容易获得的没有标注的数据,来捕捉特定领域的知识与规则。下面提出了两个自学习策略,Context Prediction和Attribute Masking
Context Prediction:Exploiting distribution of graph structure
在这部分,我们用子图去预测周围的图结构。这里的预训练的目标是能够使得相似结构的节点的embedding相似。这一部分学习的embedding方式类似于graphsage和deep graph infomax的负采样,简单来说就是定义了一个context graph,用他的embeding和邻居做训练,认为两者相似,而不同节点的邻居和context graph不相似。
Neighborhood and context graphs
K层的GNN的节点的embedding相当于节点的K阶邻居聚合,而我们定义context graph为围绕着节点的r1到r2阶邻居之间, r1与r2为超参数。其中 r1<K,所以有些节点即是邻居节点,又是context graph的节点,这些节点我们称之为context anchor nodes。这些节点提供了邻居和context graph是如何相连的信息。
Encoding context into a fixed vector using an auxiliary GNN.
由于combinatorial nature of graphs(这句话很不解,直接翻译是图的组合性质,我的理解是图的离散性质,可是 这和nlp有什么关系,难道是指节点个数不确定?),直接预测context graph是很困难的。这与自然语言处理不同,自然语言处理中,单词都是定长有限的词表中来的。为了使得context可以预测,作者将context graphs 编码成一个定长的向量。最后,使用了一个变种gnn,作者称之为context gnn,来学习context graph的节点的embedding.然后对context anchor nodes的embedding取平均得到一个定长的context embedding。简单来说,就是学embedding,然后拿这些节点的平均作为context embedding,本文符号记为 [公式]
Learning via negative sampling
就是采用负采样的方式进行构造负样本训练,gnn得到的节点embedding和context graph的embedding,如果是同一个节点就更接近,不同节点则更远。loss采用logloss,二分类问题
Attribute Masking:exploiting distribution of graph attributes
随机掩盖一些节点/边的特征,用特殊的标识代替,然后放进gnn学周围的embedding,利用周围的embedding来预测这个特征。
Graph-Level Pre-Training
本文目标是确保节点和图级别的embedding都是高质量的,所以可以鲁棒的迁移到下游任务。
Supervised Graph-Level Property Prediction
作者通过将在图级别预测任务去预训练embedding来得到特定的图级别任务领域知识。作者利用多任务联合学习不同的任务来预训练。
然而,朴素的直接多任务图级别的预训练可能在迁移的时候失效,因为这些任务可能与下游任务无关,造成negative transfer。一个解决方案是选择真正相关的预训练任务,只拿这些任务预训练。然而,寻找这些任务代价非常大。
多任务学习的预训练只用来做图级别的预训练,因此,创造graph embedding的这些局部节点的embedding可能会变得无意义。这些无意义的节点会加剧negative transfer,许多没有用的与训练任务会互相干扰。
所以,基于此,才有了之前先预训练节点级别的embedding的方法,作为正则,然后再进行graph级别的预训练。
Structual Simailarity Prediction
额,作者也没做这个工作,只是觉得这是个不错的方向,写上来占坑,难点主要在于对于graph相似度的度量困难,目前没有一个比较好的定义。
剩下的部分
实验由于我根本不知道这个数据集,看的没有啥直观感受,只能像作者说的那样,确实有效吧。