【阅读笔记】图对比学习 GNN+CL

本文介绍了一种基于图数据的对比学习方法,该方法通过随机数据增强生成不同视图,并利用图神经网络提取特征。文章详细阐述了算法流程,包括采用InfoNCE损失函数促进同一图的不同增强视图表示向量的接近,而使来自不同图的视图表示向量相距较远。

🎯来源:  https://mp.weixin.qq.com/s/X7gxlcY-PaQ97MiEJmKfbg

对给定的大量无标注图数据,图对比学习算法旨在训练出一个图编码器,目前一般指图神经网络(Graph Neural Network, GNN)。由这个 GNN 编码得到的图表示向量,可以很好地保留图数据的特性

Graph Contrastive Learning with Augmentations. NeurIPS 2020.

算法步骤:

1. 随机采样一批(batch)图

2. 对每一个图进行两次随机的数据增强(增删边/舍弃节点)得到新图(view)

3. 使用待训练的 GNN 对 View 进行编码,得到节点表示向量(node representation)和图表示向量(graph representations) 

4. 根据上述表示向量计算 InfoNCE 损失,其中由同一个 graph 增强出来的 view 的表示相互靠近,由不同的 graph 增强得到的 view 的表示相互远离;【特征被加强】


【启发式图数据增强】由于图数据经过GNN 后会产生 节点表示

### 图神经网络与迁移学习的应用场景 图神经网络(GNNs)通过聚合邻域节点的信息来学习节点嵌入,从而有效地处理图结构数据[^1]。当涉及到迁移学习时,这种特性使得GNN能够在不同领域之间传递知识。 #### 应用场景 1. **跨领域推荐系统** 推荐系统的成功依赖于捕捉用户行为模式的能力。利用GNN可以建模用户-物品交互形成的复杂网络结构。而迁移学习则允许模型将在一个领域的学到的知识迁移到另一个相似但不同的领域中去。例如,在电影评分预测上训练好的GNN可以直接应用于音乐偏好预测任务中,只需微调部分参数即可适应新环境下的分布差异。 2. **生物医学研究** 生物分子之间的相互作用构成了复杂的网络形式,如蛋白质-蛋白质互作网(PPI)或者药物靶点关联图谱。借助迁移学习框架下预训练过的大型PPI数据库上的GNN模型,研究人员可以在较小规模的数据集上更快地获得高质量的结果,加速新型疾病机制探索过程或是发现潜在治疗方案。 3. **社交网络分析** 社交媒体平台上存在着大量的人际关系链路构成的巨大社会图景。对于那些希望理解社区动态变化趋势的企业而言,他们往往面临着缺乏标注样本的问题。此时如果能先在一个拥有充足标签信息的其他社交平台之上预先训练好相应的GNN架构,则可以通过简单的调整迅速部署至目标环境中开展深入洞察工作。 ### 实现方式 一种常见的做法是在源域(即有较多可用标记实例的地方)上充分训练基础版GNN作为初始化权重;接着针对特定目标任务选取合适的损失函数指导下游finetune阶段的学习进程。具体来说: ```python import torch.nn as nn from dgl import DGLGraph from dgl.nn.pytorch.conv import GraphConv class GCN(nn.Module): def __init__(self, in_feats, h_feats, num_classes): super(GCN, self).__init__() self.conv1 = GraphConv(in_feats, h_feats) self.conv2 = GraphConv(h_feats, num_classes) def forward(self, g: DGLGraph, features): h = self.conv1(g, features) h = F.relu(h) h = self.conv2(g, h) return h # 假定已经加载好了两个图g_source 和 g_target 及其对应的feature矩阵features_source/features_target model = GCN(features_source.shape[1], hidden_size=16, num_classes=num_class).to(device) optimizer = optim.Adam(model.parameters(), lr=learning_rate) for epoch in range(num_epochs): model.train() logits = model(g_source, features_source) loss = criterion(logits[train_mask], labels[train_mask]) optimizer.zero_grad() loss.backward() optimizer.step() # Fine-tuning on target domain with frozen layers or lower learning rate. for param in model.named_parameters(): if 'conv' not in param[0]: param[1].requires_grad_(False) fine_tuner_optimizer = optim.SGD(filter(lambda p:p.requires_grad,model.parameters()),lr=fine_tune_lr,momentum=momentum) for fine_epoch in range(fine_tune_epochs): ... ``` 上述代码片段展示了一个简单版本的两层GCNs如何被用来做迁移学习的例子。这里假设有一个源域`source_domain_data=(g_source,features_source)`和一个目标域`target_domain_data=(g_target,features_target)`。首先在整个源域数据集中进行完整的训练周期以获取较好的泛化性能;然后再切换到只更新某些选定层的方式继续优化直至收敛为止。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值