GCC: Graph Contrastive Coding for Graph Neural Network Pre-Training 论文阅读

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特征向量即为它的广义位置嵌入。

GIN详解

GIN 最核心的部分,以生成节点级别的表示为例:
在这里插入图片描述

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版本务必处于[0.4.3,0.5)之间,版本过高有很大问题
DGL 0.4.3

项目目录:
在这里插入图片描述
注意,要预先将GCC-master加入到sys.path中

预训练完成的模型可以直接下载不必重新训练,对于下游节点分类任务,generate.py+node_classification.py对应下游任务中freeze模式,拿到embedding后拿LR回归进行分类,不再反复迭代模型参数:
在这里插入图片描述

fintune.sh对应full-train模式,encoder参数继续训练

额外地,如果想应用在自己的数据集上,仿照downstream.tar.gz中任一文件夹中的数据集格式定义即可,同时修改data_util.py等相关文件,根据报错一步步改就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值