Graph Self-Supervised Learning 之 Contrastive Learning(个人笔记,仅作个人备忘录)

Graph Self-Supervised Learning 之 Contrastive Learning

DGI,Deep Graph Infomax,模仿 Deep Infomax,原始图 用 encoder 学图节点的表示 h h h,然后 readout 出图级表示 g g g;打乱 X 的行,让图的拓扑结构不变,但是节点的 feature vector 随机重排(corrupted)了,用相同的 encoder 学习出被 corrupted 后图的点表示 h ′ h' h。然后用 bilinear 评分 -> sigmoid 变成概率 -> BCE Loss 得到,让 h h h g g g 近一些,让 h ′ h' h g g g 远一些,与训练后 freeze 住 encoder,只用它对输入得到的 graph embeddings 进行下游任务的训练,只更新下游学习器的参数。

DGI 像是个开创者,提到 DGI 都是指上述侠义的算法,但广义上,很多相关算法都算上是在把 graph 搞得 infomax;正如很多 graph 的 encoder 都是 做 convolution,但是只有 GCN 被叫 GCN(这与 GNN 不同,GNN 提出来是个循环的模型,后来不特指那个了)。

GMI,Graphical Mutual Information,把每个点经 encoder 得到的表示 h i h_i hi 和该点所有 k-hop neighbors 的 raw feature 即 x j x_j xj 做互信息最大化,用 bilinear 评分 -> sigmoid -> soft-plus;负样本对随机采样自不相同的节点(可能会采到邻居?反正代码里是只要与正样本不 identical 就可)。除此之外,做边预测, σ ( h i T h j ) \sigma(h_i^Th_j) σ(hiThj) 。idea 没啥难的,感觉就是给了数学证明(让这个策略有信息论的基础支撑),且实验做得很足,直推、归纳、边预测都有,监督、其他自监督都有。给代码了,但是只给了 Cora 的,别的实验都没给,写的有点随意了,大量代码基于 DGI 的一些实现,很容易就看得出来。实现得对比有点看不懂,涉及邻居的对比,论文写的是 I ( h i , x j ) I(h_i, x_j) I(hi,xj),但是实现的时候把 x j x_j xj 过了一个线性层,搞了个 average pooling 后得 h_neighbor,然后对 h i h_i hi 进行负采样得到对应的负样本,让 h_neighbor 分别跟正样本 h i h_i hi 和负样本做对比,与论文出入挺大的。idea 特色是把生成和对比一起用上了吧,这挺好的,可能是双线性(带参数的信息融合)搞图 MI 的开创者?

GCA, Graph Contrastive Learning with Adaptive Augmentation,很像 AD-GCL 和 GraphCL 的对比,都是用了 InfoBCE 当对比损失函数,只是 AD-GCL 和 GraphCL 是图级表示 (global representation after graph pooling) 作正负样本,而 GCA 是点级表示 (node representation) 作正负样本,负样本既包括试图内,又包括视图间。

l ( u i , v i ) = l o g e θ ( u i , v i ) / τ e θ ( u i , v i ) / τ + ∑ k ≠ i e θ ( u i , v k ) / τ + ∑ k ≠ i e θ ( u i , u k ) / τ \textit l (\mathbf u_i, \mathbf v_i) = log \frac{e^{\theta(\mathbf u_i, \mathbf v_i)/\tau}} {e^{\theta(\mathbf u_i, \mathbf v_i)/\tau} + \sum \limits _{k \neq i}e^{\theta(\mathbf u_i, \mathbf v_k)/\tau} + \sum \limits _{k \neq i}e^{\theta(\mathbf u_i, \mathbf u_k)/\tau}} l(ui,vi)=logeθ(ui,vi)/τ+k=ieθ(ui,vk)/τ+k=ieθ(ui,uk)/τeθ(ui,vi)/τ

GraphCL,Graph Contrastive Learning with Augmentations,用很多图增强手段,挑两个搞出两个 view 来,用类似上面的公式作对比,每个 batch 里找正负样本对,每个对比的样本是图级表示。

AD-GCL,用生成式的手段(生成边)搞出增强图来,也是用类似上面的公式作对比,每个 batch 里找正负样本,样本是图级表示;但是用对抗式训练的方法,intuitively 理解是让 graph encoder 学到更加有用的、更加重要的信息。

InfoGraph, InfoGraph: Unsupervised and Semi-supervised Graph-Level Representation Learning via Mutual Information Maximization,让图级表示跟点级表示(论文里叫 patch representations)距离近一些。Unsupervised 学习图分类的情况,直接把 对比 unsupervised 学习后的图级表示过下游分类器;Semi-supervised 时搞两个 encoder 防止负迁移,既做大两个 encoder 的互信息(类似 Knowledge distillation(同为拉近两个模型的输出),也类似 MoCo(同为对比学习搞两个 encoder)),又让 unsupervised 那个 encoder 搞对比学习,同时 supervised 的那个 encoder 搞正常监督训练。核心还是在 unsupervised 的 encoder 的更新(图级表示与点表示拉近),不过是内嵌在了更大的框架下。这个适用于 Semi-supervised 学习的大 idea 是否 work 不重要,关键是很 novel,虽然跟 core idea —— 图对比(也就是那个 unsupervised 的部分)没啥关系。

你可能感兴趣的:(深度学习,人工智能)