本文是对《CGC: Contrastive Graph Clustering for Community Detection and Tracking》一文的总结,如有侵权即刻删除。
朋友们,我们在github创建了一个图学习笔记库,总结了相关文章的论文、代码和我个人的中文笔记,能够帮助大家更加便捷地找到对应论文,欢迎star~
Chinese-Reading-Notes-of-Graph-Learning
更多相关文章,请移步:文献阅读总结:网络表示学习/图学习
《CGC: Contrastive Graph Clustering for Community Detection and Tracking》
——WWW2022
Author: Namyong Park
文章在时序图上通过对比图聚类实现了社区检测,提出了CGC算法。介绍了图数据上可以用来作为对比信号的信息,即节点特征、网络同质性和分层次社区结构。此外,还介绍了如何在静态快照式的动态图上进行对比图聚类。
给出图G=(V,E),图聚类的作用在于给定K个聚类中心,将图中的节点围绕着不同的聚类中心分为k类。其中,一个节点可以属于多个类,也可以只属于一个类。
在此文章介绍的时序图,实质上是动态图中的静态快照(此后称时序图),即按照若干个时间节点截取不同时刻下的图状态,生成多个G并构成时间序列。动态图上的聚类,即在每个时刻下都完成一次节点聚类。
两个变量间的互信息(Mutual Information)指的是通过一个变量X观察到另一个变量Y的信息量,有:
然而,计算互信息较为复杂,研究者们往往取其下界进行计算,在此有一类取下界的方法InfoNCE如下:
上式意为,给定一组K个独立样本,函数f旨在为每个xi预测K个样本中与哪个样本在一起,即通过为正样本对分配一个较大的分数,而为其他负样本对赋值较小分数。
文章中出现的变量如下:
图聚类往往分为两步:(1)根据当前节点嵌入调整聚类关系;(2)根据聚类关系优化节点嵌入。而对比学习通常出现在第二步,其核心思想是通过正样本对与负样本对的对比优化节点嵌入。在图数据中,有一些信息可以作为对比信号,文章进行了介绍。
文章认为,属于同一社区(类)的节点往往有着相似的特征,那么对于一个节点嵌入h_u,可以选择其自身的特征f_u作为正样本,随机选取其他节点的特征作为负样本,则有:
在图中,相似的节点往往会更加接近,因此该类对比信号以节点的邻域为界限划定正负样本。属于节点邻域的可以作为其正样本,其他节点随机抽取作为负样本。
文章指出在节点的邻域中,同样可以将邻居节点划分为两部分,即与源节点有共同邻居的邻居节点和除此之外的邻居节点:
为了获取负样本,文章构造了扰动函数C,通过将原图的邻接矩阵行列颠倒生成新的扰动后的图,再在扰动图中通过GNN聚合得到节点嵌入,并抽取作为负样本。
文章指出,在进行社区检测时,假设对三个社区中心点进行聚类,那么同时也会以10个和30个社区中心点为基础做聚类,即实现不同数量的社区检测,使用分层次的结果来加强社区检测效果。则对一组不同社区数量的集合,节点的正样本在某一社区数量下选择,负样本在其他社区数量下选择:
最终,多层次对比学习的损失函数可构造为:
而组成这些损失函数的节点嵌入可由GNN的encoder得到:
其算法流程如下:
上文提到,此处的时序图实际上指的是静态快照式的动态图,即存在多个时刻的图信息构造成图流。那么上一时刻的图可以作为当前时刻图的正样本,并同样使用上文中的扰动函数C构造负样本,则损失函数可定义为:
在时序图中,对节点嵌入进行编码的Encoder应当考虑到时间信息,即在聚合邻居信息时,要考虑到交互的先后问题,因此对节点嵌入进行了考虑时间衰减性质的修正:
此外,应当注意的是,图流并非延续不断的,如果经过了较长的时间间隔,或图在短时间内发生了剧烈变化,那么新的图快照就不能以旧图为正样本,反而会得到错误的结果。因此,文章提出了图流切割的概念。
通过比较前后两张图快照中共同出现的节点之间的差距,来衡量两张图快照之间是否发生了剧烈变化,如果发生了,则在两者之间进行切割,分成两段图流。衡量图变化的距离函数如下:
整个CGC算法的流程如下: