论文链接:https://arxiv.org/pdf/2006.15437.pdf
代码链接:https://github.com/acbull/GPT-GNN
论文来源:KDD 2020
参考文档:https://blog.youkuaiyun.com/c9yv2cf9i06k2a9e/article/details/108231322
1、简介
本文研究如何利用图生成作为自监督任务来预训练 GNN。我们将图的生成概率分解成两个模块:1)节点特征生成;2)图结构生成。通过对这两个模块建模,GPT-GNN 可以捕捉图任务里特征与结构之间的关联,从而不需要很多的标注数据就可达到很高的泛化性能。
2、背景
机器学习的成功很大程度上取决于数据。但是,高质量的标记数据通常很昂贵且难以获得,尤其是对于希望训练参数较多的模型。而相对应的,我们却可以很容易地获取大量的无标记数据,其数量可以是标记数据的数千倍。
例如,在社交网络上进行异常检测时,恶意帐户的标注需要依赖于专家知识,数量较小,而整个网络的规模却可以达到十亿规模。
为了解决标注数据较少,尽可能利用其无标注数据,一个常规的做法是自监督的预训练(self-supervised pre-training)。其目标是设计合理的自监督任务,从而使模型能从无标注数据里学得数据的信息,作为初始化迁移到下游任务中。由于目标任务中很多的知识已经在预训练中学到,因此通过预训练,我们只需要非常少量的标注数据,就能得到较好的泛化性能。
在 NLP 领域,BERT 及其变种的取得了巨大的成功,证明了语言模型作为一个自监督任务,可以帮助训练非常深的 Transformer 模型,以捕捉语言的底层知识,如语法、句法、词义等。
同样,在 CV 领域,最近的工作如 SimCLR 也显示出通过对比学习(Contrastive Learning)对 ResNet 进行预训练也可以显著提升泛化性能。这些成功表明,无标注数据本身包含丰富的语义知识,因此如果通过预训练可以使模型能捕捉无标注数据的分布,就能作为初始化帮助一系列下游任务。
受到这些工作的启发,我们思考能否将预训练的想法运用到图数据分析中。本工作就致力于预训练图神经网络,以期 GNN 能够学习到图数据的结构和特征信息,从而能帮助标注数据较少的下游任务。
3、GPT-GNN模型
要在图数据上做预训练,第一个问题是:如何设计合适的无监督学习任务?
本工作提出用生成模型来对图分布进行建模,即逐步预测出一个图中一个新节点会有哪些特征、会和图中哪些节点相连。
GPT-GNN通过最大化图的似然函数来预训练 GNN,也就是说
θ ∗ = max θ p ( G ; θ ) θ^∗=\mathop{\max}\limits_θp(G;θ) θ∗=θmaxp(G;θ)
图的生成过程是迭代生成过程,假定对图中的点进行排列 π π π,在 π π π 的排列顺序下定义图的似然函数
p ( G ; θ ) = E π [ p θ ( X π , E π ) ] p(G;θ)=\mathbb{E}_π[p_θ(X^π,E^π)] p(G;θ)=Eπ[pθ(Xπ,Eπ)]
其中 X π X^π Xπ定义了节点向量 X π ∈ R ∣ V ∣ × d X^π∈R^{∣V∣×d} Xπ∈R∣V∣×d, E i π E_i^{\pi} Eiπ表示所有与节点 i π i^π iπ相连的边。对数似然函数定义为
log p θ ( X , E ) = ∑ i = 1 ∣ V ∣ log p θ ( X i , E i ∣ X < i , E < i ) \log p_θ(X,E)=∑_{i=1}^{∣V∣}\log p_θ(X_i,E_i∣X_{<i},E_{<i}) logpθ(X,E)=i=1∑∣V∣logpθ