【论文阅读】AD-GCL:Adversarial Graph Augmentation to Improve Graph Contrastive Learning

研究提出了一种名为AD-GCL的对抗性图对比学习方法,旨在解决图神经网络(GNN)在自监督学习中可能捕获冗余信息的问题。AD-GCL通过优化GCL中的对抗性图增强策略,使GNN在训练过程中学习到最少但足够的信息。它由GNN编码器和基于GNN的增强器组成,编码器采用InfoMax最大化原始图与增强图的互信息,而增强器学习消除冗余信息的增强策略。通过实例化为可学习的EdgeDropping GDA模型,AD-GCL能够端到端训练并调整增强策略,以保留与下游任务相关的信息。实验结果证明了AD-GCL的有效性和优势。

摘要

提出了对抗性图对比学习——AD-GCL,它通过优化GCL中使用的对抗性图增强策略,使GNN在训练过程中避免捕获冗余(图特征)信息。

1 引言

InfoMax原则可能会有风险,因为它可能会推动编码器捕获与下游任务无关的冗余信息。与InfoMax不同,information bottleneck(IB)要求编码器捕获下游任务的最小的足够信息。具体来说,IB最小化来自原始数据的信息,同时最大化与下游任务相关的信息。随着冗余信息被移除,IB学习到的编码器往往更鲁棒和可转移。

当有关下游任务的知识不可用时,如何训练可能删除冗余信息的GNN?本文提出了一个方法,将GCL与对抗性训练相匹配,称为AD-GCL。AD-GCL由两个组成部分组成:

  1. 一个GNN编码器。它采用InfoMax来最大化原始图与其增广图的表示之间的互信息
  2. 一个基于GNN的增强器。其旨在优化增强策略,以尽可能减少原始图中的冗余信息

AD-GCL本质上允许编码器捕获最小的足够信息来区分数据集中的图。结果表明,在增强器的搜索空间上有一定的正则化,AD-GCL可以产生下游任务相关信息的下界保证,同时保持原始图中冗余信息的上界保证,匹配IB原理的目标。

我们进一步给出了AD-GCL的一个实例化:GNN增强器使用了一个任务不可知的增强策略,并且将学习一个与输入图相关非均匀边丢弃概率来执行图的增强。

2 准备工作

属性图 G = ( V , E ) G=(V,E) G=(V,E),其中 V V V是节点集, E E E是边集。 G G G可能具有维度为 F F F的节点属性 { X v ∈ R F ∣ v ∈ V } \{X_v∈\mathbb{R}^F|v∈V\} { XvRFvV}和边属性 { X e ∈ R F ∣ e ∈ E } \{X_e∈\mathbb{R}^F|e∈E\} { XeRFeE}。我们将节点 v v v的邻居集表示为 N v \mathcal{N}_v Nv

2.1 学习图表示

给定空间 G \mathcal{G} G中的一组图 G i , i = 1 , 2 , . . . , n G_i,i=1,2,...,n Gi,i=1,2,...,n,目标是学习一个编码器 f : G → R d f:\mathcal{G}→\mathbb{R}^d f:GRd,其中 f ( G i ) f(G_i) f(Gi)可以进一步用于一些下游任务。我们还假设所有的 G i G_i Gi都是从定义在 G \mathcal{G} G上的未知分布 P G \mathbb{P}_\mathcal{G} PG中独立同分布地采样的。另一个模型 q : R d → Y q:\mathbb{R}^d→\mathcal{Y} q:RdY 将学习基于 q ( f ( G i ) ) q(f(G_i)) q(f(Gi))的预测 Y i Y_i Yi。我们假设 ( G i , Y i ) (G_i,Y_i) (Gi,Yi)是从一个分布 P G × Y = P Y ∣ G P G \mathbb{P}_{\mathcal{G}×\mathcal{Y}}=\mathbb{P}_{\mathcal{Y}|\mathcal{G}}\mathbb{P}_{\mathcal{G}} PG×Y=PYGPG中独立同分布地采样的,其中 P Y ∣ G \mathbb{P}_{\mathcal{Y}|\mathcal{G}} PYG是在给定图的下游任务中图标签的条件分布。

2.2 GNNs

对于图 G = ( V , E ) G=(V,E) G=

