本文是对《Graph Contrastive Coding for Graph Neural Network Pre-Training》一文的浅显翻译与理解,如有侵权即刻删除。
朋友们,我们在github创建了一个图学习笔记库,总结了相关文章的论文、代码和我个人的中文笔记,能够帮助大家更加便捷地找到对应论文,欢迎star~
Chinese-Reading-Notes-of-Graph-Learning
更多相关文章,请移步:文献阅读总结:网络表示学习/图学习
Title
《Graph Contrastive Coding for Graph Neural Network Pre-Training》
——KDD2020
Author: 裘捷中
总结
文章认为目前的网络表示学习工作都是针对特性任务,且要在不同的数据集上分别训练模型,无法实现不同数据集上的迁移工作。因此,文章提出了GCC算法,利用图对比学习来进行图神经网络的预训练,用这种方法学习得到的对图和节点的编码器,可以直接应用到未训练数据集上,只需要进行简单微调。
1 预训练
1.1 损失函数
文章希望预训练得到的嵌入函数具有结构相似性(结构相似的节点嵌入更加接近)和可迁移性(可以用于未训练的数据集上)两种特点。基于这种思想,算法的损失函数构建如下:
损失函数的目的在于最大化分子数值,即属于同一结构的节点嵌入在空间上更接近,因而得到的值也就更大,其示意图如下:
以该图为例,graph_q为源节点,则分子计算的就是graph_q和graph_0的相似性,它们是属于同一结构的。而在分母中,除了计算属于同一结构的graph_0,属于不同结构的graph_1和graph_2也要和graph_q进行计算并将最终结果加和。
1.2 问题定义
基于这种思想,文章提出了三个问题:
(1)如何定义图中的子图结构?
给出一个节点,规定最大长度,就可以得到以该节点为中心的EGO网络。在该网路中进行随机游走,就能够得到关于该节点的子图结构。
(2)如何定义子图结构的相似性?
文章认为属于同一EGO网络的即为相似的子图结构,不同网络则不相似。此处应当注意的是,在进行随机游走后,要对游走序列中的节点重新编号,这样是为了避免在比较子图结构时,仅仅简单地比较了节点的原始编号来判断相似性。
(3)如何定义编码器?
能够将子图结构变为低维向量,并且能够对相似的结构生成相似嵌入,不相似结构生成不相似嵌入,就是合适的编码器。
1.3 位置编码
在计算节点嵌入时,文章引入了位置编码如下:
具体来说,给出子图的邻接矩阵和度数矩阵,就可以进行拉普拉斯矩阵分解,得到的U中的特征值就可以作为位置编码,利用sin和cos函数可以计算得到不同位置对应的数值,具体有(非文章公式):
1.4 批采样设置
编码器训练过程中,针对损失函数,采样数量(即字典大小)越多,越能够提升编码准确率。因而,文章引入E2E和MOCO两种方法来进行批采样。E2E即端对端,其每次采样都会更新目标节点和字典,但字典大小受到采样数量的限制。MOCO使用动量更新方法进行采样,即每次采样时保留字典中的节点,每次只对目标节点进行更新,并使用动量方法将历史目标节点加入到字典中,具体有:
这样,字典就能平滑连续地进行变化。
2 微调
在训练好编码器后,对于未训练数据集,可以直接使用该编码器,只需进行微调。微调方式有两种,即Freezing mode(固定模式)和Full fine-tuning(全调整)。针对一个未训练的数据集,对特定下游任务如节点分类,一般要训练一个分类器。这两种方式的差别就在于,前者将编码器的参数固定,只调整分类器,而后者将编码器和分类器都进行调整。