GCC: Graph Contrastive Coding for Graph Neural Network Pre-Training 论文阅读
1. 论文部分
论文原文
在图结构数据上预训练+微调
1.1 预训练
预训练任务原理:
预训练任务要求模型要有可迁移性,作者是通过仅根据顶点的局部结构来区分它们,不考虑节点的特征及标签来实现的,局部拓扑结构相似的点在embedding space中也相近
预训练过程整体思路: 由上面流程图知,基本是:采样 --> encode --> 计算loss 这样一个过程
1.1.1 采样
采样指的是在中心节点的n阶邻居构成的图中,采取包含中心节点的子图,采样操作是带重启的随机游走。预训练选用的是自监督方法,是通过对比学习来实现的。对比学习中,每个中心节点自成一类,正样本是来自同一中心节点邻居的子图采样对,负样本是来自不同中心节点邻居的子图采样对。
1.1.2 encode
graph_encoder选取GIN,比GCN/GAT/GraphSAGE表征能力要更好。向encoder中输入中心节点邻居图的子图,输出中心节点低维特征向量。子图x_q经编码后变为表征向量q,其它同理。
关于GIN的补充:GIN是GNN的一种,除了输入图的结构外,还需要输入图中节点的特征矩阵。由于预训练任务应具有可迁移性,不能直接选取数据集中自带的节点特征,仅考虑节点的局部拓扑结构,因此输入GIN中的节点特征是从节点的局部结构(采样子图)中提取得到的结构性的特征,称为 Generalized positional embedding(广义位置嵌入)。怎么算的:对于每个采样子图,对它对应的归一化的拉普拉斯矩阵进行特征分解,得到的top特征向量即为它的广义位置嵌入。
1.1.3 loss
loss: 选用InfoNCE,是对比学习中常用的一种损失函数 公式中,q是原始样本的表征向量,k+是原始样本的正样本的表征向量,T是超参数.
作者对比学习实现部分涉及MoCo、InfoNCE等前置知识,可参考 here
1.2 微调
微调,也就是下游任务,可以是节点/图级别任务,作者提供了freezing和full fine-tuning两种微调模式
区别在于:freezing模式冻结了f_q encoder模型参数,full fine-tuning模式中f_q encoder模型参数也将参与下游任务迭代
2. 作者代码部分
https://github.com/THUDM/GCC
仅支持linux,如若安装最新版dgl 官网链接 ,保证pytorch>1.9.0
to be continued…
|