<think>好的,我现在需要处理用户关于A-GCL(Asymmetric Graph Contrastive Learning)的查询。首先,用户要求论文解读、实现方法和相关代码。我需要先回顾一下用户提供的引用资料,特别是引用[3]和[4],因为它们提到了非对称策略和模型增强,这可能与A-GCL相关。 首先,用户提到的引用[3]指出,现有GCL方法的局限性,并提出了通过操纵视图编码器结构作为模型增强,其中策略一是非对称策略。这可能就是A-GCL的核心思想,即采用非对称的编码器结构来提升对比学习的效果。引用[4]的论文标题也提到改进图对比学习的增强一致性,可能涉及A-GCL的具体方法。 接下来,我需要解释A-GCL的基本原理。根据引用[3],非对称策略可能指在生成视图时使用不同的编码器,而不是对称的相同结构。例如,一个分支使用更复杂的编码器,而另一个分支使用简化的,这样能避免信息泄漏并提升表示质量。此外,模型增强可能包括其他策略,如动态更新或停止梯度,这些都需要整合到实现方法中。 在实现方法部分,我需要分步骤说明。首先,数据增强部分,图数据通常的增强方法如边扰动、节点特征掩码等。然后是编码器的非对称设计,比如主编码器用GNN,副编码器用MLP,或者不同结构的GNN。接着是对比损失,通常使用InfoNCE损失,但要注意非对称处理,比如只在一个方向计算损失。最后是训练策略,如动态更新目标网络或梯度停止,以保持非对称性。 关于代码实现,用户可能需要一个示例框架。根据引用[2]中的DCL编解码过程,可以类比写出A-GCL的结构。例如,使用PyTorch和PyG库构建两个编码器,定义前向传播时生成不同视图,计算对比损失时只考虑一个方向,并应用优化器更新主编码器,而目标编码器通过动量更新。 在生成相关问题的时候,需要围绕A-GCL的核心概念、实现细节、优化方法以及与其他技术的对比展开,这样能帮助用户更深入理解。 最后,需要确保所有数学公式正确使用LaTeX格式,行内公式用$...$,独立公式用$$...$$。同时检查引用标注是否正确,每个引用在回答中自然出现,并确保回答结构清晰,符合用户的要求。</think>### A-GCL(Asymmetric Graph Contrastive Learning)论文解读与实现方法 #### 1. 核心思想 A-GCL(非对称图对比学习)通过**非对称编码器设计**提升图对比学习的表示质量。传统图对比学习(GCL)通常对称地生成两个视图并使用相同编码器,而A-GCL引入**动态非对称架构**,例如: - 主编码器(在线网络)使用复杂图神经网络(如GCN) - 目标编码器(目标网络)使用动量更新的简单网络(如MLP)[^3] 这种方法避免信息泄漏,增强模型对图结构扰动的鲁棒性。 #### 2. 关键技术实现 ##### 2.1 非对称策略 - **编码器结构差异**:主编码器$f_\theta$包含可学习参数,目标编码器$f_\xi$通过动量更新: $$ \xi \leftarrow \tau \xi + (1-\tau)\theta $$ 其中$\tau$为动量系数(通常$\tau=0.99$) - **梯度阻断**:目标网络不进行反向传播 ##### 2.2 增强一致性优化 - 通过对比不同增强视图的嵌入向量: $$ \mathcal{L} = -\log \frac{\exp(s(z_i,z_j)/\tau)}{\sum_{k=1}^N \exp(s(z_i,z_k)/\tau)} $$ 其中$s(\cdot)$为余弦相似度,$\tau$为温度系数[^4] #### 3. 代码实现框架(PyTorch + PyG) ```python import torch from torch_geometric.nn import GCNConv class Encoder(torch.nn.Module): def __init__(self, in_dim, hid_dim): super().__init__() self.conv1 = GCNConv(in_dim, hid_dim) self.conv2 = GCNConv(hid_dim, hid_dim) def forward(self, x, edge_index): x = self.conv1(x, edge_index).relu() return self.conv2(x, edge_index) class A_GCL(torch.nn.Module): def __init__(self, encoder, projector, tau=0.99): super().__init__() self.online_encoder = encoder # 主编码器 self.target_encoder = projector # 目标编码器(MLP) self.tau = tau # 初始化参数一致性 self.target_encoder.load_state_dict(self.online_encoder.state_dict()) @torch.no_grad() def update_target(self): # 动量更新目标网络 for param_o, param_t in zip(self.online_encoder.parameters(), self.target_encoder.parameters()): param_t.data = self.tau*param_t + (1-self.tau)*param_o def forward(self, view1, view2): # 生成在线编码 h1 = self.online_encoder(*view1) h2 = self.online_encoder(*view2) # 生成目标编码(停止梯度) with torch.no_grad(): z1 = self.target_encoder(*view1) z2 = self.target_encoder(*view2) # 计算对比损失(仅在线->目标方向) loss = contrastive_loss(h1, z2) + contrastive_loss(h2, z1) return loss.mean() ``` #### 4. 关键改进点 1. **结构非对称性**:主/目标网络使用不同复杂度的模型(GCN vs MLP) 2. **动态更新机制**:目标网络参数通过动量缓慢更新[^3] 3. **单方向对比**:仅计算在线网络到目标网络的对比损失
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值